diff --git a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java index 181e9cdf..13e25c3a 100644 --- a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java +++ b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/main/FancyHologramsPlugin.java @@ -29,6 +29,7 @@ import de.oliver.fancyholograms.storage.HologramStorage; import de.oliver.fancyholograms.storage.StorageMigrator; import de.oliver.fancyholograms.storage.json.JsonStorage; import de.oliver.fancyholograms.trait.HologramTraitRegistryImpl; +import de.oliver.fancyholograms.trait.builtin.FileContentTrait; import de.oliver.fancyholograms.trait.builtin.MultiplePagesTrait; import de.oliver.fancyholograms.util.PluginUtils; import de.oliver.fancylib.FancyLib; @@ -190,6 +191,7 @@ public final class FancyHologramsPlugin extends JavaPlugin implements FancyHolog metrics.registerLegacy(); traitRegistry.register(MultiplePagesTrait.class); + traitRegistry.register(FileContentTrait.class); new StorageMigrator().migrate(); diff --git a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/trait/builtin/FileContentTrait.java b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/trait/builtin/FileContentTrait.java new file mode 100644 index 00000000..3f0d6702 --- /dev/null +++ b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/trait/builtin/FileContentTrait.java @@ -0,0 +1,92 @@ +package de.oliver.fancyholograms.trait.builtin; + +import de.oliver.fancyholograms.api.data.TextHologramData; +import de.oliver.fancyholograms.api.trait.HologramTrait; +import org.jetbrains.annotations.ApiStatus; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +@ApiStatus.Experimental +public class FileContentTrait extends HologramTrait { + + private static final Configuration DEFAULT_CONFIG = new Configuration( + "server.properties", + 1000 + ); + + private Configuration config; + + public FileContentTrait() { + super("file_content"); + } + + @Override + public void onAttach() { + if (!(hologram.getData() instanceof TextHologramData)) { + throw new IllegalStateException("Hologram must be text hologram to use FileContentTrait"); + } + + load(); + + if (config.refreshInterval > 0) { + hologramThread.scheduleWithFixedDelay( + this::updateHologram, + 0, + config.refreshInterval(), java.util.concurrent.TimeUnit.MILLISECONDS); + } else { + updateHologram(); + } + } + + public void updateHologram() { + Path path = Paths.get(config.filePath()); + if (!path.toFile().exists()) { + logger.warn("File does not exist: " + config.filePath()); + return; + } + + try { + String content = Files.readString(path); + List lines = List.of(content.split("\\r?\\n")); + ((TextHologramData) hologram.getData()).setText(lines); + } catch (IOException e) { + logger.error("Failed to read file content of: " + config.filePath()); + logger.error(e); + } + } + + @Override + public void load() { + try { + config = storage.get(hologram.getData().getName(), Configuration.class); + } catch (IOException e) { + logger.error("Failed to load configuration for FileContentTrait"); + logger.error(e); + } + if (config == null) { + config = DEFAULT_CONFIG; + save(); + } + } + + @Override + public void save() { + try { + storage.set(hologram.getData().getName(), config); + } catch (IOException e) { + logger.error("Failed to save configuration for FileContentTrait"); + logger.error(e); + } + } + + record Configuration( + String filePath, + long refreshInterval + ) { + + } +} diff --git a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/trait/builtin/MultiplePagesTrait.java b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/trait/builtin/MultiplePagesTrait.java index 947470fc..4b179d77 100644 --- a/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/trait/builtin/MultiplePagesTrait.java +++ b/plugins/fancyholograms/src/main/java/de/oliver/fancyholograms/trait/builtin/MultiplePagesTrait.java @@ -1,7 +1,6 @@ package de.oliver.fancyholograms.trait.builtin; import de.oliver.fancyholograms.api.data.TextHologramData; -import de.oliver.fancyholograms.api.trait.DefaultTrait; import de.oliver.fancyholograms.api.trait.HologramTrait; import org.jetbrains.annotations.ApiStatus; @@ -11,7 +10,6 @@ import java.util.List; import java.util.concurrent.TimeUnit; @ApiStatus.Experimental -@DefaultTrait public class MultiplePagesTrait extends HologramTrait { private static final Configuration DEFAULT_CONFIG = new Configuration(