fancydialogs: Implement dialog storage with JSON support

This commit is contained in:
Oliver
2025-05-15 20:32:28 +02:00
committed by Oliver
parent 41df112420
commit c91ceb1359
4 changed files with 123 additions and 3 deletions

View File

@@ -1,19 +1,25 @@
package com.fancyinnovations.fancydialogs.api;
import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.api.data.types.DialogType;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
public abstract class Dialog {
private final @NotNull String id;
private @NotNull DialogType dialog;
private String id;
private Type type;
private DialogType dialog;
public Dialog(@NotNull String id, @NotNull DialogType dialog) {
public Dialog(@NotNull String id, @NotNull Type type, @NotNull DialogType dialog) {
this.id = id;
this.type = type;
this.dialog = dialog;
}
public Dialog() {
}
abstract public void open(Player player);
abstract public void close(Player player);
@@ -22,6 +28,14 @@ public abstract class Dialog {
return id;
}
public @NotNull Type getType() {
return type;
}
public void setType(@NotNull Type type) {
this.type = type;
}
public @NotNull DialogType getDialog() {
return dialog;
}
@@ -29,4 +43,8 @@ public abstract class Dialog {
public void setDialog(@NotNull DialogType dialog) {
this.dialog = dialog;
}
public enum Type {
NOTICE,
}
}

View File

@@ -1,6 +1,8 @@
package com.fancyinnovations.fancydialogs;
import com.fancyinnovations.fancydialogs.registry.DialogRegistry;
import com.fancyinnovations.fancydialogs.storage.DialogStorage;
import com.fancyinnovations.fancydialogs.storage.JsonDialogStorage;
import de.oliver.fancyanalytics.logger.ExtendedFancyLogger;
import de.oliver.fancyanalytics.logger.LogLevel;
import de.oliver.fancyanalytics.logger.appender.Appender;
@@ -21,6 +23,7 @@ public class FancyDialogsPlugin extends JavaPlugin {
private final ExtendedFancyLogger fancyLogger;
private DialogRegistry dialogRegistry;
private DialogStorage dialogStorage;
public FancyDialogsPlugin() {
INSTANCE = this;
@@ -43,6 +46,7 @@ public class FancyDialogsPlugin extends JavaPlugin {
@Override
public void onLoad() {
dialogRegistry = new DialogRegistry();
dialogStorage = new JsonDialogStorage();
fancyLogger.info("Successfully loaded FancyDialogs version %s".formatted(getDescription().getVersion()));
}
@@ -71,4 +75,16 @@ public class FancyDialogsPlugin extends JavaPlugin {
return INSTANCE;
}
public ExtendedFancyLogger getFancyLogger() {
return fancyLogger;
}
public DialogRegistry getDialogRegistry() {
return dialogRegistry;
}
public DialogStorage getDialogStorage() {
return dialogStorage;
}
}

View File

@@ -0,0 +1,20 @@
package com.fancyinnovations.fancydialogs.storage;
import com.fancyinnovations.fancydialogs.api.Dialog;
import com.fancyinnovations.fancydialogs.api.data.types.DialogType;
import java.util.Collection;
public interface DialogStorage {
void save(Dialog dialog);
void saveBatch(Collection<Dialog> dialogs);
void delete(Dialog dialog);
Collection<Dialog> loadAll(Dialog.Type type);
Collection<Dialog> loadAll();
}

View File

@@ -0,0 +1,66 @@
package com.fancyinnovations.fancydialogs.storage;
import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
import com.fancyinnovations.fancydialogs.api.Dialog;
import de.oliver.jdb.JDB;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class JsonDialogStorage implements DialogStorage{
private final JDB jdb;
public JsonDialogStorage() {
this.jdb = new JDB("plugins/FancyDialogs/data/dialogs");
}
@Override
public void save(Dialog dialog) {
try {
jdb.set(dialog.getType().name().toLowerCase() + "/" + dialog.getId(), dialog);
} catch (IOException e) {
FancyDialogsPlugin.get().getFancyLogger().error("Failed to save dialog " + dialog.getId());
FancyDialogsPlugin.get().getFancyLogger().error(e);
}
}
@Override
public void saveBatch(Collection<Dialog> dialogs) {
for (Dialog dialog : dialogs) {
save(dialog);
}
}
@Override
public void delete(Dialog dialog) {
jdb.delete(dialog.getType().name().toLowerCase() + "/" + dialog.getId());
}
@Override
public Collection<Dialog> loadAll(Dialog.Type type) {
List<Dialog> dialogs = new ArrayList<>();
try {
dialogs = jdb.getAll(type.name().toLowerCase(), Dialog.class);
} catch (IOException e) {
FancyDialogsPlugin.get().getFancyLogger().error("Failed to load all dialogs for type: " + type);
FancyDialogsPlugin.get().getFancyLogger().error(e);
}
return dialogs;
}
@Override
public Collection<Dialog> loadAll() {
List<Dialog> dialogs = new ArrayList<>();
for (Dialog.Type t : Dialog.Type.values()) {
dialogs.addAll(loadAll(t));
}
return dialogs;
}
}