From b6599c62a42a40410e8f9bee12ef7d01ae41db02 Mon Sep 17 00:00:00 2001 From: BunSLaPatate Date: Sun, 16 Sep 2018 18:27:54 +0200 Subject: [PATCH] Added Team system & Guis --- .../net/berrygames/witchrush/WitchPlayer.java | 21 ++-- .../witchrush/commands/admins/GameCMD.java | 2 +- .../game/{StartTask.java => GameManager.java} | 69 +++++----- .../berrygames/witchrush/game/PVPTask.java | 19 --- .../berrygames/witchrush/game/WinManager.java | 43 +++++++ .../witchrush/game/task/HealthRunnable.java | 40 ++++++ .../witchrush/game/{ => task}/NoPVPTask.java | 4 +- .../witchrush/game/task/PVPTask.java | 24 ++++ .../witchrush/game/task/StartTask.java | 42 +++++++ .../witchrush/listeners/ListenersManager.java | 2 + .../listeners/custom/GAGameStartEvent.java | 26 ++++ .../listeners/players/ChatEvent.java | 2 +- .../listeners/players/DeathEvent.java | 44 ++++++- .../listeners/players/FoodLevel.java | 14 +++ .../listeners/players/InteractEvent.java | 67 +--------- .../listeners/players/InventoryClick.java | 73 +++++++++++ .../listeners/players/PlayerJoin.java | 9 +- .../listeners/players/PlayerQuit.java | 2 +- .../listeners/players/WitchEvent.java | 45 +++++++ .../witchrush/team/TeamManager.java | 17 ++- .../witchrush/tools/PNJSpawner.java | 2 +- .../witchrush/tools/TeamsTagsManager.java | 118 ++++++++++++++++++ .../berrygames/witchrush/tools/WitchBoss.java | 4 +- 23 files changed, 559 insertions(+), 130 deletions(-) rename WitchRush/src/main/java/net/berrygames/witchrush/game/{StartTask.java => GameManager.java} (50%) delete mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/game/PVPTask.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/game/task/HealthRunnable.java rename WitchRush/src/main/java/net/berrygames/witchrush/game/{ => task}/NoPVPTask.java (86%) create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/game/task/PVPTask.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/game/task/StartTask.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/listeners/custom/GAGameStartEvent.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/FoodLevel.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InventoryClick.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/WitchEvent.java create mode 100644 WitchRush/src/main/java/net/berrygames/witchrush/tools/TeamsTagsManager.java diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java b/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java index 72fca7a..474f906 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/WitchPlayer.java @@ -2,6 +2,7 @@ package net.berrygames.witchrush; import net.berrygames.witchrush.game.GameState; 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 org.bukkit.Color; @@ -40,20 +41,24 @@ public class WitchPlayer { } } - public Locations teleportToBase(){ + public void teleportToBase(){ + TeamManager teamManager = WitchRush.get().getTeamManager(); for(TeamInfos teamInfos : TeamInfos.values()){ - switch (teamInfos){ + switch (teamManager.getPlayerTeam(player)){ case ROUGE: - return Locations.PLAYER_SPAWN_ROUGE; - case BLEU: - return Locations.PLAYER_SPAWN_BLEU; + player.teleport(Locations.PLAYER_SPAWN_ROUGE.getLocation()); + break; case VERT: - return Locations.PLAYER_SPAWN_VERT; + player.teleport(Locations.PLAYER_SPAWN_VERT.getLocation()); + break; case JAUNE: - return Locations.PLAYER_SPAWN_JAUNE; + player.teleport(Locations.PLAYER_SPAWN_JAUNE.getLocation()); + break; + case BLEU: + player.teleport(Locations.PLAYER_SPAWN_BLEU.getLocation()); + break; } } - return null; } public void giveStuff(){ 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 986c914..646f729 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 @@ -3,7 +3,7 @@ package net.berrygames.witchrush.commands.admins; import net.berrygames.witchrush.WitchPlayer; import net.berrygames.witchrush.WitchRush; import net.berrygames.witchrush.game.GameState; -import net.berrygames.witchrush.game.StartTask; +import net.berrygames.witchrush.game.task.StartTask; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/StartTask.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/GameManager.java similarity index 50% rename from WitchRush/src/main/java/net/berrygames/witchrush/game/StartTask.java rename to WitchRush/src/main/java/net/berrygames/witchrush/game/GameManager.java index 9fa0159..5834169 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/StartTask.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/GameManager.java @@ -2,29 +2,34 @@ package net.berrygames.witchrush.game; import net.berrygames.witchrush.WitchPlayer; import net.berrygames.witchrush.WitchRush; +import net.berrygames.witchrush.game.task.HealthRunnable; +import net.berrygames.witchrush.game.task.NoPVPTask; +import net.berrygames.witchrush.listeners.custom.GAGameStartEvent; import net.berrygames.witchrush.team.TeamInfos; import net.berrygames.witchrush.team.TeamManager; import net.berrygames.witchrush.tools.Locations; import net.berrygames.witchrush.tools.PNJSpawner; +import net.berrygames.witchrush.tools.TeamsTagsManager; import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.Sound; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -public class StartTask extends BukkitRunnable { +public class GameManager { - private int timer = 30; + public TeamManager teamManager; + public boolean isStart; - @Override - public void run() { - - if(timer == 0){ - new NoPVPTask().runTaskTimer(WitchRush.get(), 0, 20); + public GameManager() { + this.teamManager = WitchRush.get().getTeamManager(); + if (!(this.isStart = false)) { + this.isStart = true; WitchRush.get().setState(GameState.NOWITCH); - + String startMessage = WitchRush.prefix()+"§dVous avez §63minutes §dpour vous préparez."; Bukkit.broadcastMessage(WitchRush.prefix()+"§dLa partie commence !"); - Bukkit.broadcastMessage(WitchRush.prefix()+"§dVous avez §63minutes §dpour vous préparez."); - cancel(); + Bukkit.broadcastMessage(startMessage); + Bukkit.getServer().getPluginManager().callEvent(new GAGameStartEvent(startMessage)); + this.loadPlayer(); for(WitchPlayer witchPlayer : WitchPlayer.getwitchMap().values()){ witchPlayer.giveStuff(); @@ -32,14 +37,12 @@ public class StartTask extends BukkitRunnable { for(Player pls: Bukkit.getOnlinePlayers()){ pls.setGameMode(GameMode.SURVIVAL); + pls.playSound(pls.getLocation(), Sound.ENTITY_WITHER_SPAWN, 1, 1); + //Join si il a pas de team if(WitchRush.get().getTeamManager().getPlayerTeam(pls) == null){ WitchRush.get().getTeamManager().addPlayerInRandomTeam(pls); } - - //Tp aux bases - TeamInfos teamInfos = WitchRush.get().getTeamManager().getPlayerTeam(pls); - WitchPlayer.get(pls).teleportToBase(); } //Spawn SHOP @@ -55,19 +58,27 @@ public class StartTask extends BukkitRunnable { new PNJSpawner("§b§LUPGRADE", TeamInfos.JAUNE, Locations.UPGRADE_JAUNE.getLocation()); } - - if(timer == 120 || timer == 60 || timer == 30 || timer == 15 - || timer == 10 || timer == 5 || timer == 4 || timer == 3 || timer == 2){ - Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+timer+" §dsecondes"); - } - if(timer == 1){ - Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+timer+" §dseconde"); - } - - for(Player pls : Bukkit.getOnlinePlayers()){ - pls.setLevel(timer); - } - - timer--; + new NoPVPTask().runTaskTimer(WitchRush.get(), 0, 20); } + + private void loadPlayer() { + Bukkit.getOnlinePlayers().forEach(playerOnline -> { + WitchPlayer witchPlayer = WitchPlayer.get(playerOnline); + this.teamManager.addPlayerInRandomTeam(playerOnline); + TeamInfos teamInfos = this.teamManager.getPlayerTeam(playerOnline); + witchPlayer.teleportToBase(); + playerOnline.getInventory().clear(); + playerOnline.setMaxHealth(20.0); + playerOnline.setHealth(20.0); + playerOnline.setFoodLevel(20); + playerOnline.setFlying(false); + playerOnline.setAllowFlight(false); + playerOnline.setLevel(0); + 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/PVPTask.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/PVPTask.java deleted file mode 100644 index 822627c..0000000 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/PVPTask.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.berrygames.witchrush.game; - -import org.bukkit.scheduler.BukkitRunnable; - -public class PVPTask extends BukkitRunnable { - - int timer = 20 * 60; - - @Override - public void run() { - - if(timer == 0){ - new DeathMatchTask(); - cancel(); - } - - timer--; - } -} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java new file mode 100644 index 0000000..2afa4ae --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/WinManager.java @@ -0,0 +1,43 @@ +package net.berrygames.witchrush.game; + +import net.berrygames.witchrush.WitchPlayer; +import net.berrygames.witchrush.WitchRush; +import net.berrygames.witchrush.team.TeamInfos; +import net.berrygames.witchrush.team.TeamManager; +import org.bukkit.Bukkit; +import org.bukkit.event.Event; + +public class WinManager { + + public WinManager() { + final TeamManager teamManager = WitchRush.get().getTeamManager(); + if (WitchRush.get().getState().equals(GameState.NOWITCH) + || WitchRush.get().getState().equals(GameState.PVP) + || WitchRush.get().getState().equals(GameState.DEATH_MATCH)) { + int teamLeft = 0; + for (final TeamInfos teamInfos : TeamInfos.values()) { + if (teamManager.getTeamPlayerCount(teamInfos) >= 1) { + ++teamLeft; + } + } + if (teamLeft == 1) { + for (final TeamInfos teamInfos : TeamInfos.values()) { + if (!teamManager.getPlayerTeamList(teamInfos).isEmpty()) { + WitchRush.get().setState(GameState.FINISHING); + Bukkit.broadcastMessage(WitchRush.prefix()+"Victoire de l'équipe "+teamInfos.getChatColor()+teamInfos.getTeamName()); + final TeamInfos teamInfos2; + final Event event; + final TeamManager teamManager2; + final Object o; + Bukkit.getOnlinePlayers().forEach(playerOnline -> { + final WitchPlayer witchPlayer = WitchPlayer.get(playerOnline); + Bukkit.getServer().getPluginManager(); + return; + }); + } + } + } + } + } + +} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/task/HealthRunnable.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/HealthRunnable.java new file mode 100644 index 0000000..dc4c48d --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/HealthRunnable.java @@ -0,0 +1,40 @@ +package net.berrygames.witchrush.game.task; + +import net.berrygames.witchrush.WitchRush; +import net.berrygames.witchrush.team.TeamInfos; +import net.berrygames.witchrush.team.TeamManager; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.HashMap; +import java.util.Map; + +public class HealthRunnable extends BukkitRunnable { + + public Map arMap; + + public HealthRunnable() { + this.arMap = new HashMap<>(); + } + + public void run() { + final TeamManager teamManager = WitchRush.get().getTeamManager(); + for (final TeamInfos teamInfos : TeamInfos.values()) { + if (this.arMap.get(teamInfos) == null) { + final Location bossLocation = teamManager.getBossLocation(teamInfos).getLocation(); + final ArmorStand armorStand = (ArmorStand) Bukkit.getWorld("world").spawnEntity(bossLocation, EntityType.ARMOR_STAND); + armorStand.setAI(false); + armorStand.setCustomNameVisible(true); + armorStand.setGravity(false); + armorStand.setVisible(false); + armorStand.setCustomName("Loading.."); + this.arMap.put(teamInfos, armorStand); + return; + } + this.arMap.get(teamInfos).setCustomName("§5§lVie: §c"+teamManager.getTeamBoss(teamInfos).getLife()); + } + } +} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/game/NoPVPTask.java b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/NoPVPTask.java similarity index 86% rename from WitchRush/src/main/java/net/berrygames/witchrush/game/NoPVPTask.java rename to WitchRush/src/main/java/net/berrygames/witchrush/game/task/NoPVPTask.java index 6282308..5cc8d59 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/game/NoPVPTask.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/NoPVPTask.java @@ -1,6 +1,7 @@ -package net.berrygames.witchrush.game; +package net.berrygames.witchrush.game.task; import net.berrygames.witchrush.WitchRush; +import net.berrygames.witchrush.game.GameState; import net.berrygames.witchrush.team.TeamInfos; import net.berrygames.witchrush.tools.Locations; import net.berrygames.witchrush.tools.WitchBoss; @@ -23,6 +24,7 @@ public class NoPVPTask extends BukkitRunnable { new WitchBoss(TeamInfos.BLEU, Locations.WITCH_BLEU.getLocation()); new WitchBoss(TeamInfos.VERT, Locations.WITCH_VERT.getLocation()); new WitchBoss(TeamInfos.JAUNE, Locations.WITCH_JAUNE.getLocation()); + new HealthRunnable().runTaskTimer(WitchRush.get(), 0L, 20L); cancel(); } 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 new file mode 100644 index 0000000..476d0d4 --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/PVPTask.java @@ -0,0 +1,24 @@ +package net.berrygames.witchrush.game.task; + +import net.berrygames.witchrush.WitchRush; +import net.berrygames.witchrush.game.DeathMatchTask; +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitRunnable; + +public class PVPTask extends BukkitRunnable { + + int timer = 20 * 60; + + @Override + public void run() { + + if(timer == 0){ + new DeathMatchTask(); + Bukkit.broadcastMessage(WitchRush.prefix()+"Le DeathMatch commence."); + Bukkit.broadcastMessage(WitchRush.prefix()+"Les §5§lWitchs §dcommencent à perdre de la vie !"); + cancel(); + } + + timer--; + } +} 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 new file mode 100644 index 0000000..65171eb --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/game/task/StartTask.java @@ -0,0 +1,42 @@ +package net.berrygames.witchrush.game.task; + +import net.berrygames.witchrush.WitchRush; +import net.berrygames.witchrush.game.GameManager; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class StartTask extends BukkitRunnable { + + private int timer = 30; + + @Override + public void run() { + + if(timer == 0){ + new GameManager(); + cancel(); + } + + if(timer == 120 || timer == 60 || timer == 30 || timer == 15 + || timer == 10 || timer == 5 || timer == 4 || timer == 3 || timer == 2){ + Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+timer+" §dsecondes"); + for(Player pls : Bukkit.getOnlinePlayers()){ + pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + } + } + if(timer == 1){ + Bukkit.broadcastMessage(WitchRush.prefix()+"Lancement de la partie dans §5"+timer+" §dseconde"); + for(Player pls : Bukkit.getOnlinePlayers()){ + pls.playSound(pls.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + } + } + + for(Player pls : Bukkit.getOnlinePlayers()){ + pls.setLevel(timer); + } + + timer--; + } +} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/ListenersManager.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/ListenersManager.java index 24dbaf5..98143b6 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/ListenersManager.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/ListenersManager.java @@ -18,6 +18,8 @@ public class ListenersManager { pm.registerEvents(new ChatEvent(), main); pm.registerEvents(new DeathEvent(), main); pm.registerEvents(new FoodLevel(), main); + pm.registerEvents(new InventoryClick(), main); + pm.registerEvents(new WitchEvent(), main); // --- WORLD ---// pm.registerEvents(new WorldEvents(), main); diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/custom/GAGameStartEvent.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/custom/GAGameStartEvent.java new file mode 100644 index 0000000..98c28e7 --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/custom/GAGameStartEvent.java @@ -0,0 +1,26 @@ +package net.berrygames.witchrush.listeners.custom; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class GAGameStartEvent extends Event { + + public static final HandlerList handlers; + private String message; + + public GAGameStartEvent(final String message) { + this.message = message; + } + + public HandlerList getHandlers() { + return GAGameStartEvent.handlers; + } + + public String getStartMessage() { + return this.message; + } + + static { + handlers = new HandlerList(); + } +} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/ChatEvent.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/ChatEvent.java index a013d51..8d98160 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/ChatEvent.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/ChatEvent.java @@ -37,7 +37,7 @@ public class ChatEvent implements Listener { final TeamInfos teamInfos = WitchRush.get().getTeamManager().getPlayerTeam(player); if(WitchRush.get().getTeamManager().getPlayerTeam(playerOnline).equals(teamInfos)){ playerOnline.sendMessage("§7["+teamInfos.getChatColor()+teamInfos.getTeamName()+"§7] §e" - +player.getDisplayName()+"§7» §f"+message.replace("!","")); + +player.getDisplayName()+" §7» §f"+message.replace("!"," ")); } }); } 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 index ff8050d..f084446 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DeathEvent.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/DeathEvent.java @@ -3,13 +3,22 @@ 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.listeners.custom.BossDeathEvent; import net.berrygames.witchrush.team.TeamInfos; +import net.berrygames.witchrush.team.TeamManager; import net.berrygames.witchrush.tools.DeadPlayer; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.Witch; +import org.bukkit.event.Event; 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 { @@ -24,9 +33,12 @@ public class DeathEvent implements Listener { e.setDeathMessage(null); player.kickPlayer("ENFAIT TOI T'ES FORT PCQ NORMALEMENT YA PAS CA"); } else { + if(!killer.getType().equals(EntityType.PLAYER))return; if(killer.getType().equals(EntityType.PLAYER)){ - TeamInfos team = WitchRush.get().getTeamManager().getPlayerTeam(player); - e.setDeathMessage(WitchRush.prefix()+team.getChatColor()+player.getName()+"§d a été tué par "+team.getChatColor()+ killer.getName()); + TeamInfos teamvictim = WitchRush.get().getTeamManager().getPlayerTeam(player); + TeamInfos 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); player.setHealth(20); @@ -46,4 +58,32 @@ public class DeathEvent implements Listener { } } + @EventHandler + public void onEntityDeath(final EntityDeathEvent e) { + if (e.getEntity() instanceof Witch) { + 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((Event)new BossDeathEvent(teamInfos, e.getEntity().getKiller())); + } + 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 !"); + } + } + } + } + } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/FoodLevel.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/FoodLevel.java new file mode 100644 index 0000000..5632a1e --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/FoodLevel.java @@ -0,0 +1,14 @@ +package net.berrygames.witchrush.listeners.players; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.FoodLevelChangeEvent; + +public class FoodLevel implements Listener { + + @EventHandler + public void onFoodLevelChange(final FoodLevelChangeEvent e) { + e.setFoodLevel(20); + } + +} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InteractEvent.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InteractEvent.java index 5bcc3a7..fe1e6b8 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InteractEvent.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InteractEvent.java @@ -3,11 +3,8 @@ 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.team.TeamsMenu; -import org.bukkit.Sound; -import org.bukkit.entity.EntityType; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,11 +12,9 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; public class InteractEvent implements Listener { @@ -60,17 +55,15 @@ public class InteractEvent implements Listener { } if(e.getRightClicked().getName().equals("S")){ e.setCancelled(true); + player.closeInventory(); player.sendMessage("s"); } if(e.getRightClicked().getName().equals("U")){ e.setCancelled(true); + player.closeInventory(); player.sendMessage("u"); } - if(e.getRightClicked().getType().equals(EntityType.WITCH)){ - //detect player's witch - //damage other witch - } } @EventHandler @@ -81,6 +74,8 @@ public class InteractEvent implements Listener { ItemStack item = e.getItem(); e.setCancelled(true); + if(item == null || item.getType() == Material.AIR) return; + if(action.equals(Action.RIGHT_CLICK_AIR) || action.equals(Action.RIGHT_CLICK_BLOCK)){ switch (item.getType()){ case ARMOR_STAND: @@ -90,59 +85,7 @@ public class InteractEvent implements Listener { player.sendMessage("retour au hub soon"); break; default:break; - } } } - - @EventHandler - public void inventoryClick(InventoryClickEvent e){ - Player player = (Player) e.getWhoClicked(); - WitchPlayer witchPlayer = WitchPlayer.get(player); - ItemStack item = e.getCurrentItem(); - Inventory inv = e.getClickedInventory(); - TeamManager teamManager = WitchRush.get().getTeamManager(); - if(!inv.getTitle().equals(WitchRush.prefix()+" Teams")) return; - e.setCancelled(true); - switch (item.getType()){ - case WOOL: - final TeamInfos teamInfos = TeamInfos.getTeamInfosByShortData(e.getCurrentItem().getDurability()); - if (teamManager.isPlayerInTeam(player, teamInfos)) { - player.sendMessage(WitchRush.prefix()+"Vous êtes déjà dans cette team !"); - player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1.0f, 1.0f); - player.closeInventory(); - return; - } - if (teamManager.teamIsFull(teamInfos)) { - player.sendMessage(WitchRush.prefix()+"L'équipe est pleine !"); - player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1.0f, 1.0f); - player.closeInventory(); - return; - } - teamManager.removePlayerAllTeam(player); - player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_YES, 1.0f, 1.0f); - teamManager.addPlayerTeam(player, teamInfos); - TeamInfos infos1 = teamManager.getPlayerTeam(player); - player.sendMessage(WitchRush.prefix()+"Vous avez rejoint la team "+infos1.getChatColor()+infos1.getTeamName()); - player.closeInventory(); - break; - case BARRIER: - player.closeInventory(); - break; - case DOUBLE_PLANT: - if (teamManager.playerHaveTeam(player)) { - player.sendMessage(WitchRush.prefix()+"Vous êtes déjà dans une équipe !"); - player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1.0f, 1.0f); - player.closeInventory(); - return; - } - player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_YES, 1.0f, 1.0f); - teamManager.addPlayerInRandomTeam(player); - TeamInfos infos2 = teamManager.getPlayerTeam(player); - player.sendMessage(WitchRush.prefix()+"Vous avez rejoint la team "+infos2.getChatColor()+infos2.getTeamName()); - player.closeInventory(); - break; - } - } - } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InventoryClick.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InventoryClick.java new file mode 100644 index 0000000..b623f56 --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/InventoryClick.java @@ -0,0 +1,73 @@ +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.TeamsTagsManager; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class InventoryClick implements Listener { + + @EventHandler + public void inventoryClick(InventoryClickEvent e){ + Player player = (Player) e.getWhoClicked(); + WitchPlayer witchPlayer = WitchPlayer.get(player); + ItemStack item = e.getCurrentItem(); + Inventory inv = e.getClickedInventory(); + TeamManager teamManager = WitchRush.get().getTeamManager(); + if(!inv.getTitle().equals(WitchRush.prefix()+" Teams")) return; + e.setCancelled(true); + switch (item.getType()){ + case WOOL: + final TeamInfos teamInfos = TeamInfos.getTeamInfosByShortData(e.getCurrentItem().getDurability()); + if (teamManager.isPlayerInTeam(player, teamInfos)) { + player.sendMessage(WitchRush.prefix()+"Vous êtes déjà dans cette team !"); + player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1.0f, 1.0f); + player.closeInventory(); + return; + } + if (teamManager.teamIsFull(teamInfos)) { + player.sendMessage(WitchRush.prefix()+"L'équipe est pleine !"); + player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1.0f, 1.0f); + player.closeInventory(); + return; + } + teamManager.removePlayerAllTeam(player); + player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_YES, 1.0f, 1.0f); + teamManager.addPlayerTeam(player, teamInfos); + TeamInfos infos1 = teamManager.getPlayerTeam(player); + player.sendMessage(WitchRush.prefix()+"Vous avez rejoint la team "+infos1.getChatColor()+infos1.getTeamName()); + TeamsTagsManager.setNameTag(player, player.getName(), infos1.getChatColor()+infos1.getTeamName()+" "); + player.closeInventory(); + break; + case BARRIER: + player.closeInventory(); + break; + case DOUBLE_PLANT: + player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_YES, 1.0f, 1.0f); + teamManager.removePlayerAllTeam(player); + teamManager.addPlayerInRandomTeam(player); + TeamInfos infos2 = teamManager.getPlayerTeam(player); + player.sendMessage(WitchRush.prefix()+"Vous avez rejoint la team "+infos2.getChatColor()+infos2.getTeamName()+" "); + TeamsTagsManager.setNameTag(player, player.getName(), infos2.getChatColor()); + player.closeInventory(); + break; + } + } + + @EventHandler + public void onInventoryClick(final InventoryClickEvent e) { + if(WitchRush.get().getState().equals(GameState.WAITING) || WitchRush.get().getState().equals(GameState.STARTING)){ + e.setCancelled(true); + } + } + +} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerJoin.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerJoin.java index 402305d..51a6bc4 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerJoin.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerJoin.java @@ -3,8 +3,8 @@ 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.StartTask; -import org.bukkit.ChatColor; +import net.berrygames.witchrush.game.task.StartTask; +import net.berrygames.witchrush.tools.TeamsTagsManager; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -29,12 +29,15 @@ public class PlayerJoin implements Listener { player.getInventory().clear(); player.setGameMode(GameMode.ADVENTURE); player.setLevel(0); + player.setExp(0f); player.setHealth(20); player.setFoodLevel(20); witchPlayer.sendWaitingStuff(); witchPlayer.teleportPlayer(); witchPlayer.sendGameScoreboard(); + TeamsTagsManager.setNameTag(player, player.getName(), "§7"); + if(WitchPlayer.getwitchMap().size() >= 4){ new StartTask().runTaskTimer(WitchRush.get(), 0, 20); WitchRush.get().setState(GameState.STARTING); @@ -46,6 +49,8 @@ public class PlayerJoin implements Listener { player.sendMessage("§7Seul les autres spectateurs voient vos messages !"); player.sendMessage(" "); + TeamsTagsManager.setNameTag(player, player.getName(), "§8(Spec)§7 "); + e.setJoinMessage(null); player.setGameMode(GameMode.SPECTATOR); player.setLevel(0); diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerQuit.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerQuit.java index d920139..fbecf15 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerQuit.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/PlayerQuit.java @@ -3,7 +3,7 @@ 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.StartTask; +import net.berrygames.witchrush.game.task.StartTask; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/WitchEvent.java b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/WitchEvent.java new file mode 100644 index 0000000..146b181 --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/listeners/players/WitchEvent.java @@ -0,0 +1,45 @@ +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 org.bukkit.Bukkit; +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.EntityDamageByEntityEvent; + +public class WitchEvent 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))return; + 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).getLocation()); + Bukkit.getOnlinePlayers().forEach(playerOnline -> { + WitchPlayer witchPlayer = WitchPlayer.get(playerOnline); + if (teamManager.isPlayerInTeam(playerOnline, teamInfos) && !witchPlayer.isSpectator()) { + playerOnline.sendTitle("§cWitch attaquée", null); + } + return; + }); + } + } + } + } + +} 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 b8dd102..a96c065 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/team/TeamManager.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/team/TeamManager.java @@ -1,7 +1,7 @@ package net.berrygames.witchrush.team; +import net.berrygames.witchrush.tools.Locations; import net.berrygames.witchrush.tools.WitchBoss; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -47,6 +47,21 @@ public class TeamManager { } + public Locations getBossLocation(final TeamInfos teamInfos) { + switch (teamInfos){ + case ROUGE: + return Locations.WITCH_ROUGE; + case BLEU: + return Locations.WITCH_BLEU; + case VERT: + return Locations.WITCH_VERT; + case JAUNE: + return Locations.WITCH_JAUNE; + } + + return null; + } + public boolean isPlayerInTeam(final Player player, final TeamInfos teamInfos) { return this.playerTeamList.get(teamInfos) != null && this.playerTeamList.get(teamInfos).contains(player); } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/tools/PNJSpawner.java b/WitchRush/src/main/java/net/berrygames/witchrush/tools/PNJSpawner.java index 3a3fa6b..ff441b2 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/tools/PNJSpawner.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/tools/PNJSpawner.java @@ -25,7 +25,7 @@ public class PNJSpawner { this.villager.setCustomName(this.name); this.villager.setCustomNameVisible(true); this.villager.setAI(false); - this.villager.setSilent(false); + this.villager.setSilent(true); this.villager.setCanPickupItems(false); this.villager.setCollidable(false); } diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/tools/TeamsTagsManager.java b/WitchRush/src/main/java/net/berrygames/witchrush/tools/TeamsTagsManager.java new file mode 100644 index 0000000..271a7ce --- /dev/null +++ b/WitchRush/src/main/java/net/berrygames/witchrush/tools/TeamsTagsManager.java @@ -0,0 +1,118 @@ +package net.berrygames.witchrush.tools; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import java.util.Collection; +import java.util.UUID; + +public class TeamsTagsManager { + + + private String prefix; + private String suffix; + private Team team; + public static Scoreboard scoreboard; + + public TeamsTagsManager(final String name, final String prefix, final String suffix, final Scoreboard current) throws Exception { + this.prefix = prefix; + this.suffix = suffix; + this.team = current.getTeam(name); + if (this.team == null) { + this.team = current.registerNewTeam(name); + } + TeamsTagsManager.scoreboard = current; + this.team.setCanSeeFriendlyInvisibles(false); + this.team.setAllowFriendlyFire(false); + int prefixLength = 0; + int suffixLength = 0; + if (prefix != null) { + prefixLength = prefix.length(); + } + if (suffix != null) { + suffixLength = suffix.length(); + } + if (prefixLength + suffixLength >= 32) { + throw new Exception("prefix and suffix lenghts are greater than 16"); + } + if (suffix != null) { + this.team.setSuffix(ChatColor.translateAlternateColorCodes('&', suffix)); + } + if (prefix != null) { + this.team.setPrefix(ChatColor.translateAlternateColorCodes('&', prefix)); + } + } + + public TeamsTagsManager(final String name, final String prefix, final String suffix) throws Exception { + this(name, prefix, suffix, Bukkit.getScoreboardManager().getMainScoreboard()); + } + + public void set(final Player player) { + this.team.addPlayer((OfflinePlayer)player); + player.setScoreboard(TeamsTagsManager.scoreboard); + } + + public void remove(final Player player) { + this.team.removePlayer((OfflinePlayer)player); + } + + public void resetTagUtils(final UUID uuid) { + this.remove(Bukkit.getPlayer(uuid)); + } + + public void setAll(final Collection players) { + for (final Player player : players) { + this.set(player); + } + } + + public void setAll(final Player[] players) { + for (final Player player : players) { + this.set(player); + } + } + + public void setPrefix(final String prefix) { + this.prefix = ChatColor.translateAlternateColorCodes('&', prefix); + this.team.setPrefix(this.prefix); + } + + public void setSuffix(final String suffix) { + this.suffix = ChatColor.translateAlternateColorCodes('&', suffix); + this.team.setSuffix(this.suffix); + } + + public String getPrefix() { + return this.prefix; + } + + public String getSuffix() { + return this.suffix; + } + + public Team getTeam() { + return this.team; + } + + public void removeTeam() { + this.team.unregister(); + } + + public Scoreboard getScoreboard() { + return TeamsTagsManager.scoreboard; + } + + public static void setNameTag(final Player player, final String name, final String prefix) { + try { + final TeamsTagsManager golemaplayer = new TeamsTagsManager(name, prefix, null); + golemaplayer.set(player); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/WitchRush/src/main/java/net/berrygames/witchrush/tools/WitchBoss.java b/WitchRush/src/main/java/net/berrygames/witchrush/tools/WitchBoss.java index fa99667..e008ef3 100644 --- a/WitchRush/src/main/java/net/berrygames/witchrush/tools/WitchBoss.java +++ b/WitchRush/src/main/java/net/berrygames/witchrush/tools/WitchBoss.java @@ -17,12 +17,12 @@ public class WitchBoss { this.teamInfos = teamInfos; this.location = location; this.witch = (Witch) Bukkit.getWorld("world").spawnEntity(location, EntityType.WITCH); - this.life = 100; + this.life = 500; this.witch.setMaxHealth(this.life); this.witch.setHealth(this.life); this.witch.setCustomNameVisible(false); this.witch.setAI(false); - this.witch.setSilent(false); + this.witch.setSilent(true); this.witch.setCanPickupItems(false); this.witch.setCollidable(false); }