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}