This commit is contained in:
kento2 2026-09-01 01:43:45 +02:00
parent a365f70873
commit 0e8c48f570
39 changed files with 379 additions and 327 deletions

View file

@ -4,7 +4,9 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import site.lab0x13.scrow.configurator.configfile.ConfigFileRegistry;
import site.lab0x13.scrow.extraction.config.ExtractionConfig;
import site.lab0x13.scrow.extraction.config.ExtractionConfigStorable;
public class ExtractionPlugin extends JavaPlugin {
@ -18,6 +20,7 @@ public class ExtractionPlugin extends JavaPlugin {
@Override
public void onEnable() {
_plugin = this;
ExtractionConfig.registerAndLoad(this);
var config = new ExtractionConfigStorable(this.getDataPath().resolve("config.json"));
ConfigFileRegistry.get().register(config, ExtractionConfig.defaultConfig());
}
}

View file

@ -4,6 +4,7 @@ import net.kyori.adventure.text.Component;
import org.bukkit.Location;
import site.lab0x13.scrow.extraction.extractionpoint.ExtractionPoint;
import java.util.ArrayList;
import java.util.List;
public record ArenaConfig(
@ -12,4 +13,7 @@ public record ArenaConfig(
List<Location> spawnLocations,
List<ExtractionPoint> extractionPoints
) {
public static ArenaConfig defaultConfig() {
return new ArenaConfig("", Component.empty(), new ArrayList<>(), new ArrayList<>());
}
}

View file

@ -3,9 +3,9 @@ package site.lab0x13.scrow.extraction.config;
import site.lab0x13.scrow.configurator.storable.complex.ComplexStorable;
import site.lab0x13.scrow.configurator.storable.complex.FieldReader;
import site.lab0x13.scrow.configurator.storable.complex.FieldRegistry;
import site.lab0x13.scrow.configurator.storable.impl.MiniMessageStorable;
import site.lab0x13.scrow.configurator.storable.list.ListStorable;
import site.lab0x13.scrow.configurator.storable.impl.component.ComponentStorable;
import site.lab0x13.scrow.configurator.storable.impl.location.LocationStorable;
import site.lab0x13.scrow.configurator.storable.list.ListStorable;
import site.lab0x13.scrow.configurator.storable.primitive.StringStorable;
public class ArenaConfigStorable extends ComplexStorable<ArenaConfig> {
@ -13,9 +13,12 @@ public class ArenaConfigStorable extends ComplexStorable<ArenaConfig> {
@Override
protected void registerFields(FieldRegistry<ArenaConfig> registry) {
registry.registerField("id", new StringStorable(), ArenaConfig::id);
registry.registerField("name", new MiniMessageStorable(), ArenaConfig::name);
registry.registerField("spawnLocations", new ListStorable<>(LocationStorable::new), ArenaConfig::spawnLocations);
registry.registerField("extractionPoints", new ListStorable<>(ExtractionPointStorable::new), ArenaConfig::extractionPoints);
registry.registerField("name", new ComponentStorable(), ArenaConfig::name);
registry.registerField("spawnLocations",
new ListStorable<>(LocationStorable::new), ArenaConfig::spawnLocations);
registry.registerField("extractionPoints",
new ListStorable<>(ExtractionPointStorable::new),
ArenaConfig::extractionPoints);
}
@Override

View file

@ -1,32 +1,27 @@
package site.lab0x13.scrow.extraction.config;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.ApiStatus;
import site.lab0x13.scrow.configurator.configfile.ConfigFile;
import site.lab0x13.scrow.configurator.configfile.ConfigFileRegistry;
import site.lab0x13.scrow.configurator.storable.impl.DurationStorable;
import site.lab0x13.scrow.configurator.storable.list.ListStorable;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
public record ExtractionConfig(
List<ArenaConfig> arenas,
Duration extractionDuration
) {
private static ExtractionConfig instance;
public final class ExtractionConfig {
private ExtractionConfig() {
public static ExtractionConfig defaultConfig() {
return new ExtractionConfig(
new ArrayList<>(),
Duration.ofMillis(100)
);
}
public static final ListStorable<ArenaConfig> arenas = new ListStorable<>(ArenaConfigStorable::new);
public static final DurationStorable extractionDuration = new DurationStorable();
public ExtractionConfig {
instance = this;
}
public static void registerAndLoad(Plugin plugin) {
var configFile = ConfigFile.of(plugin.getDataPath().resolve("config.json"));
ConfigFileRegistry.get().register(configFile);
{
configFile.registerStorable("arenas", arenas);
configFile.registerStorable("extractionDuration", extractionDuration);
}
try {
configFile.load();
} catch (IOException e) {
throw new RuntimeException("failed loading config", e);
}
public static ExtractionConfig get() {
return instance;
}
}

View file

@ -0,0 +1,29 @@
package site.lab0x13.scrow.extraction.config;
import site.lab0x13.scrow.configurator.configfile.ConfigFile;
import site.lab0x13.scrow.configurator.storable.complex.FieldReader;
import site.lab0x13.scrow.configurator.storable.complex.FieldRegistry;
import site.lab0x13.scrow.configurator.storable.impl.DurationStorable;
import site.lab0x13.scrow.configurator.storable.list.ListStorable;
import java.nio.file.Path;
public class ExtractionConfigStorable extends ConfigFile<ExtractionConfig> {
public ExtractionConfigStorable(Path path) {
super(path);
}
@Override
protected void registerFields(FieldRegistry<ExtractionConfig> registry) {
registry.registerField("arenas", new ListStorable<>(ArenaConfigStorable::new), ExtractionConfig::arenas);
registry.registerField("extractionDuration", new DurationStorable(), ExtractionConfig::extractionDuration);
}
@Override
protected ExtractionConfig construct(FieldReader<ExtractionConfig> reader) {
return new ExtractionConfig(
reader.read("arenas"),
reader.read("extractionDuration")
);
}
}

View file

@ -3,6 +3,7 @@ package site.lab0x13.scrow.extraction.extractionpoint;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import site.lab0x13.scrow.extraction.compass.CompassTarget;
import site.lab0x13.scrow.extraction.config.ExtractionConfig;
import java.util.HashMap;
import java.util.Map;

View file

@ -7,7 +7,6 @@ import site.lab0x13.scrow.extraction.config.ExtractionConfig;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import static java.util.Objects.requireNonNull;
@ -28,12 +27,12 @@ public class ExtractionProgress {
private final List<Consumer<Double>> changeSubscribers = new ArrayList<>();
private final long requiredMs;
/**
* System.currentTimeMillis() at first click (in this attempt to extract)
* or < 0 if extracting hasn't been attempted recently.
* System.currentTimeMillis() at first click (in this attempt to extract)
* or < 0 if extracting hasn't been attempted recently.
*/
private long clickingSince = -1;
/**
* System.currentTimeMillis() at last click
* System.currentTimeMillis() at last click
*/
private long lastClickMs = 0;
@ -45,7 +44,7 @@ public class ExtractionProgress {
}
public ExtractionProgress() {
this(requireNonNull(ExtractionConfig.extractionDuration.value()));
this(ExtractionConfig.get().extractionDuration());
}
public void advanceExtraction() {
@ -57,6 +56,7 @@ public class ExtractionProgress {
/* reset if not called again for a while */
new BukkitRunnable() {
final long lastClickMsAtStart = lastClickMs;
@Override
public void run() {
if (lastClickMsAtStart == lastClickMs)