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,112 @@
package dev.loki.window;
import dev.loki.player.BasePlayer;
import dev.loki.player.Killer;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class WindowVault {
private final WindowManager windowManager;
private final Set<UUID> vaultingPlayers;
public WindowVault(WindowManager windowManager) {
this.windowManager = windowManager;
this.vaultingPlayers = new HashSet<>();
}
public boolean tryVault(BasePlayer player, org.bukkit.plugin.Plugin plugin) {
if (isVaulting(player)) return false;
Player bukkitPlayer = player.getPlayer();
if (bukkitPlayer == null) return false;
Window.PlayerContext ctx = new Window.PlayerContext(
player.isKiller(),
bukkitPlayer.getLocation()
);
Window window = windowManager.findVaultableWindow(ctx, 3.0);
if (window == null) {
bukkitPlayer.sendMessage("§cНет окна поблизости!");
return false;
}
double vaultTime = player.isKiller() ? 1.5 : getSurvivorVaultTime(player, window);
performVault(player, window, vaultTime, plugin);
return true;
}
public boolean isVaulting(BasePlayer player) {
return vaultingPlayers.contains(player.getUuid());
}
private double getSurvivorVaultTime(BasePlayer player, Window window) {
if (isFastVaultAvailable(player, window)) {
return 1.0;
}
return 1.5;
}
private boolean isFastVaultAvailable(BasePlayer player, Window window) {
return !hasRecentVault(player.getUuid());
}
private boolean hasRecentVault(UUID playerId) {
return false;
}
private void performVault(BasePlayer player, Window window, double seconds, org.bukkit.plugin.Plugin plugin) {
Player bukkitPlayer = player.getPlayer();
if (bukkitPlayer == null) return;
vaultingPlayers.add(player.getUuid());
int ticks = (int) (seconds * 20);
Location target = window.getVaultTarget(player.isKiller());
bukkitPlayer.addPotionEffect(new PotionEffect(
PotionEffectType.SLOW, ticks, 10, false, false));
bukkitPlayer.addPotionEffect(new PotionEffect(
PotionEffectType.JUMP, ticks, -10, false, false));
bukkitPlayer.getWorld().playSound(bukkitPlayer.getLocation(),
Sound.BLOCK_LADDER_STEP, 0.5f, 1.0f);
new VaultTask(player, target, plugin).runTaskLater(plugin, ticks);
}
private void completeVault(BasePlayer player, Location target) {
vaultingPlayers.remove(player.getUuid());
Player bukkitPlayer = player.getPlayer();
if (bukkitPlayer == null) return;
bukkitPlayer.teleport(target);
bukkitPlayer.getWorld().playSound(target, Sound.BLOCK_LADDER_STEP, 0.5f, 0.8f);
bukkitPlayer.removePotionEffect(PotionEffectType.SLOW);
bukkitPlayer.removePotionEffect(PotionEffectType.JUMP);
}
private class VaultTask extends BukkitRunnable {
private final BasePlayer player;
private final Location target;
VaultTask(BasePlayer player, Location target, org.bukkit.plugin.Plugin plugin) {
this.player = player;
this.target = target;
}
@Override
public void run() {
completeVault(player, target);
}
}
}