Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.jonas; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import de.jonas.GamePlayer.GamePlayerTeam; import static de.jonas.Rush.game; import java.sql.SQLException; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; /** * * @author Jonas */ public class Game { public enum GameState { LOBBY, COUNTDOWN, RUNNING, END, RESTART, BLOCKED }; //The State of the Game public boolean full; //Shows if Game is full public Integer maxplayers; //Maximum Players to join public Integer minplayers; //Minimum Players to play public HashMap<String, Player> players; //Player List public HashMap<Player, GamePlayer> gameplayers; //Game Player List public GameState state; //->GameState public String motd; //Motd for Signs public Integer playeralive; public Plugin pl; public static Rush p; //Init Game public Game(GameState state, Integer maxplayers, Integer minplayers, Plugin pl) { this.full = false; this.maxplayers = maxplayers; this.minplayers = minplayers; this.players = new HashMap<>(); this.gameplayers = new HashMap<>(); this.state = state; this.motd = pl.getConfig().getString("motd.lobby"); this.playeralive = 0; this.pl = pl; } //Called if Rush switches to Lobby public void GameLobby() { for (ItemSpawner is : Rush.spawner) { is.unregister(); } ByteArrayDataOutput out = ByteStreams.newDataOutput(); //BungeeCoord Connection out.writeUTF("Connect"); out.writeUTF(pl.getConfig().getString("main.lobbyservername")); Bukkit.getServer().getLogger().log(Level.INFO, "Sending all Players to ''{0}''", pl.getConfig().getString("main.lobbyservername")); for (Player p : Bukkit.getOnlinePlayers()) { //Send all Players to Lobby Server p.sendPluginMessage(pl, "BungeeCord", out.toByteArray()); this.players.remove(p.getName()); //Remove Players from the List } pl.getServer().getLogger().log(Level.INFO, "Done sending Players."); //this.reset(); Map Reset this.state = GameState.LOBBY; //Set State this.motd = pl.getConfig().getString("motd.lobby"); //Set Motd //Bukkit.getServer().getPluginManager().disablePlugin(pl); //Bukkit.getServer().getPluginManager().enablePlugin(pl); pl.getServer().getScheduler().scheduleSyncDelayedTask(pl, new Runnable() { @Override public void run() { Bukkit.shutdown(); } }, Rush.SecondsToTicks(3)); } public void ThreadCountdown(final Plugin pl, final Integer seconds) { pl.getServer().getScheduler().scheduleSyncDelayedTask(pl, new Runnable() { @Override public void run() { pl.getServer().broadcastMessage(ChatColor.AQUA + "[" + Rush.name + "] " + ChatColor.AQUA + "Noch " + (60 - seconds) + " Sekunden"); for (Player p : Bukkit.getOnlinePlayers()) { p.setLevel(60 - seconds); } } }, Rush.SecondsToTicks(seconds)); } //Called if Countdown begins public void GameCountdown() { pl.getServer().getLogger().log(Level.INFO, "Game counting down"); this.state = GameState.COUNTDOWN; //Set State this.motd = pl.getConfig().getString("motd.lobby"); //Set Motd this.playeralive = pl.getServer().getOnlinePlayers().length; ThreadCountdown(pl, 10); ThreadCountdown(pl, 20); ThreadCountdown(pl, 30); ThreadCountdown(pl, 40); ThreadCountdown(pl, 50); int i = 1; while (i < 10) { final int i2 = i; pl.getServer().getScheduler().scheduleSyncDelayedTask(pl, new Runnable() { @Override public void run() { pl.getServer().broadcastMessage(ChatColor.AQUA + "[" + Rush.name + "] " + ChatColor.AQUA + "Noch " + (10 - i2) + " Sekunden"); for (Player p : Bukkit.getOnlinePlayers()) { p.setLevel(10 - i2); p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1, 1); } } }, Rush.SecondsToTicks(50 + i)); i++; } pl.getServer().getScheduler().scheduleSyncDelayedTask(pl, new Runnable() { @Override public void run() { for (Player p1 : Bukkit.getOnlinePlayers()) { for (Player p : game.players.values()) { GamePlayer gp = game.gameplayers.get(p); if (gp.team.equals(GamePlayerTeam.AUTO)) { if (Rush.red.players.size() > Rush.blue.players.size()) { //If Red Team > Blue Team then Player->Blue Team pl.getServer().getLogger().info("DEBUG: Player added to Team Blue"); Rush.blue.add(p); gp.team = GamePlayer.GamePlayerTeam.BLUE; game.gameplayers.put(p, gp); p.sendMessage(ChatColor.AQUA + "Du wurdest Automatisch dem Team Blau zugewiesen."); Rush.TagAPI.refreshPlayer(p); } else { if (Rush.red.players.size() < Rush.blue.players.size()) { //If Red Team < Blue Team then Player->Red Team pl.getServer().getLogger().info("DEBUG: Player added to Team Red"); Rush.red.add(p); gp.team = GamePlayer.GamePlayerTeam.RED; game.gameplayers.put(p, gp); p.sendMessage( ChatColor.AQUA + "Du wurdest Automatisch dem Team Rot zugewiesen."); Rush.TagAPI.refreshPlayer(p); } else { if (Rush.red.players.size() == Rush.blue.players.size()) { //If Red Team = Blue Team then Player->Red Team pl.getServer().getLogger().info("DEBUG: Player added to Team Red"); Rush.red.add(p); gp.team = GamePlayer.GamePlayerTeam.RED; game.gameplayers.put(p, gp); p.sendMessage( ChatColor.AQUA + "Du wurdest Automatisch dem Team Rot zugewiesen."); Rush.TagAPI.refreshPlayer(p); } } } } } p1.setLevel(0); p1.playSound(p1.getLocation(), Sound.NOTE_SNARE_DRUM, 1, 1); } GameRunning(); } }, Rush.SecondsToTicks(60)); pl.getServer() .broadcastMessage(ChatColor.AQUA + "[" + Rush.name + "] " + ChatColor.AQUA + "Noch 60 Sekunden"); } //Called if Game is running public void GameRunning() { for (Player gpp : pl.getServer().getOnlinePlayers()) { GamePlayer gp = this.gameplayers.get(gpp); if (gp.team.equals(GamePlayerTeam.BLUE)) { gpp.teleport(Rush.bluespawn); } if (gp.team.equals(GamePlayerTeam.RED)) { gpp.teleport(Rush.redspawn); } } for (Player p : pl.getServer().getOnlinePlayers()) { p.getInventory().clear(); } pl.getServer().getLogger().log(Level.INFO, "Game is running"); this.state = GameState.RUNNING; //Set State this.motd = pl.getConfig().getString("motd.running"); //Set Motd for (ItemSpawner is : Rush.spawner) { is.register(); } if (Rush.red.players.isEmpty()) { Rush.red.alive = false; } if (Rush.blue.players.isEmpty()) { Rush.blue.alive = false; } pl.getServer().getScheduler().scheduleSyncRepeatingTask(pl, new Runnable() { @Override public void run() { if (Rush.red.players.isEmpty()) { Rush.red.alive = false; } if (Rush.blue.players.isEmpty()) { Rush.blue.alive = false; } if (!Rush.red.alive) { for (Player p : Rush.blue.players.values()) { try { Rush.game.gameplayers.get(p).Win(); } catch (SQLException ex) { Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex); } } GameEnd(); return; } if (!Rush.blue.alive) { for (Player p : Rush.red.players.values()) { try { Rush.game.gameplayers.get(p).Win(); } catch (SQLException ex) { Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex); } } GameEnd(); return; } } }, Rush.SecondsToTicks(1), Rush.SecondsToTicks(3)); } //Called if Game ends public void GameEnd() { pl.getServer().getLogger().log(Level.INFO, "Game end"); this.state = GameState.END; //Set State this.motd = pl.getConfig().getString("motd.running"); //Set Motd pl.getServer().getLogger().info("DEBUG: Team Players Red: "); for (Player p : Rush.red.players.values()) { pl.getServer().getLogger().info("DEBUG: " + p.getName()); } pl.getServer().getLogger().info("DEBUG: Team Alive Red: " + Rush.red.alive); pl.getServer().getLogger().info("DEBUG: Team Players Blue: "); for (Player p : Rush.blue.players.values()) { pl.getServer().getLogger().info("DEBUG: " + p.getName()); } pl.getServer().getLogger().info("DEBUG: Team Alive Blue: " + Rush.blue.alive); if (!Rush.blue.alive) { pl.getServer().broadcastMessage( ChatColor.AQUA + "[" + Rush.name + "] " + ChatColor.GOLD + "Team Rot hat Rush gewonnen!"); } if (!Rush.red.alive) { pl.getServer().broadcastMessage( ChatColor.AQUA + "[" + Rush.name + "] " + ChatColor.GOLD + "Team Blau hat Rush gewonnen!"); } pl.getServer().getScheduler().cancelAllTasks(); pl.getServer().getScheduler().scheduleSyncDelayedTask(pl, new Runnable() { @Override public void run() { GameRestart(); GameLobby(); } }, Rush.SecondsToTicks(5)); } //Called if Game restarts public void GameRestart() { pl.getServer().getLogger().log(Level.INFO, "Game restart"); this.state = GameState.RESTART; //Set State this.motd = pl.getConfig().getString("motd.restart"); //Set Motd } //Called if Game is blocked public void GameBlocked() { pl.getServer().getLogger().log(Level.INFO, "Game blocked"); this.state = GameState.BLOCKED; //Set State this.motd = pl.getConfig().getString("motd.blocked"); //Set Motd } // public void reset() { // for(BlockState state : Rush.states) { // state.update(true); // } // Rush.states.clear(); // } }