Stage 12: Data storage system

This commit is contained in:
loki5512344 2026-05-31 20:47:02 +02:00
parent 82ed455cd2
commit 4fd7955d56
62 changed files with 5613 additions and 0 deletions

View file

@ -0,0 +1,103 @@
package dev.loki.hook;
import dev.loki.mdbd;
import dev.loki.player.PlayerState;
import dev.loki.player.Survivor;
import dev.loki.ui.TitleUI;
import org.bukkit.scheduler.BukkitTask;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class HookStruggle {
private final mdbd plugin;
private final TitleUI titleUI;
private final Map<UUID, BukkitTask> struggleTasks;
private final Map<UUID, Integer> struggleProgress;
private static final int STRUGGLE_INTERVAL_TICKS = 40;
private static final int STRUGGLE_WINDOW_TICKS = 20;
public HookStruggle(mdbd plugin, TitleUI titleUI) {
this.plugin = plugin;
this.titleUI = titleUI;
this.struggleTasks = new HashMap<>();
this.struggleProgress = new HashMap<>();
}
public void startStruggle(Survivor survivor, Hook hook) {
UUID uuid = survivor.getUuid();
if (struggleTasks.containsKey(uuid)) return;
BukkitTask task = plugin.getServer().getScheduler().runTaskTimer(
plugin,
() -> triggerSkillCheck(survivor, hook),
STRUGGLE_INTERVAL_TICKS,
STRUGGLE_INTERVAL_TICKS
);
struggleTasks.put(uuid, task);
struggleProgress.put(uuid, 0);
}
public void stopStruggle(Survivor survivor) {
UUID uuid = survivor.getUuid();
BukkitTask task = struggleTasks.remove(uuid);
if (task != null) {
task.cancel();
}
struggleProgress.remove(uuid);
}
private void triggerSkillCheck(Survivor survivor, Hook hook) {
UUID uuid = survivor.getUuid();
var player = survivor.getPlayer();
if (player == null || !player.isOnline()) {
stopStruggle(survivor);
return;
}
if (hook.getCurrentStage() != HookStage.STAGE_2) {
stopStruggle(survivor);
return;
}
titleUI.showSkillCheck(player, STRUGGLE_WINDOW_TICKS, (success) -> {
if (success) {
incrementProgress(survivor);
} else {
failStruggle(survivor);
}
});
}
private void incrementProgress(Survivor survivor) {
Integer progress = struggleProgress.getOrDefault(survivor.getUuid(), 0);
struggleProgress.put(survivor.getUuid(), progress + 1);
}
private void failStruggle(Survivor survivor) {
UUID uuid = survivor.getUuid();
struggleProgress.put(uuid, struggleProgress.getOrDefault(uuid, 0) - 2);
}
public void sacrifice(Survivor survivor) {
stopStruggle(survivor);
survivor.setState(PlayerState.DEAD);
var player = survivor.getPlayer();
if (player != null) {
player.setHealth(0);
}
}
public int getStruggleProgress(UUID uuid) {
return struggleProgress.getOrDefault(uuid, 0);
}
public void clear() {
for (BukkitTask task : struggleTasks.values()) {
task.cancel();
}
struggleTasks.clear();
struggleProgress.clear();
}
}