Files
Ambient-Audio-Zone/src/main/java/com/lexian/ambientaudio/service/ZoneService.java
T
root 6e6a94c146
Build / maven (push) Successful in 42s
Build and publish release / Build and publish Ambient Audio Zone (push) Successful in 44s
fix: use stable full-volume zone playback
2026-08-04 06:15:13 +02:00

23 lines
1.7 KiB
Java

package com.lexian.ambientaudio.service;
import com.lexian.ambientaudio.config.ZoneStore;
import com.lexian.ambientaudio.model.AudioZone;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.IOException;
import java.util.*;
/** Owns in-memory zone definitions and atomically refreshes the playback index after changes. */
public final class ZoneService {
private final JavaPlugin plugin; private final ZoneStore store; private final PlaybackService playback;
private final Map<String, AudioZone> zones = new HashMap<>();
public ZoneService(JavaPlugin plugin, PlaybackService playback) { this.plugin = plugin; this.store = new ZoneStore(plugin); this.playback = playback; }
public void reload() { plugin.reloadConfig(); zones.clear(); zones.putAll(store.load()); refreshPlayback(); }
public Collection<AudioZone> all() { return List.copyOf(zones.values()); }
public AudioZone get(String name) { return zones.get(name.toLowerCase(Locale.ROOT)); }
public void put(AudioZone zone) throws IOException { zones.put(zone.normalizedName(), zone); store.save(zones.values()); refreshPlayback(); }
public AudioZone remove(String name) throws IOException { AudioZone removed = zones.remove(name.toLowerCase(Locale.ROOT)); if (removed != null) { store.save(zones.values()); refreshPlayback(); } return removed; }
private void refreshPlayback() { FileConfiguration c = plugin.getConfig(); playback.configure(zones.values(), Math.max(1, c.getInt("playback.check-interval-ticks", 10)), 0, c.getBoolean("playback.blend-overlapping-zones", false), true, false, Math.max(0, c.getLong("playback.loop-restart-ticks", 2680))); }
}