Stage 12: Data storage system
This commit is contained in:
parent
82ed455cd2
commit
4fd7955d56
62 changed files with 5613 additions and 0 deletions
103
src/main/java/dev/loki/hook/HookStruggle.java
Normal file
103
src/main/java/dev/loki/hook/HookStruggle.java
Normal 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();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue