diff --git a/pom.xml b/pom.xml index bbc8330..de780af 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ ${build.version}-SNAPSHOT - 1.0.0 + 1.0.1 ${build.version}-SNAPSHOT diff --git a/src/main/java/world/bentobox/upgrades/DefaultUpgradeSeeder.java b/src/main/java/world/bentobox/upgrades/DefaultUpgradeSeeder.java index 2974f8c..7ed76db 100644 --- a/src/main/java/world/bentobox/upgrades/DefaultUpgradeSeeder.java +++ b/src/main/java/world/bentobox/upgrades/DefaultUpgradeSeeder.java @@ -15,8 +15,15 @@ import world.bentobox.upgrades.dataobjects.rewards.RangeRewardDB; import world.bentobox.upgrades.dataobjects.rewards.SpawnerRewardDB; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Seeds 6 example upgrades for each hooked game mode on first install. @@ -24,6 +31,8 @@ */ public class DefaultUpgradeSeeder { + private static final String SEEDED_FILE = ".seeded-gamemodes"; + private final UpgradesAddon addon; public DefaultUpgradeSeeder(UpgradesAddon addon) { @@ -31,16 +40,68 @@ public DefaultUpgradeSeeder(UpgradesAddon addon) { } /** - * For each hooked game mode that has no upgrades configured, seed examples. + * For each hooked game mode that has no upgrades configured and has not + * been seeded before, seed examples. Tracks seeded game modes in a + * persistent marker file so deleted examples are not regenerated. */ public void seedIfEmpty() { + Set alreadySeeded = loadSeededGameModes(); UpgradesDataManager dm = addon.getUpgradeDataManager(); + boolean changed = false; for (String gm : addon.getHookedGameModes()) { + if (alreadySeeded.contains(gm)) { + continue; + } if (dm.getUpgradeDataByGameMode(gm).isEmpty()) { seed(dm, gm); addon.log("Seeded 8 example upgrades for " + gm + " — edit or delete them via /[gamemode] admin upgrade"); } + // Mark as seeded regardless — either we just seeded, or upgrades + // already existed. Either way, don't re-seed on future startups. + alreadySeeded.add(gm); + changed = true; + } + if (changed) { + saveSeededGameModes(alreadySeeded); + } + } + + /** + * Load the set of game mode names that have already been seeded. + */ + private Set loadSeededGameModes() { + Set seeded = new HashSet<>(); + File file = new File(addon.getDataFolder(), SEEDED_FILE); + if (!file.exists()) { + return seeded; + } + try (BufferedReader reader = Files.newBufferedReader(file.toPath())) { + String line; + while ((line = reader.readLine()) != null) { + String trimmed = line.trim(); + if (!trimmed.isEmpty()) { + seeded.add(trimmed); + } + } + } catch (IOException e) { + addon.logWarning("Could not read seeded game modes file: " + e.getMessage()); + } + return seeded; + } + + /** + * Persist the set of seeded game mode names. + */ + private void saveSeededGameModes(Set seeded) { + File file = new File(addon.getDataFolder(), SEEDED_FILE); + try (BufferedWriter writer = Files.newBufferedWriter(file.toPath())) { + for (String gm : seeded) { + writer.write(gm); + writer.newLine(); + } + } catch (IOException e) { + addon.logWarning("Could not save seeded game modes file: " + e.getMessage()); } } diff --git a/src/main/java/world/bentobox/upgrades/UpgradesPladdon.java b/src/main/java/world/bentobox/upgrades/UpgradesPladdon.java new file mode 100644 index 0000000..ce5c420 --- /dev/null +++ b/src/main/java/world/bentobox/upgrades/UpgradesPladdon.java @@ -0,0 +1,18 @@ +package world.bentobox.upgrades; + +import world.bentobox.bentobox.api.addons.Addon; +import world.bentobox.bentobox.api.addons.Pladdon; + +public class UpgradesPladdon extends Pladdon { + + private Addon addon; + + @Override + public Addon getAddon() { + if (addon == null) { + addon = new UpgradesAddon(); + } + + return addon; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..56caf1b --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,9 @@ +name: BentoBox-Upgrades +main: world.bentobox.upgrades.UpgradesPladdon +version: ${project.version}${build.number} +api-version: "1.21" + +authors: [tastybento] +contributors: ["The BentoBoxWorld Community"] +website: https://bentobox.world +description: ${project.description}