Update from Git Manager GUI
This commit is contained in:
126
src/main/java/de/velocityfall/manager/GameManager.java
Normal file
126
src/main/java/de/velocityfall/manager/GameManager.java
Normal file
@@ -0,0 +1,126 @@
|
||||
package de.velocityfall.manager;
|
||||
|
||||
import de.velocityfall.VelocityFall;
|
||||
import de.velocityfall.utils.StatsHandler;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class GameManager {
|
||||
|
||||
public static void startArenaCountdown(String arenaName) {
|
||||
VelocityFall plugin = VelocityFall.getInstance();
|
||||
if (plugin.getGameStartedMap().getOrDefault(arenaName, false)) return;
|
||||
|
||||
new BukkitRunnable() {
|
||||
int timeLeft = plugin.getConfig().getInt("BeforeGameCD", 15);
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
int playerCount = (int) plugin.getPlayerArenaMap().values().stream().filter(arenaName::equals).count();
|
||||
|
||||
if (playerCount < 1) {
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
if (timeLeft <= 5 && timeLeft > 0) {
|
||||
broadcast(arenaName, "§aSpiel startet in §e" + timeLeft + "...");
|
||||
}
|
||||
|
||||
if (timeLeft <= 0) {
|
||||
plugin.getGameStartedMap().put(arenaName, true);
|
||||
plugin.getArenaPlayersCountMap().put(arenaName, playerCount);
|
||||
|
||||
plugin.getSignManager().updateSign(arenaName);
|
||||
|
||||
broadcast(arenaName, "§6§lDAS SPIEL BEGINNT!");
|
||||
|
||||
Location spawn = plugin.getArenaManager().getArenaConfig().getLocation("Arenas." + arenaName + ".Spawn");
|
||||
|
||||
plugin.getPlayerArenaMap().forEach((p, a) -> {
|
||||
if (arenaName.equals(a)) {
|
||||
if (spawn != null) p.teleport(spawn);
|
||||
p.setGameMode(GameMode.ADVENTURE);
|
||||
p.setAllowFlight(false);
|
||||
p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1f, 1f);
|
||||
}
|
||||
});
|
||||
cancel();
|
||||
}
|
||||
timeLeft--;
|
||||
}
|
||||
}.runTaskTimer(plugin, 0L, 20L);
|
||||
}
|
||||
|
||||
public static void startCountdown(String arenaName) {
|
||||
startArenaCountdown(arenaName);
|
||||
}
|
||||
|
||||
public static void checkForWinner(String arenaName) {
|
||||
VelocityFall plugin = VelocityFall.getInstance();
|
||||
var countMap = plugin.getArenaPlayersCountMap();
|
||||
int remaining = countMap.getOrDefault(arenaName, 0);
|
||||
|
||||
if (remaining != 1) return;
|
||||
|
||||
var arenaPlayers = VelocityFall.getArenaPlayers(arenaName);
|
||||
if (arenaPlayers.isEmpty()) return;
|
||||
|
||||
Player winner = arenaPlayers.get(0);
|
||||
|
||||
winner.sendMessage(VelocityFall.prefix + ChatColor.translateAlternateColorCodes('&',
|
||||
plugin.getMessages().getMessagesConfig().getString("WinMessage", "&aDu hast gewonnen!")));
|
||||
|
||||
StatsHandler.addWin(winner.getUniqueId().toString());
|
||||
|
||||
plugin.ingameArenas.remove(arenaName);
|
||||
plugin.ingamePlayers.remove(winner);
|
||||
plugin.getPlayerArenaMap().remove(winner);
|
||||
countMap.remove(arenaName);
|
||||
plugin.getGameStartedMap().remove(arenaName);
|
||||
winner.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
|
||||
|
||||
resetArena(arenaName);
|
||||
|
||||
plugin.getSignManager().updateSign(arenaName);
|
||||
}
|
||||
|
||||
public static void resetArena(String arenaName) {
|
||||
VelocityFall plugin = VelocityFall.getInstance();
|
||||
|
||||
plugin.getArenaBlocksMap().forEach((block, matName) -> block.setType(Material.valueOf(matName)));
|
||||
plugin.getArenaBlocksMap().clear();
|
||||
|
||||
plugin.getGameStartedMap().put(arenaName, false);
|
||||
plugin.getArenaPlayersCountMap().remove(arenaName);
|
||||
|
||||
Location lobby = plugin.getArenaManager().getArenaConfig().getLocation("Arenas." + arenaName + ".Lobby");
|
||||
|
||||
plugin.getPlayerArenaMap().entrySet().removeIf(e -> {
|
||||
if (arenaName.equals(e.getValue())) {
|
||||
Player p = e.getKey();
|
||||
p.setGameMode(GameMode.SURVIVAL);
|
||||
p.getInventory().clear();
|
||||
if (lobby != null) p.teleport(lobby);
|
||||
plugin.ingamePlayers.remove(p);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
plugin.getSignManager().updateSign(arenaName);
|
||||
}
|
||||
|
||||
private static void broadcast(String arena, String msg) {
|
||||
VelocityFall plugin = VelocityFall.getInstance();
|
||||
plugin.getPlayerArenaMap().forEach((player, a) -> {
|
||||
if (arena.equals(a)) player.sendMessage(VelocityFall.prefix + msg);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user