feat: add dynamic fire dispatch and rollback
Build / build (push) Failing after 8s

This commit is contained in:
Michael Burgess
2026-08-17 14:14:15 -04:00
parent f6f2f97f86
commit 0df9b059e2
11 changed files with 860 additions and 193 deletions
@@ -0,0 +1,69 @@
package net.therosegarden.firefighter;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
final class FirefighterDutyManager {
private final RoseFirefighterPlugin plugin;
private final JobsFacade jobs;
private final File file;
private final Set<UUID> offDuty = new HashSet<>();
FirefighterDutyManager(RoseFirefighterPlugin plugin, JobsFacade jobs) {
this.plugin = plugin;
this.jobs = jobs;
this.file = new File(plugin.getDataFolder(), "duty-status.yml");
load();
}
boolean isOnDuty(Player player) {
return player != null && jobs.isFirefighter(player) && !offDuty.contains(player.getUniqueId());
}
boolean setOnDuty(Player player, boolean onDuty) {
if (player == null || !jobs.isFirefighter(player)) {
return false;
}
if (onDuty) {
offDuty.remove(player.getUniqueId());
} else {
offDuty.add(player.getUniqueId());
}
save();
return true;
}
private void load() {
offDuty.clear();
if (!file.isFile()) {
return;
}
YamlConfiguration yaml = YamlConfiguration.loadConfiguration(file);
for (String value : yaml.getStringList("off-duty")) {
try {
offDuty.add(UUID.fromString(value));
} catch (IllegalArgumentException ignored) {
plugin.getLogger().warning("Ignoring invalid off-duty UUID: " + value);
}
}
}
void save() {
YamlConfiguration yaml = new YamlConfiguration();
yaml.set("off-duty", offDuty.stream().map(UUID::toString).sorted().toList());
try {
if (!plugin.getDataFolder().exists() && !plugin.getDataFolder().mkdirs()) {
plugin.getLogger().warning("Could not create plugin data folder for duty status.");
return;
}
yaml.save(file);
} catch (IOException ex) {
plugin.getLogger().severe("Could not save Firefighter duty status: " + ex.getMessage());
}
}
}