Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<revision>${build.version}-SNAPSHOT</revision>

<!-- This allows to change between versions. -->
<build.version>1.0.0</build.version>
<build.version>1.0.1</build.version>
<!-- Revision variable removes warning about dynamic version -->
<revision>${build.version}-SNAPSHOT</revision>
<!-- Do not change unless you want different name for local builds. -->
Expand Down
63 changes: 62 additions & 1 deletion src/main/java/world/bentobox/upgrades/DefaultUpgradeSeeder.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,93 @@
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.
* Skips any game mode that already has at least one configured upgrade.
*/
public class DefaultUpgradeSeeder {

private static final String SEEDED_FILE = ".seeded-gamemodes";

private final UpgradesAddon addon;

public DefaultUpgradeSeeder(UpgradesAddon addon) {
this.addon = 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<String> 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<String> loadSeededGameModes() {
Set<String> 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<String> 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());
}
}

Expand Down
18 changes: 18 additions & 0 deletions src/main/java/world/bentobox/upgrades/UpgradesPladdon.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
9 changes: 9 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -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}
Loading