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