diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java b/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java index 2f90131..069a8c1 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java @@ -5,7 +5,7 @@ import net.berrygames.witchrush.team.TeamInfos; import net.berrygames.witchrush.team.TeamManager; import net.berrygames.witchrush.tools.ItemFactory; import net.berrygames.witchrush.tools.Locations; -import net.berrygames.witchrush.tools.ScoreboardSign; +import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.DyeColor; import org.bukkit.Material; @@ -13,6 +13,10 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.ScoreboardManager; import java.util.HashMap; import java.util.Map; @@ -78,30 +82,6 @@ public class WitchPlayer { .done()); } - public void sendGameScoreboard(){ - ScoreboardSign scoreboard = new ScoreboardSign(player, "§5§lWitchRush"); - scoreboard.setLine(15, WitchRush.get().getState()+":"+WitchRush.get().getStateTimer()); - scoreboard.setLine(14, "§r "); - scoreboard.setLine(13, manager.isInLife(TeamInfos.BLEU) ? "§a✔": "§c✖"+ "§bBleu"+ manager.getTeamBoss(TeamInfos.BLEU).getLife()); - scoreboard.setLine(12, manager.isInLife(TeamInfos.ROUGE) ? "§a✔": "§c✖"+ "§cRouge"+ manager.getTeamBoss(TeamInfos.ROUGE).getLife()); - scoreboard.setLine(11, manager.isInLife(TeamInfos.JAUNE) ? "§a✔": "§c✖"+ "§eJaune"+ manager.getTeamBoss(TeamInfos.JAUNE).getLife()); - scoreboard.setLine(10, manager.isInLife(TeamInfos.VERT) ? "§a✔": "§c✖"+ "§aVert"+ manager.getTeamBoss(TeamInfos.VERT).getLife()); - scoreboard.setLine(9, "§r "); - scoreboard.setLine(8, "§7Kills: "+WitchPlayer.get(player).getKills()); - scoreboard.setLine(7, "§7Morts: "+WitchPlayer.get(player).getDeath()); - scoreboard.setLine(6, "§r "); - scoreboard.setLine(5, "§6play.berrygames.net"); - } - - public void sendLobbyScoreboard(){ - ScoreboardSign scoreboard = new ScoreboardSign(player, "§5§lWitchRush"); - scoreboard.setLine(14, "§r "); - scoreboard.setLine(13, "§7Joueurs: "); - scoreboard.setLine(12, "§d"+WitchPlayer.getwitchMap().size()+"/16"); - scoreboard.setLine(9, "§r "); - scoreboard.setLine(8, "§6play.berrygames.net"); - } - public static WitchPlayer get(final Player player) { if (WitchPlayer.witchMap.get(player) == null) { WitchPlayer.witchMap.put(player, new WitchPlayer(player)); diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/WitchRush.java b/WitchRush/src/main/java/net/berrygames/witchrush/WitchRush.java index cfb8991..bcb302b 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/WitchRush.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/WitchRush.java @@ -60,21 +60,6 @@ public class WitchRush extends JavaPlugin { public GameState getState(){ return this.gameState; } - public String getStateTimer(){ - switch (getState()){ - case WAITING: - return null; - case STARTING: - return new StartTask().getTimer(); - case NOWITCH: - return new NoPVPTask().getTimer(); - case PVP: - return new PVPTask().getTimer(); - case DEATH_MATCH: - return new DeathMatchTask().getTimer(); - } - return null; - } public TeamManager getTeamManager() { return teamManager; } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/commands/admins/GameCMD.java b/WitchRush/src/main/java/net/berrygames/witchrush/commands/admins/GameCMD.java index 15a9472..b11750e 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/commands/admins/GameCMD.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/commands/admins/GameCMD.java @@ -20,6 +20,8 @@ public class GameCMD implements CommandExecutor { if(args.length == 1 && args[0].equals("start")){ if(!player.isOp())return false; + if(!WitchRush.get().getState().equals(GameState.WAITING)) return false; + WitchRush.get().setForcedStart(true); new StartTask().runTaskTimer(WitchRush.get(), 0, 20); WitchRush.get().setState(GameState.STARTING); diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/GameManager.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/GameManager.java index d58fe36..3c702b4 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/GameManager.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/GameManager.java @@ -64,7 +64,6 @@ public class GameManager { playerOnline.setGameMode(GameMode.SURVIVAL); witchPlayer.giveStuff(); TeamsTagsManager.setNameTag(playerOnline, teamInfos.getIDName(), teamInfos.getChatColor()+teamInfos.getTeamName()+" "); - witchPlayer.sendGameScoreboard(); }); } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java index 2ed88d1..d473710 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java @@ -18,7 +18,7 @@ public class WinManager { ++teamLeft; } if(teamManager.getPlayerTeamList(teamInfos).size() == 0){ - teamManager.getTeamBoss(teamInfos).getWitch().remove(); + teamManager.killTeamBoss(teamInfos); } } if (teamLeft == 1) { diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/DeathMatchTask.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/DeathMatchTask.java index f86cb4a..d6e3969 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/DeathMatchTask.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/DeathMatchTask.java @@ -1,30 +1,17 @@ package net.berrygames.witchrush.game.task; -import net.berrygames.witchrush.WitchPlayer; import net.berrygames.witchrush.WitchRush; import net.berrygames.witchrush.game.WinManager; import net.berrygames.witchrush.team.TeamInfos; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; public class DeathMatchTask extends BukkitRunnable { - private int sec = 0; - private int min = 3 * 60; + private int timer = 0; @Override public void run() { - if(this.sec == 60){ - this.sec = 0; - this.min += min; - } - - for(Player pls : Bukkit.getOnlinePlayers()){ - WitchPlayer.get(pls).sendGameScoreboard(); - } - for(TeamInfos infos : TeamInfos.values()){ if(WitchRush.get().getTeamManager().isInLife(infos)){ if(WitchRush.get().getTeamManager().getBossEntityMap().get(infos).getLife() > 0){ @@ -36,10 +23,7 @@ public class DeathMatchTask extends BukkitRunnable { } new WinManager(); - this.sec++; + this.timer++; } - public String getTimer() { - return this.min+":"+this.sec; - } } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/NoPVPTask.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/NoPVPTask.java index 2222f3b..f3d6868 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/NoPVPTask.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/NoPVPTask.java @@ -12,27 +12,17 @@ import org.bukkit.scheduler.BukkitRunnable; public class NoPVPTask extends BukkitRunnable { - private int sec = 0; - private int min = 3 * 60; + private int timer = 3 * 20; @Override public void run() { - if(this.sec == 0){ - this.sec = 60; - this.min -= min; - } - - if(this.min == 0 && this.sec == 0){ - + if(timer == 0){ new PVPTask().runTaskTimer(WitchRush.get(), 0, 20); WitchRush.get().setState(GameState.PVP); - for(Player pls : Bukkit.getOnlinePlayers()){ - WitchPlayer.get(pls).sendGameScoreboard(); - } - Bukkit.broadcastMessage(WitchRush.prefix()+"Les §6Witchs §dsont apparues, §d§nBonne chance à vous !"); + new WitchBoss(TeamInfos.ROUGE, Locations.WITCH_ROUGE.getLocation()); new WitchBoss(TeamInfos.BLEU, Locations.WITCH_BLEU.getLocation()); new WitchBoss(TeamInfos.VERT, Locations.WITCH_VERT.getLocation()); @@ -40,10 +30,6 @@ public class NoPVPTask extends BukkitRunnable { new HealthRunnable().runTaskTimer(WitchRush.get(), 0L, 20L); cancel(); } - sec--; - } - - public String getTimer() { - return this.min+":"+this.sec; + this.timer--; } } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/PVPTask.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/PVPTask.java index a7a6cad..7fe6af8 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/PVPTask.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/PVPTask.java @@ -10,22 +10,13 @@ import org.bukkit.scheduler.BukkitRunnable; public class PVPTask extends BukkitRunnable { - private int sec = 0; - private int min = 20 * 60; + private int timer = 20 * 60; @Override public void run() { - if(this.sec == 0){ - this.sec = 60; - this.min -= min; - } - - if(this.min == 0 && this.sec == 0){ + if(this.timer == 0){ new DeathMatchTask().runTaskTimer(WitchRush.get(), 0, 20 * 5); - for(Player pls : Bukkit.getOnlinePlayers()){ - WitchPlayer.get(pls).sendGameScoreboard(); - } WitchRush.get().setState(GameState.DEATH_MATCH); Bukkit.broadcastMessage(WitchRush.prefix()+"Le DeathMatch commence."); Bukkit.broadcastMessage(WitchRush.prefix()+"Les §5§lWitchs §dcommencent à perdre de la vie !"); @@ -34,11 +25,6 @@ public class PVPTask extends BukkitRunnable { new WinManager(); - this.sec--; + this.timer--; } - - public String getTimer() { - return this.min+":"+this.sec; - } - } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/StartTask.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/StartTask.java index 102bb7f..8fe35e3 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/StartTask.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/StartTask.java @@ -10,17 +10,11 @@ import org.bukkit.scheduler.BukkitRunnable; public class StartTask extends BukkitRunnable { - private int sec = 0; - private int min = WitchRush.get().isForcedStart() ? 0 : 2 * 60; + private int timer = WitchRush.get().isForcedStart() ? 30 : 2 * 60; @Override public void run() { - if(this.sec == 0){ - this.sec = 60; - this.min -= min; - } - if (Bukkit.getOnlinePlayers().size() < 4 && !WitchRush.get().isForcedStart()) { Bukkit.broadcastMessage(WitchRush.prefix()+"Il n'y a pas assez de joueurs pour lancer la partie !"); WitchRush.get().setState(GameState.WAITING); @@ -28,47 +22,28 @@ public class StartTask extends BukkitRunnable { return; } - if(this.min == 0 && this.sec == 0){ - WitchRush.get().getTeamManager().checkNoTeamPlayers(); + if(this.timer == 0){ new GameManager(); cancel(); } + if(this.timer == 120 || this.timer == 60 ||this.timer == 30 || this.timer == 15 || this.timer == 10 || this.timer == 5 || this.timer == 4 + || this.timer == 3 || this.timer == 2 ){ + Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+this.timer+" §dsecondes"); + for(Player pls : Bukkit.getOnlinePlayers()){ + pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + } + } + if(this.timer == 1){ + Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+this.timer+" §dseconde"); + for(Player pls : Bukkit.getOnlinePlayers()){ + pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + } + } - while(this.min == 2){ - if(this.sec == 0){ - Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+this.sec+" §dsecondes"); - for(Player pls : Bukkit.getOnlinePlayers()){ - pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); - } - } + for(Player pls : Bukkit.getOnlinePlayers()){ + pls.setLevel(timer); } - while(this.min == 1){ - if(this.sec == 30){ - Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+this.sec+" §dsecondes"); - for(Player pls : Bukkit.getOnlinePlayers()){ - pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); - } - } - } - while(this.min == 0){ - if(this.sec == 30 || this.sec == 15 || this.sec == 10 || this.sec == 5 || this.sec == 4 - || this.sec == 3 || this.sec == 2){ - Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+this.sec+" §dsecondes"); - for(Player pls : Bukkit.getOnlinePlayers()){ - pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); - } - } - if(this.sec == 1){ - Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+this.sec+" §dseconde"); - for(Player pls : Bukkit.getOnlinePlayers()){ - pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); - } - } - } - this.sec--; - } - public String getTimer() { - return min+":"+sec; + this.timer--; } } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DamageEvent.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DamageEvent.java deleted file mode 100644 index c0fea4b..0000000 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DamageEvent.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.berrygames.witchrush.listeners.players; - -import net.berrygames.witchrush.WitchPlayer; -import net.berrygames.witchrush.WitchRush; -import net.berrygames.witchrush.game.GameState; -import net.berrygames.witchrush.team.TeamInfos; -import net.berrygames.witchrush.team.TeamManager; -import net.berrygames.witchrush.tools.WitchBoss; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Witch; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; - -public class DamageEvent implements Listener { - - @EventHandler - public void onEntityDamageByEntity(final EntityDamageByEntityEvent e) { - final TeamManager teamManager = WitchRush.get().getTeamManager(); - if(!WitchRush.get().getState().equals(GameState.WAITING) && !WitchRush.get().getState().equals(GameState.STARTING)){ - - if ((e.getDamager() instanceof Player) && (e.getEntity() instanceof Witch)){ - final Player player = (Player)e.getDamager(); - final Witch witch = (Witch) e.getEntity(); - final TeamInfos playerTeamInfos = teamManager.getPlayerTeam(player); - if(teamManager.getTeamBoss(playerTeamInfos).getWitch().equals(witch)) { - player.sendMessage("§cVous ne pouvez pas tuer votre boss !"); - e.setCancelled(true); - return; - } - for (final TeamInfos teamInfos : TeamInfos.values()) { - if (teamManager.getTeamBoss(teamInfos).getWitch().equals(witch)) { - teamManager.getTeamBoss(teamInfos).getWitch().teleport(teamManager.getBossLocation(teamInfos)); - Bukkit.getOnlinePlayers().forEach(playerOnline -> { - WitchPlayer witchPlayer = WitchPlayer.get(playerOnline); - if (teamManager.isPlayerInTeam(playerOnline, teamInfos) && !witchPlayer.isSpectator()) { - playerOnline.sendTitle("§cWitch attaquée !", " "); - //WitchRush.get().getTeamManager().getTeamBoss(teamInfos).getWitch().setHealth( - // WitchRush.get().getTeamManager().getTeamBoss(teamInfos).getWitch().getHealth() - e.getDamage() - //); - } - }); - } - - } - } else if (e.getDamager() instanceof Player && e.getEntity() instanceof Villager){ - e.setCancelled(true); - } - } - } -} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DeathEvent.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DeathEvent.java deleted file mode 100644 index 714b581..0000000 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DeathEvent.java +++ /dev/null @@ -1,148 +0,0 @@ -package net.berrygames.witchrush.listeners.players; - -import net.berrygames.witchrush.WitchPlayer; -import net.berrygames.witchrush.WitchRush; -import net.berrygames.witchrush.game.GameState; -import net.berrygames.witchrush.game.task.HealthRunnable; -import net.berrygames.witchrush.listeners.custom.BossDeathEvent; -import net.berrygames.witchrush.team.TeamInfos; -import net.berrygames.witchrush.team.TeamManager; -import net.berrygames.witchrush.tools.DeadPlayer; -import net.berrygames.witchrush.tools.Locations; -import net.berrygames.witchrush.tools.TeamsTagsManager; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.entity.Witch; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.inventory.ItemStack; - -public class DeathEvent implements Listener { - - TeamManager teamManager = WitchRush.get().getTeamManager(); - - @EventHandler - public void death(PlayerDeathEvent e) { - - Player player = e.getEntity().getPlayer(); - Player killer = e.getEntity().getKiller(); - WitchPlayer witchPlayer = WitchPlayer.get(player); - WitchPlayer witchKiller = WitchPlayer.get(killer); - - TeamInfos teamvictim; - TeamInfos teamKiller; - - if(WitchRush.get().getState().equals(GameState.WAITING) || WitchRush.get().getState().equals(GameState.STARTING)){ - e.setDeathMessage(null); - player.kickPlayer("ENFAIT TOI T'ES FORT PCQ NORMALEMENT YA PAS CA"); - } else { - if(killer instanceof Player){ - switch (WitchRush.get().getState()){ - case PVP: - if(!teamManager.isInLife(teamManager.getPlayerTeam(player))){ - checkDrop(e); - TeamInfos team = WitchRush.get().getTeamManager().getPlayerTeam(player); - e.setDeathMessage(WitchRush.prefix()+team.getChatColor()+player.getName()+"§c est éliminé"); - witchPlayer.setDeath(witchPlayer.getDeath()+1); - witchPlayer.setSpectator(true); - player.teleport(Locations.SPAWN_SPECTATORS.getLocation()); - player.setGameMode(GameMode.SPECTATOR); - teamManager.removePlayerAllTeam(player); - - player.sendMessage(" "); - player.sendMessage("§8(Spectateur) §7Vous êtes éliminé."); - player.sendMessage("§7Seuls les autres spectateurs voient vos messages !"); - player.sendMessage(" "); - - TeamsTagsManager.setNameTag(player, player.getName(), "§8(Spec)§7 "); - } else { - teamvictim = WitchRush.get().getTeamManager().getPlayerTeam(player); - teamKiller = WitchRush.get().getTeamManager().getPlayerTeam(killer); - e.setDeathMessage(WitchRush.prefix()+teamvictim.getChatColor()+player.getName()+"§d a été tué par "+teamKiller.getChatColor()+ killer.getName()); - checkDrop(e); - new DeadPlayer(player); - witchKiller.setKills(witchKiller.getKills()+1); - witchPlayer.setDeath(witchPlayer.getDeath()+1); - } - break; - case NOWITCH: - teamvictim = WitchRush.get().getTeamManager().getPlayerTeam(player); - teamKiller = WitchRush.get().getTeamManager().getPlayerTeam(killer); - - e.setDeathMessage(WitchRush.prefix()+teamvictim.getChatColor()+player.getName()+"§d a été tué par "+teamKiller.getChatColor()+ killer.getName()); - new DeadPlayer(player); - witchKiller.setKills(witchKiller.getKills()+1); - witchPlayer.setDeath(witchPlayer.getDeath()+1); - break; - } - } else { - TeamInfos team = WitchRush.get().getTeamManager().getPlayerTeam(player); - e.setDeathMessage(WitchRush.prefix()+team.getChatColor()+player.getName()+"§d est mort"); - checkDrop(e); - new DeadPlayer(player); - player.setHealth(20); - witchPlayer.setDeath(witchPlayer.getDeath()+1); - } - } - } - - @EventHandler - public void onEntityDeath(final EntityDeathEvent e) { - if (e.getEntity() instanceof Witch) { - if(WitchRush.get().getState().equals(GameState.PVP)){ - final Witch witch = (Witch)e.getEntity(); - final TeamManager teamManager = WitchRush.get().getTeamManager(); - for (final ItemStack itemStack : e.getDrops()) { - itemStack.setType(Material.AIR); - } - TeamInfos teamInfos = null; - for (final TeamInfos teamInfosList : TeamInfos.values()) { - if (teamManager.getTeamBoss(teamInfosList).getWitch().equals(witch)) { - teamInfos = teamInfosList; - } - } - Bukkit.broadcastMessage(WitchRush.prefix()+"L'équipe "+teamInfos.getChatColor()+teamInfos.getTeamName()+" §dest morte !"); - if (e.getEntity().getKiller() instanceof Player) { - Bukkit.getPluginManager().callEvent(new BossDeathEvent(teamInfos, e.getEntity().getKiller())); - teamManager.getBossEntityMap().remove(teamInfos); - new HealthRunnable().arMap.remove(teamInfos); - } - for (final Player playerOnline : Bukkit.getOnlinePlayers()) { - playerOnline.playSound(playerOnline.getLocation(), Sound.ENTITY_WITHER_DEATH, 1.0f, 1.0f); - if (teamManager.isPlayerInTeam(playerOnline, teamInfos)) { - playerOnline.sendMessage(WitchRush.prefix()+"Votre Boss est mort! Ne mourrez pas !"); - playerOnline.sendTitle("§cAttention","Votre boss est mort !"); - } - } - } - } - } - - private void checkDrop(PlayerDeathEvent e){ - for(int i = 0; i= 4){ + if(WitchRush.get().getState().equals(GameState.WAITING) && WitchPlayer.getwitchMap().size() >= 4){ new StartTask().runTaskTimer(WitchRush.get(), 0, 20); WitchRush.get().setState(GameState.STARTING); } @@ -58,7 +57,6 @@ public class PlayerJoin implements Listener { player.setHealth(20); player.setFoodLevel(20); player.teleport(Locations.SPAWN_SPECTATORS.getLocation()); - witchPlayer.sendGameScoreboard(); } } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/team/TeamManager.java b/WitchRush/src/main/java/net/berrygames/witchrush/team/TeamManager.java index 0a47950..56e9db6 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/team/TeamManager.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/team/TeamManager.java @@ -1,5 +1,6 @@ package net.berrygames.witchrush.team; +import net.berrygames.witchrush.game.task.HealthRunnable; import net.berrygames.witchrush.tools.Locations; import net.berrygames.witchrush.tools.WitchBoss; import org.bukkit.Bukkit; @@ -49,7 +50,7 @@ public class TeamManager { if(!isPlayerInTeam(pls , infos)) teamMap.put(infos, getPlayerTeamList(infos)); } } - if(!playerHaveTeam(player)) addPlayerTeam(player, teamMap.lastKey()); + if(!playerHaveTeam(player)) addPlayerTeam(player, teamMap.firstKey()); } public void checkNoTeamPlayers() { @@ -128,6 +129,11 @@ public class TeamManager { return this.bossEntityMap.get(teamInfos); } + public void killTeamBoss(final TeamInfos infos){ + this.getBossEntityMap().remove(infos); + new HealthRunnable().arMap.remove(infos); + } + public Map> getPlayerTeamList() { return this.playerTeamList; } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/tools/ScoreboardSign.java b/WitchRush/src/main/java/net/berrygames/witchrush/tools/ScoreboardSign.java deleted file mode 100644 index 6b4dfcc..0000000 --- a/WitchRush/src/main/java/net/berrygames/witchrush/tools/ScoreboardSign.java +++ /dev/null @@ -1,371 +0,0 @@ -package net.berrygames.witchrush.tools; - -import net.minecraft.server.v1_12_R1.*; -import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - -public class ScoreboardSign { - - private boolean created = false; - private final VirtualTeam[] lines = new VirtualTeam[15]; - private final Player player; - private String objectiveName; - - /** - * Create a scoreboard sign for a given player and using a specifig objective name - * @param player the player viewing the scoreboard sign - * @param objectiveName the name of the scoreboard sign (displayed at the top of the scoreboard) - */ - public ScoreboardSign(Player player, String objectiveName) { - this.player = player; - this.objectiveName = objectiveName; - } - - /** - * Send the initial creation packets for this scoreboard sign. Must be called at least once. - */ - public void create() { - if (created) - return; - - PlayerConnection player = getPlayer(); - player.sendPacket(createObjectivePacket(0, objectiveName)); - player.sendPacket(setObjectiveSlot()); - int i = 0; - while (i < lines.length) - sendLine(i++); - - created = true; - } - - /** - * Send the packets to remove this scoreboard sign. A destroyed scoreboard sign must be recreated using {@link ScoreboardSign#create()} in order - * to be used again - */ - public void destroy() { - if (!created) - return; - - getPlayer().sendPacket(createObjectivePacket(1, null)); - for (VirtualTeam team : lines) - if (team != null) - getPlayer().sendPacket(team.removeTeam()); - - created = false; - } - - /** - * Change the name of the objective. The name is displayed at the top of the scoreboard. - * @param name the name of the objective, max 32 char - */ - public void setObjectiveName(String name) { - this.objectiveName = name; - if (created) - getPlayer().sendPacket(createObjectivePacket(2, name)); - } - - /** - * Change a scoreboard line and send the packets to the player. Can be called async. - * @param line the number of the line (0 <= line < 15) - * @param value the new value for the scoreboard line - */ - public void setLine(int line, String value) { - VirtualTeam team = getOrCreateTeam(line); - String old = team.getCurrentPlayer(); - - if (old != null && created) - getPlayer().sendPacket(removeLine(old)); - - team.setValue(value); - sendLine(line); - } - - /** - * Remove a given scoreboard line - * @param line the line to remove - */ - public void removeLine(int line) { - VirtualTeam team = getOrCreateTeam(line); - String old = team.getCurrentPlayer(); - - if (old != null && created) { - getPlayer().sendPacket(removeLine(old)); - getPlayer().sendPacket(team.removeTeam()); - } - - lines[line] = null; - } - - /** - * Get the current value for a line - * @param line the line - * @return the content of the line - */ - public String getLine(int line) { - if (line > 14) - return null; - if (line < 0) - return null; - return getOrCreateTeam(line).getValue(); - } - - /** - * Get the team assigned to a line - * @return the {@link VirtualTeam} used to display this line - */ - public VirtualTeam getTeam(int line) { - if (line > 14) - return null; - if (line < 0) - return null; - return getOrCreateTeam(line); - } - - private PlayerConnection getPlayer() { - return ((CraftPlayer) player).getHandle().playerConnection; - } - - @SuppressWarnings("rawtypes") - private void sendLine(int line) { - if (line > 14) - return; - if (line < 0) - return; - if (!created) - return; - - int score = (15 - line); - VirtualTeam val = getOrCreateTeam(line); - for (Packet packet : val.sendLine()) - getPlayer().sendPacket(packet); - getPlayer().sendPacket(sendScore(val.getCurrentPlayer(), score)); - val.reset(); - } - - private VirtualTeam getOrCreateTeam(int line) { - if (lines[line] == null) - lines[line] = new VirtualTeam("__fakeScore" + line); - - return lines[line]; - } - - /* - Factories - */ - private PacketPlayOutScoreboardObjective createObjectivePacket(int mode, String displayName) { - PacketPlayOutScoreboardObjective packet = new PacketPlayOutScoreboardObjective(); - // Nom de l'objectif - setField(packet, "a", player.getName()); - - // Mode - // 0 : créer - // 1 : Supprimer - // 2 : Mettre à jour - setField(packet, "d", mode); - - if (mode == 0 || mode == 2) { - setField(packet, "b", displayName); - setField(packet, "c", IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER); - } - - return packet; - } - - private PacketPlayOutScoreboardDisplayObjective setObjectiveSlot() { - PacketPlayOutScoreboardDisplayObjective packet = new PacketPlayOutScoreboardDisplayObjective(); - // Slot - setField(packet, "a", 1); - setField(packet, "b", player.getName()); - - return packet; - } - - private PacketPlayOutScoreboardScore sendScore(String line, int score) { - PacketPlayOutScoreboardScore packet = new PacketPlayOutScoreboardScore(line); - setField(packet, "b", player.getName()); - setField(packet, "c", score); - setField(packet, "d", PacketPlayOutScoreboardScore.EnumScoreboardAction.CHANGE); - - return packet; - } - - private PacketPlayOutScoreboardScore removeLine(String line) { - return new PacketPlayOutScoreboardScore(line); - } - - /** - * This class is used to manage the content of a line. Advanced users can use it as they want, but they are encouraged to read and understand the - * code before doing so. Use these methods at your own risk. - */ - public class VirtualTeam { - private final String name; - private String prefix; - private String suffix; - private String currentPlayer; - private String oldPlayer; - - private boolean prefixChanged, suffixChanged, playerChanged = false; - private boolean first = true; - - private VirtualTeam(String name, String prefix, String suffix) { - this.name = name; - this.prefix = prefix; - this.suffix = suffix; - } - - private VirtualTeam(String name) { - this(name, "", ""); - } - - public String getName() { - return name; - } - - public String getPrefix() { - return prefix; - } - - public void setPrefix(String prefix) { - if (this.prefix == null || !this.prefix.equals(prefix)) - this.prefixChanged = true; - this.prefix = prefix; - } - - public String getSuffix() { - return suffix; - } - - public void setSuffix(String suffix) { - if (this.suffix == null || !this.suffix.equals(prefix)) - this.suffixChanged = true; - this.suffix = suffix; - } - - private PacketPlayOutScoreboardTeam createPacket(int mode) { - PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam(); - setField(packet, "a", name); - setField(packet, "b", ""); - setField(packet, "c", prefix); - setField(packet, "d", suffix); - setField(packet, "i", 0); - setField(packet, "e", "always"); - setField(packet, "g", 0); - setField(packet, "i", mode); - - return packet; - } - - public PacketPlayOutScoreboardTeam createTeam() { - return createPacket(0); - } - - public PacketPlayOutScoreboardTeam updateTeam() { - return createPacket(2); - } - - public PacketPlayOutScoreboardTeam removeTeam() { - PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam(); - setField(packet, "a", name); - setField(packet, "i", 1); - first = true; - return packet; - } - - public void setPlayer(String name) { - if (this.currentPlayer == null || !this.currentPlayer.equals(name)) - this.playerChanged = true; - this.oldPlayer = this.currentPlayer; - this.currentPlayer = name; - } - - public Iterable sendLine() { - List packets = new ArrayList<>(); - - if (first) { - packets.add(createTeam()); - } else if (prefixChanged || suffixChanged) { - packets.add(updateTeam()); - } - - if (first || playerChanged) { - if (oldPlayer != null) // remove these two lines ? - packets.add(addOrRemovePlayer(4, oldPlayer)); // - packets.add(changePlayer()); - } - - if (first) - first = false; - - return packets; - } - - public void reset() { - prefixChanged = false; - suffixChanged = false; - playerChanged = false; - oldPlayer = null; - } - - public PacketPlayOutScoreboardTeam changePlayer() { - return addOrRemovePlayer(3, currentPlayer); - } - - @SuppressWarnings("unchecked") - public PacketPlayOutScoreboardTeam addOrRemovePlayer(int mode, String playerName) { - PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam(); - setField(packet, "a", name); - setField(packet, "i", mode); - - try { - Field f = packet.getClass().getDeclaredField("h"); - f.setAccessible(true); - ((List) f.get(packet)).add(playerName); - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - } - - return packet; - } - - public String getCurrentPlayer() { - return currentPlayer; - } - - public String getValue() { - return getPrefix() + getCurrentPlayer() + getSuffix(); - } - - public void setValue(String value) { - if (value.length() <= 16) { - setPrefix(""); - setSuffix(""); - setPlayer(value); - } else if (value.length() <= 32) { - setPrefix(value.substring(0, 16)); - setPlayer(value.substring(16)); - setSuffix(""); - } else if (value.length() <= 48) { - setPrefix(value.substring(0, 16)); - setPlayer(value.substring(16, 32)); - setSuffix(value.substring(32)); - } else { - throw new IllegalArgumentException("Too long value ! Max 48 characters, value was " + value.length() + " !"); - } - } - } - - private static void setField(Object edit, String fieldName, Object value) { - try { - Field field = edit.getClass().getDeclaredField(fieldName); - field.setAccessible(true); - field.set(edit, value); - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - } - } - -}