diff --git a/src/main/java/pb/ajneb97/managers/Actualizacion.java b/src/main/java/pb/ajneb97/managers/Actualizacion.java new file mode 100644 index 0000000..9d648bb --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/Actualizacion.java @@ -0,0 +1,31 @@ +package pb.ajneb97.managers; + +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +import pb.ajneb97.PaintballBattle; + +public class Actualizacion implements Listener{ + + private PaintballBattle plugin; + public Actualizacion(PaintballBattle plugin){ + this.plugin = plugin; + } + + @EventHandler + public void Join(PlayerJoinEvent event){ + Player jugador = event.getPlayer(); + FileConfiguration config = plugin.getConfig(); + if(jugador.isOp() && !(plugin.version.equals(plugin.latestversion))){ + if(config.getString("new_version_reminder").equals("true")){ + jugador.sendMessage(PaintballBattle.prefix + ChatColor.RED +" There is a new version available. "+ChatColor.YELLOW+ + "("+ChatColor.GRAY+plugin.latestversion+ChatColor.YELLOW+")"); + jugador.sendMessage(ChatColor.RED+"You can download it at: "+ChatColor.GREEN+"https://www.spigotmc.org/resources/76676/"); + } + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/CartelesAdmin.java b/src/main/java/pb/ajneb97/managers/CartelesAdmin.java new file mode 100644 index 0000000..f907d02 --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/CartelesAdmin.java @@ -0,0 +1,95 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.scheduler.BukkitScheduler; + +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.juego.EstadoPartida; +import pb.ajneb97.juego.Partida; + +public class CartelesAdmin { + + private int taskID; + private PaintballBattle plugin; + public CartelesAdmin(PaintballBattle plugin){ + this.plugin = plugin; + } + + public int getTaskID() { + return this.taskID; + } + + public void actualizarCarteles() { + BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); + taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() { + public void run() { + ejecutarActualizarCarteles(); + } + },0, 30L); + } + + protected void ejecutarActualizarCarteles() { + FileConfiguration config = plugin.getConfig(); + FileConfiguration messages = plugin.getMessages(); + if(config.contains("Signs")) { + for(String arena : config.getConfigurationSection("Signs").getKeys(false)) { + Partida partida = plugin.getPartida(arena); + if(partida != null) { + List listaCarteles = new ArrayList(); + if(config.contains("Signs."+arena)) { + listaCarteles = config.getStringList("Signs."+arena); + } + for(int i=0;i> 4; + int chunkZ = z >> 4; + if(!world.isChunkLoaded(chunkX, chunkZ)) { + continue; + } + Block block = world.getBlockAt(x,y,z); + + if(block.getType().name().contains("SIGN")) { + Sign sign = (Sign) block.getState(); + String estado = ""; + if(partida.getEstado().equals(EstadoPartida.JUGANDO)) { + estado = messages.getString("signStatusIngame"); + }else if(partida.getEstado().equals(EstadoPartida.COMENZANDO)) { + estado = messages.getString("signStatusStarting"); + }else if(partida.getEstado().equals(EstadoPartida.ESPERANDO)) { + estado = messages.getString("signStatusWaiting"); + }else if(partida.getEstado().equals(EstadoPartida.DESACTIVADA)) { + estado = messages.getString("signStatusDisabled"); + }else if(partida.getEstado().equals(EstadoPartida.TERMINANDO)) { + estado = messages.getString("signStatusFinishing"); + } + + List lista = messages.getStringList("signFormat"); + for(int c=0;c lista = messages.getStringList("signFormat"); + for(int c=0;c listaCarteles = new ArrayList(); + if(config.contains("Signs."+arena)) { + listaCarteles = config.getStringList("Signs."+arena); + } + listaCarteles.add(event.getBlock().getX()+";"+event.getBlock().getY()+";"+event.getBlock().getZ()+";"+event.getBlock().getWorld().getName()); + config.set("Signs."+arena, listaCarteles); + plugin.saveConfig(); + } + } + } + } + + @EventHandler + public void eliminarCartel(BlockBreakEvent event ) { + Player jugador = event.getPlayer(); + Block block = event.getBlock(); + if(jugador.isOp() || jugador.hasPermission("paintball.admin")) { + if(block.getType().name().contains("SIGN")) { + FileConfiguration config = plugin.getConfig(); + if(config.contains("Signs")) { + for(String arena : config.getConfigurationSection("Signs").getKeys(false)) { + List listaCarteles = new ArrayList(); + if(config.contains("Signs."+arena)) { + listaCarteles = config.getStringList("Signs."+arena); + } + for(int i=0;i listaCarteles = new ArrayList(); + if(config.contains("Signs."+arena)) { + listaCarteles = config.getStringList("Signs."+arena); + } + for(int i=0;i= 4) { + if(separados2[3].equalsIgnoreCase("global")) { + for(JugadorPaintball player : partida.getJugadores()) { + player.getJugador().playSound(player.getJugador().getLocation(), sound, Float.valueOf(separados2[1]), Float.valueOf(separados2[2])); + } + }else { + jugador.getJugador().playSound(jugador.getJugador().getLocation(), sound, Float.valueOf(separados2[1]), Float.valueOf(separados2[2])); + } + }else { + jugador.getJugador().playSound(jugador.getJugador().getLocation(), sound, Float.valueOf(separados2[1]), Float.valueOf(separados2[2])); + } + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados2[0]+" &7is not valid.")); + } + for(JugadorPaintball player : partida.getJugadores()) { + PartidaManager.muereJugador(partida, jugador, player, plugin, false, true); + } + partida.setEnNuke(false); + return false; + }else { + try { + Sound sound = ValueOfPatch.valueOf(separados1[0]); + if(separados1.length >= 4) { + if(separados1[3].equalsIgnoreCase("global")) { + for(JugadorPaintball player : partida.getJugadores()) { + player.getJugador().playSound(player.getJugador().getLocation(), sound, Float.valueOf(separados1[1]), Float.valueOf(separados1[2])); + } + }else { + jugador.getJugador().playSound(jugador.getJugador().getLocation(), sound, Float.valueOf(separados1[1]), Float.valueOf(separados1[2])); + } + }else { + jugador.getJugador().playSound(jugador.getJugador().getLocation(), sound, Float.valueOf(separados1[1]), Float.valueOf(separados1[2])); + } + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados1[0]+" &7is not valid.")); + } + for(JugadorPaintball player : partida.getJugadores()) { + player.getJugador().sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("nukeImpact").replace("%time%", tiempo+""))); + } + tiempo--; + return true; + } + }else { + return false; + } + }else { + return false; + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/CooldownKillstreaksActionbar.java b/src/main/java/pb/ajneb97/managers/CooldownKillstreaksActionbar.java new file mode 100644 index 0000000..faa41d2 --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/CooldownKillstreaksActionbar.java @@ -0,0 +1,51 @@ +package pb.ajneb97.managers; + + + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitScheduler; + +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.juego.JugadorPaintball; +import pb.ajneb97.juego.Killstreak; +import pb.ajneb97.juego.Partida; +import pb.ajneb97.lib.actionbarapi.ActionBarAPI; + +public class CooldownKillstreaksActionbar { + + int taskID; + private PaintballBattle plugin; + public CooldownKillstreaksActionbar(PaintballBattle plugin){ + this.plugin = plugin; + } + + public void crearActionbars() { + BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); + final FileConfiguration messages = plugin.getMessages(); + final FileConfiguration config = plugin.getConfig(); + taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() { + public void run() { + for(Player player : Bukkit.getOnlinePlayers()) { + actualizarActionbars(player,messages,config); + } + } + },0, 20L); + } + + protected void actualizarActionbars(final Player player,final FileConfiguration messages,final FileConfiguration config) { + Partida partida = plugin.getPartidaJugador(player.getName()); + if(partida != null) { + JugadorPaintball jugador = partida.getJugador(player.getName()); + Killstreak ultima = jugador.getUltimaKillstreak(); + if(ultima != null) { + String name = config.getString("killstreaks_items."+ultima.getTipo()+".name"); + int tiempo = ultima.getTiempo(); + ActionBarAPI.sendActionBar(jugador.getJugador(), ChatColor.translateAlternateColorCodes('&', messages.getString("killstreakActionbar") + .replace("%killstreak%", name).replace("%time%", tiempo+""))); + } + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/CooldownManager.java b/src/main/java/pb/ajneb97/managers/CooldownManager.java new file mode 100644 index 0000000..5cb8c79 --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/CooldownManager.java @@ -0,0 +1,147 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; + +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.juego.Equipo; +import pb.ajneb97.juego.EstadoPartida; +import pb.ajneb97.juego.JugadorPaintball; +import pb.ajneb97.juego.Partida; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.scheduler.BukkitScheduler; +import pb.ajneb97.utils.ValueOfPatch; + + +public class CooldownManager { + + int taskID; + int tiempo; + private Partida partida; + private PaintballBattle plugin; + public CooldownManager(PaintballBattle plugin){ + this.plugin = plugin; + } + + public void cooldownComenzarJuego(Partida partida,int cooldown){ + this.partida = partida; + this.tiempo = cooldown; + partida.setTiempo(tiempo); + final FileConfiguration messages = plugin.getMessages(); + final FileConfiguration config = plugin.getConfig(); + final String prefix = ChatColor.translateAlternateColorCodes('&', messages.getString("prefix"))+" "; + ArrayList jugadores = partida.getJugadores(); + for(int i=0;i 0) { + ArrayList jugadores = partida.getJugadores(); + for(int i=0;i jugadores = partida.getJugadores(); + for(int i=0;i lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena Lobby in your")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7current position.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + Location lobby = partida.getLobby(); + if(lobby == null) { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Position: &7NONE")); + }else { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Position:")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eX: &7"+lobby.getX())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eY: &7"+lobby.getY())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eZ: &7"+lobby.getZ())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eWorld: &7"+lobby.getWorld().getName())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eYaw: &7"+lobby.getYaw())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&ePitch: &7"+lobby.getPitch())); + } + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(10, item); + + item = new ItemStack(Material.QUARTZ_BLOCK,1); + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Team 1 Spawn")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena team 1 Spawn")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7in your current position.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + Location spawn = partida.getTeam1().getSpawn(); + if(spawn == null) { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Position: &7NONE")); + }else { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Position:")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eX: &7"+spawn.getX())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eY: &7"+spawn.getY())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eZ: &7"+spawn.getZ())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eWorld: &7"+spawn.getWorld().getName())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eYaw: &7"+spawn.getYaw())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&ePitch: &7"+spawn.getPitch())); + } + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(11, item); + + item = new ItemStack(Material.QUARTZ_BLOCK,1); + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Team 2 Spawn")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena team 2 Spawn")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7in your current position.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + spawn = partida.getTeam2().getSpawn(); + if(spawn == null) { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Position: &7NONE")); + }else { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Position:")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eX: &7"+spawn.getX())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eY: &7"+spawn.getY())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eZ: &7"+spawn.getZ())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eWorld: &7"+spawn.getWorld().getName())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&eYaw: &7"+spawn.getYaw())); + lore.add(ChatColor.translateAlternateColorCodes('&', "&ePitch: &7"+spawn.getPitch())); + } + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(12, item); + + item = new ItemStack(Material.GHAST_TEAR,partida.getCantidadMinimaJugadores()); + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Min Players")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena minimum number")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7of players.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7"+partida.getCantidadMinimaJugadores())); + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(13, item); + + item = new ItemStack(Material.GHAST_TEAR,partida.getCantidadMaximaJugadores()); + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Max Players")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena maximum number")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7of players.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7"+partida.getCantidadMaximaJugadores())); + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(14, item); + + item = new ItemStack(Material.NAME_TAG,1); + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Team 1 Color")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena team 1 Color.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + if(partida.getTeam1().esRandom()) { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7random")); + }else { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7"+partida.getTeam1().getTipo())); + } + + + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(15, item); + + item = new ItemStack(Material.NAME_TAG,1); + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Team 2 Color")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena team 2 Color.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + if(partida.getTeam2().esRandom()) { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7random")); + }else { + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7"+partida.getTeam2().getTipo())); + } + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(16, item); + + if(!UtilidadesOtros.isLegacy()) { + item = new ItemStack(Material.CLOCK,1); + }else { + item = new ItemStack(Material.valueOf("WATCH"),1); + } + + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Time")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the arena time in seconds.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7"+partida.getTiempoMaximo())); + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(21, item); + + item = new ItemStack(Material.REDSTONE_BLOCK,1); + meta = item.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lSet Starting Lives")); + lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7Click to define the starting amount of lives")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&7for both teams.")); + lore.add(ChatColor.translateAlternateColorCodes('&', "")); + lore.add(ChatColor.translateAlternateColorCodes('&', "&9Current Value: &7"+partida.getVidasIniciales())); + meta.setLore(lore); + item.setItemMeta(meta); + inv.setItem(23, item); + + jugador.openInventory(inv); + + PartidaEditando p = new PartidaEditando(jugador,partida); + plugin.setPartidaEditando(p); + } + + @EventHandler + public void alCerrarInventario(InventoryCloseEvent event) { + Player jugador = (Player) event.getPlayer(); + String pathInventory = ChatColor.translateAlternateColorCodes('&', "&2Editing Arena:"); + String pathInventoryM = ChatColor.stripColor(pathInventory); + PartidaEditando partida = plugin.getPartidaEditando(); + if(partida != null && partida.getJugador().getName().equals(jugador.getName())) { + if(ChatColor.stripColor(event.getView().getTitle()).contains(pathInventoryM)){ + plugin.removerPartidaEditando(); + } + } + } + + @EventHandler + public void alSalir(PlayerQuitEvent event) { + PartidaEditando partida = plugin.getPartidaEditando(); + Player jugador = event.getPlayer(); + if(partida != null && partida.getJugador().getName().equals(jugador.getName())) { + plugin.removerPartidaEditando(); + } + } + + @EventHandler + public void clickInventario(InventoryClickEvent event){ + String pathInventory = ChatColor.translateAlternateColorCodes('&', "&2Editing Arena:"); + String pathInventoryM = ChatColor.stripColor(pathInventory); + FileConfiguration messages = plugin.getMessages(); + String prefix = ChatColor.translateAlternateColorCodes('&', messages.getString("prefix"))+" "; + if(ChatColor.stripColor(event.getView().getTitle()).contains(pathInventoryM)){ + if(event.getCurrentItem() == null){ + event.setCancelled(true); + return; + } + if((event.getSlotType() == null)){ + event.setCancelled(true); + return; + }else{ + Player jugador = (Player) event.getWhoClicked(); + event.setCancelled(true); + if(event.getClickedInventory().equals(jugador.getOpenInventory().getTopInventory())) { + PartidaEditando partida = plugin.getPartidaEditando(); + if(partida != null && partida.getJugador().getName().equals(jugador.getName())) { + int slot = event.getSlot(); + FileConfiguration config = plugin.getConfig(); + if(slot == 10) { + partida.getPartida().setLobby(jugador.getLocation().clone()); + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("lobbyDefined").replace("%name%", partida.getPartida().getNombre()))); + InventarioAdmin.crearInventario(jugador, partida.getPartida(),plugin); + }else if(slot == 11) { + partida.getPartida().getTeam1().setSpawn(jugador.getLocation().clone()); + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("spawnTeamDefined").replace("%number%", "1").replace("%name%", partida.getPartida().getNombre()))); + InventarioAdmin.crearInventario(jugador, partida.getPartida(),plugin); + }else if(slot == 12) { + partida.getPartida().getTeam2().setSpawn(jugador.getLocation().clone()); + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("spawnTeamDefined").replace("%number%", "2").replace("%name%", partida.getPartida().getNombre()))); + InventarioAdmin.crearInventario(jugador, partida.getPartida(),plugin); + }else if(slot == 13) { + jugador.closeInventory(); + PartidaEditando p = new PartidaEditando(jugador,partida.getPartida()); + p.setPaso("min"); + plugin.setPartidaEditando(p); + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aWrite an even number.")); + }else if(slot == 14) { + jugador.closeInventory(); + PartidaEditando p = new PartidaEditando(jugador,partida.getPartida()); + p.setPaso("max"); + plugin.setPartidaEditando(p); + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aWrite an even number.")); + }else if(slot == 15) { + jugador.closeInventory(); + PartidaEditando p = new PartidaEditando(jugador,partida.getPartida()); + p.setPaso("team1name"); + plugin.setPartidaEditando(p); + String lista = ""; + for(String key : config.getConfigurationSection("teams").getKeys(false)) { + lista=lista+key+" "; + } + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aWrite one of these team names: &7random "+lista)); + }else if(slot == 16) { + jugador.closeInventory(); + PartidaEditando p = new PartidaEditando(jugador,partida.getPartida()); + p.setPaso("team2name"); + plugin.setPartidaEditando(p); + String lista = ""; + for(String key : config.getConfigurationSection("teams").getKeys(false)) { + lista=lista+key+" "; + } + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aWrite one of these team names: &7random "+lista)); + }else if(slot == 21) { + jugador.closeInventory(); + PartidaEditando p = new PartidaEditando(jugador,partida.getPartida()); + p.setPaso("time"); + plugin.setPartidaEditando(p); + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aWrite a number. This will be the arena time in seconds.")); + }else if(slot == 23) { + jugador.closeInventory(); + PartidaEditando p = new PartidaEditando(jugador,partida.getPartida()); + p.setPaso("lives"); + plugin.setPartidaEditando(p); + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aWrite a number. This will be the amount of starting lives for each team.")); + } + } + + } + } + } + } + + @EventHandler + public void capturarChat(AsyncPlayerChatEvent event) { + final PartidaEditando partida = plugin.getPartidaEditando(); + final Player jugador = event.getPlayer(); + String message = ChatColor.stripColor(event.getMessage()); + if(partida != null && partida.getJugador().getName().equals(jugador.getName())) { + event.setCancelled(true); + FileConfiguration messages = plugin.getMessages(); + String prefix = ChatColor.translateAlternateColorCodes('&', messages.getString("prefix"))+" "; + String paso = partida.getPaso(); + if(paso.equals("min")) { + try { + int num = Integer.valueOf(message); + if(num >= 2 && num % 2 == 0) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("minPlayersDefined").replace("%name%", partida.getPartida().getNombre()))); + partida.getPartida().setCantidadMinimaJugadores(num); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + InventarioAdmin.crearInventario(jugador, partida.getPartida(), plugin); + } + }, 3L); + }else { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + }catch(NumberFormatException e) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + }else if(paso.equals("max")) { + try { + int num = Integer.valueOf(message); + if(num >= 2 && num % 2 == 0) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("maxPlayersDefined").replace("%name%", partida.getPartida().getNombre()))); + partida.getPartida().setCantidadMaximaJugadores(num); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + InventarioAdmin.crearInventario(jugador, partida.getPartida(), plugin); + } + }, 3L); + }else { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + }catch(NumberFormatException e) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + }else if(paso.equals("team1name")) { + FileConfiguration config = plugin.getConfig(); + + if(config.contains("teams."+message) || message.equalsIgnoreCase("random")) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("typeDefined").replace("%number%", "1").replace("%name%", partida.getPartida().getNombre()))); + partida.getPartida().getTeam1().setTipo(message); + if(message.equalsIgnoreCase("random")) { + partida.getPartida().getTeam1().setRandom(true); + }else { + partida.getPartida().getTeam1().setRandom(false); + } + partida.getPartida().modificarTeams(config); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + InventarioAdmin.crearInventario(jugador, partida.getPartida(), plugin); + } + }, 3L); + }else { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', "&cThat team name doesn't exists.")); + } + }else if(paso.equals("team2name")) { + FileConfiguration config = plugin.getConfig(); + + if(config.contains("teams."+message) || message.equalsIgnoreCase("random")) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("typeDefined").replace("%number%", "2").replace("%name%", partida.getPartida().getNombre()))); + partida.getPartida().getTeam2().setTipo(message); + if(message.equalsIgnoreCase("random")) { + partida.getPartida().getTeam2().setRandom(true); + }else { + partida.getPartida().getTeam2().setRandom(false); + } + partida.getPartida().modificarTeams(config); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + InventarioAdmin.crearInventario(jugador, partida.getPartida(), plugin); + } + }, 3L); + }else { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', "&cThat team name doesn't exists.")); + } + }else if(paso.equals("time")) { + try { + int num = Integer.valueOf(message); + if(num > 0) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("timeDefined").replace("%name%", partida.getPartida().getNombre()))); + partida.getPartida().setTiempoMaximo(num); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + InventarioAdmin.crearInventario(jugador, partida.getPartida(), plugin); + } + }, 3L); + }else { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + }catch(NumberFormatException e) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + }else if(paso.equals("lives")) { + try { + int num = Integer.valueOf(message); + if(num > 0) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("livesDefined").replace("%name%", partida.getPartida().getNombre()))); + partida.getPartida().setVidasIniciales(num); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + InventarioAdmin.crearInventario(jugador, partida.getPartida(), plugin); + } + }, 3L); + }else { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + }catch(NumberFormatException e) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("validNumberError"))); + } + } + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/InventarioHats.java b/src/main/java/pb/ajneb97/managers/InventarioHats.java new file mode 100644 index 0000000..b630233 --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/InventarioHats.java @@ -0,0 +1,143 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +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; +import org.bukkit.inventory.meta.ItemMeta; + +import net.md_5.bungee.api.ChatColor; +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.api.Hat; +import pb.ajneb97.api.PaintballAPI; +import pb.ajneb97.database.JugadorDatos; +import pb.ajneb97.database.MySQL; +import pb.ajneb97.utils.UtilidadesItems; + +public class InventarioHats implements Listener{ + + PaintballBattle plugin; + public InventarioHats(PaintballBattle plugin) { + this.plugin = plugin; + } + + public static void crearInventario(Player jugador,PaintballBattle plugin) { + FileConfiguration config = plugin.getConfig(); + Inventory inv = Bukkit.createInventory(null, 27, ChatColor.translateAlternateColorCodes('&', config.getString("hats_inventory_title"))); + ArrayList hats = PaintballAPI.getHats(jugador); + int slot = 0; + if(hats.isEmpty()) { + ItemStack item = UtilidadesItems.crearItem(config, "hats_items.no_hats"); + inv.setItem(13, item); + }else { + FileConfiguration messages = plugin.getMessages(); + for(Hat h : hats) { + String name = h.getName(); + ItemStack item = UtilidadesItems.crearItem(config, "hats_items."+name); + ItemMeta meta = item.getItemMeta(); + List lore = meta.getLore(); + String status = ""; + if(h.isSelected()) { + status = messages.getString("hatStatusSelected"); + }else { + status = messages.getString("hatStatusNotSelected"); + } + for(int i=0;i hats = PaintballAPI.getHats(jugador); + ItemStack item = event.getCurrentItem(); + if(item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { + if(event.getSlot() == 26) { + if(MySQL.isEnabled(config)) { + MySQL.deseleccionarHats(plugin, jugador.getName()); + }else { + JugadorDatos jDatos = plugin.getJugador(jugador.getName()); + jDatos.deseleccionarHats(); + } + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("hatRemoved"))); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + InventarioHats.crearInventario(jugador, plugin); + } + }, 5L); + return; + } + for(Hat h : hats) { + ItemStack itemConfig = UtilidadesItems.crearItem(config, "hats_items."+h.getName()); + ItemMeta meta = item.getItemMeta(); + ItemMeta metaConfig = itemConfig.getItemMeta(); + if(item.getType().equals(itemConfig.getType()) && meta.getDisplayName().equals(metaConfig.getDisplayName())) { + //Seleccionar hat + if(PaintballAPI.hasHatSelected(jugador, h.getName())) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("hatAlreadySelected"))); + return; + } + if(MySQL.isEnabled(config)) { + MySQL.seleccionarHatAsync(plugin, jugador.getName(), h.getName()); + }else { + JugadorDatos jDatos = plugin.getJugador(jugador.getName()); + jDatos.seleccionarHat(h.getName()); + } + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("hatSelected").replace("%name%", config.getString("hats_items."+h.getName()+".name")))); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + InventarioHats.crearInventario(jugador, plugin); + } + }, 5L); + return; + } + + } + } + } + } + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/InventarioKillstreaks.java b/src/main/java/pb/ajneb97/managers/InventarioKillstreaks.java new file mode 100644 index 0000000..9d9caca --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/InventarioKillstreaks.java @@ -0,0 +1,77 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitScheduler; + +import net.md_5.bungee.api.ChatColor; +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.juego.JugadorPaintball; +import pb.ajneb97.juego.Killstreak; +import pb.ajneb97.juego.Partida; +import pb.ajneb97.utils.UtilidadesItems; + +public class InventarioKillstreaks{ + + int taskID; + private PaintballBattle plugin; + public InventarioKillstreaks(PaintballBattle plugin) { + this.plugin = plugin; + } + + public void actualizarInventario(final Player jugador,final Partida partida) { + BukkitScheduler sh = Bukkit.getServer().getScheduler(); + final FileConfiguration config = plugin.getConfig(); + final FileConfiguration messages = plugin.getMessages(); + taskID = sh.scheduleSyncRepeatingTask(plugin, new Runnable() { + public void run() { + if(!update(jugador,config,messages,partida)) { + Bukkit.getScheduler().cancelTask(taskID); + return; + } + } + }, 0L, 20L); + } + + protected boolean update(Player jugador,FileConfiguration config,FileConfiguration messages,Partida partida) { + String pathInventory = ChatColor.translateAlternateColorCodes('&', ChatColor.translateAlternateColorCodes('&', config.getString("killstreaks_inventory_title"))); + String pathInventoryM = ChatColor.stripColor(pathInventory); + Inventory inv = jugador.getOpenInventory().getTopInventory(); + if(partida == null) { + return false; + } + JugadorPaintball j = partida.getJugador(jugador.getName()); + if(j == null) { + return false; + } + if(inv != null && ChatColor.stripColor(jugador.getOpenInventory().getTitle()).equals(pathInventoryM)) { + for(String key : config.getConfigurationSection("killstreaks_items").getKeys(false)) { + ItemStack item = UtilidadesItems.crearItem(config, "killstreaks_items."+key); + + Killstreak k = j.getKillstreak(key); + if(k != null) { + ItemMeta meta = item.getItemMeta(); + List lore = new ArrayList(); + lore.add(ChatColor.translateAlternateColorCodes('&', messages.getString("killstreakCurrentlyActive").replace("%time%", k.getTiempo()+""))); + meta.setLore(lore); + item.setItemMeta(meta); + } + int slot = Integer.valueOf(config.getString("killstreaks_items."+key+".slot")); + if(slot != - 1) { + inv.setItem(slot, item); + } + } + return true; + }else { + return false; + } + } + +} diff --git a/src/main/java/pb/ajneb97/managers/InventarioShop.java b/src/main/java/pb/ajneb97/managers/InventarioShop.java new file mode 100644 index 0000000..64b2130 --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/InventarioShop.java @@ -0,0 +1,462 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.configuration.file.FileConfiguration; +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; +import org.bukkit.inventory.meta.ItemMeta; + +import me.realized.tokenmanager.api.TokenManager; +import net.md_5.bungee.api.ChatColor; +import net.milkbowl.vault.economy.Economy; +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.api.Hat; +import pb.ajneb97.api.PaintballAPI; +import pb.ajneb97.api.Perk; +import pb.ajneb97.database.JugadorDatos; +import pb.ajneb97.database.MySQL; +import pb.ajneb97.utils.UtilidadesItems; +import pb.ajneb97.utils.ValueOfPatch; + + +public class InventarioShop implements Listener{ + + private PaintballBattle plugin; + public InventarioShop(PaintballBattle plugin) { + this.plugin = plugin; + } + + public static void crearInventarioPrincipal(Player jugador,PaintballBattle plugin) { + FileConfiguration shop = plugin.getShop(); + Inventory inv = Bukkit.createInventory(null, 27, ChatColor.translateAlternateColorCodes('&', shop.getString("shopInventoryTitle"))); + for(String key : shop.getConfigurationSection("shop_items").getKeys(false)) { + ItemStack item = UtilidadesItems.crearItem(shop, "shop_items."+key); + int slot = Integer.valueOf(shop.getString("shop_items."+key+".slot")); + if(slot != - 1) { + inv.setItem(slot, item); + } + } + + jugador.openInventory(inv); + } + + @EventHandler + public void clickInventarioPrincipal(InventoryClickEvent event){ + FileConfiguration shop = plugin.getShop(); + String pathInventory = ChatColor.translateAlternateColorCodes('&', shop.getString("shopInventoryTitle")); + String pathInventoryM = ChatColor.stripColor(pathInventory); + //FileConfiguration messages = plugin.getMessages(); + //String prefix = ChatColor.translateAlternateColorCodes('&', messages.getString("prefix"))+" "; + if(ChatColor.stripColor(event.getView().getTitle()).equals(pathInventoryM)){ + if(event.getCurrentItem() == null){ + event.setCancelled(true); + return; + } + if((event.getSlotType() == null)){ + event.setCancelled(true); + return; + }else{ + Player jugador = (Player) event.getWhoClicked(); + event.setCancelled(true); + if(event.getClickedInventory().equals(jugador.getOpenInventory().getTopInventory())) { + int slot = event.getSlot(); + for(String key : shop.getConfigurationSection("shop_items").getKeys(false)) { + if(slot == Integer.valueOf(shop.getString("shop_items."+key+".slot"))) { + if(key.equals("perks_items")) { + crearInventarioPerks(jugador,plugin); + }else if(key.equals("hats_items")) { + crearInventarioHats(jugador,plugin); + } + return; + } + } + } + } + } + } + + public static void crearInventarioPerks(Player jugador,PaintballBattle plugin) { + FileConfiguration shop = plugin.getShop(); + FileConfiguration config = plugin.getConfig(); + Inventory inv = Bukkit.createInventory(null, 54, ChatColor.translateAlternateColorCodes('&', shop.getString("shopPerksInventoryTitle"))); + for(String key : shop.getConfigurationSection("perks_items").getKeys(false)) { + ItemStack item = UtilidadesItems.crearItem(shop, "perks_items."+key); + if(key.equals("coins_info")) { + ItemMeta meta = item.getItemMeta(); + if(config.getString("economy_used").equals("vault")) { + Economy econ = plugin.getEconomy(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%coins%", econ.getBalance(jugador)+""))); + }else if(config.getString("economy_used").equals("token_manager")) { + TokenManager tokenManager = (TokenManager) Bukkit.getPluginManager().getPlugin("TokenManager"); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%coins%", tokenManager.getTokens(jugador).orElse(0)+""))); + } + else { + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%coins%", PaintballAPI.getCoins(jugador)+""))); + } + + item.setItemMeta(meta); + } + if(shop.contains("perks_items."+key+".slot")) { + int slot = Integer.valueOf(shop.getString("perks_items."+key+".slot")); + if(slot != - 1) { + inv.setItem(slot, item); + } + } + + } + ItemStack item = UtilidadesItems.crearItem(shop, "perks_items.decorative_item"); + for(int i=0;i<=8;i++) { + inv.setItem(i, item); + } + for(int i=36;i<=44;i++) { + inv.setItem(i, item); + } + + int levelExtraLives = PaintballAPI.getPerkLevel(jugador, "extra_lives"); + List lista = shop.getStringList("perks_upgrades.extra_lives"); + for(int i=0;i levelExtraLives-1) { + item = UtilidadesItems.crearItem(shop, "perks_items.extra_lives_perk_item"); + }else { + item = UtilidadesItems.crearItem(shop, "perks_items.extra_lives_bought_perk_item"); + } + ItemMeta meta = item.getItemMeta(); + String[] separados = lista.get(i).split(";"); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%name%", separados[2]))); + List lore = meta.getLore(); + for(int c=0;c levelInitialKillcoins-1) { + item = UtilidadesItems.crearItem(shop, "perks_items.initial_killcoins_perk_item"); + }else { + item = UtilidadesItems.crearItem(shop, "perks_items.initial_killcoins_bought_perk_item"); + } + ItemMeta meta = item.getItemMeta(); + String[] separados = lista.get(i).split(";"); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%name%", separados[2]))); + List lore = meta.getLore(); + for(int c=0;c levelExtraKillcoins-1) { + item = UtilidadesItems.crearItem(shop, "perks_items.extra_killcoins_perk_item"); + }else { + item = UtilidadesItems.crearItem(shop, "perks_items.extra_killcoins_bought_perk_item"); + } + ItemMeta meta = item.getItemMeta(); + String[] separados = lista.get(i).split(";"); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%name%", separados[2]))); + List lore = meta.getLore(); + for(int c=0;c= 9 && slot <= 17 || slot >= 18 && slot <= 26 || slot >= 27 && slot <= 35) { + int slotSum = 0; + String perk = ""; + if(slot >= 9 && slot <= 17) { + //ExtraLives + slotSum = 9; + perk = "extra_lives"; + }else if(slot >= 18 && slot <= 26) { + //Initial KillCoins + slotSum = 18; + perk = "initial_killcoins"; + }else { + //Extra KillCoins + slotSum = 27; + perk = "extra_killcoins"; + } + + List lista = shop.getStringList("perks_upgrades."+perk); + for(int i=0;i(),new ArrayList())); + } + JugadorDatos jDatos = plugin.getJugador(jugador.getName()); + jDatos.setPerk(perk, nivel+1); + } + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("perkUnlocked").replace("%name%", separados[2]))); + String[] separadosSound = config.getString("shopUnlockSound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separadosSound[0]); + jugador.playSound(jugador.getLocation(), sound, Float.valueOf(separadosSound[1]), Float.valueOf(separadosSound[2])); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separadosSound[0]+" &7is not valid.")); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + InventarioShop.crearInventarioPerks(jugador, plugin); + } + }, 5L); + }else if(slot > slotADesbloquear) { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("perkErrorPrevious"))); + return; + }else { + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("perkErrorUnlocked"))); + return; + } + + return; + } + } + }else if(slot == Integer.valueOf(shop.getString("perks_items.go_to_menu.slot"))) { + InventarioShop.crearInventarioPrincipal(jugador, plugin); + } + } + } + } + } + } + + public static void crearInventarioHats(Player jugador,PaintballBattle plugin) { + FileConfiguration shop = plugin.getShop(); + FileConfiguration config = plugin.getConfig(); + Inventory inv = Bukkit.createInventory(null, 54, ChatColor.translateAlternateColorCodes('&', shop.getString("shopHatsInventoryTitle"))); + for(String key : shop.getConfigurationSection("hats_items").getKeys(false)) { + ItemStack item = UtilidadesItems.crearItem(shop, "hats_items."+key); + if(key.equals("coins_info")) { + ItemMeta meta = item.getItemMeta(); + if(config.getString("economy_used").equals("vault")) { + Economy econ = plugin.getEconomy(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%coins%", econ.getBalance(jugador)+""))); + }else if(config.getString("economy_used").equals("token_manager")) { + TokenManager tokenManager = (TokenManager) Bukkit.getPluginManager().getPlugin("TokenManager"); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%coins%", tokenManager.getTokens(jugador).orElse(0)+""))); + } + else { + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', meta.getDisplayName().replace("%coins%", PaintballAPI.getCoins(jugador)+""))); + } + + item.setItemMeta(meta); + }else { + if(!key.equals("go_to_menu")) { + if(PaintballAPI.hasHat(jugador, key)) { + ItemMeta meta = item.getItemMeta(); + List lore = shop.getStringList("hats_items."+key+".bought_lore"); + for(int i=0;i(),new ArrayList())); + } + JugadorDatos jDatos = plugin.getJugador(jugador.getName()); + jDatos.agregarHat(key); + } + jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("hatBought").replace("%name%", shop.getString("hats_items."+key+".name")))); + String[] separadosSound = config.getString("shopUnlockSound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separadosSound[0]); + jugador.playSound(jugador.getLocation(), sound, Float.valueOf(separadosSound[1]), Float.valueOf(separadosSound[2])); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separadosSound[0]+" &7is not valid.")); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + InventarioShop.crearInventarioHats(jugador, plugin); + } + }, 5L); + return; + } + } + } + } + } + } + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/PartidaListener.java b/src/main/java/pb/ajneb97/managers/PartidaListener.java new file mode 100644 index 0000000..feb0154 --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/PartidaListener.java @@ -0,0 +1,693 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.ChatColor; +import org.bukkit.entity.Egg; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Snowball; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.InventoryType.SlotType; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerEggThrowEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.projectiles.ProjectileSource; +import org.bukkit.util.Vector; + +import me.clip.placeholderapi.PlaceholderAPI; +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.juego.Equipo; +import pb.ajneb97.juego.EstadoPartida; +import pb.ajneb97.juego.JugadorPaintball; +import pb.ajneb97.juego.Killstreak; +import pb.ajneb97.juego.Partida; +import pb.ajneb97.utils.UtilidadesItems; +import pb.ajneb97.utils.UtilidadesOtros; +import pb.ajneb97.utils.ValueOfPatch; + +public class PartidaListener implements Listener{ + + PaintballBattle plugin; + public PartidaListener(PaintballBattle plugin) { + this.plugin = plugin; + } + + @EventHandler + public void alSalir(PlayerQuitEvent event) { + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + PartidaManager.jugadorSale(partida, jugador,false,plugin,false); + } + } + + @EventHandler + public void clickearItemSalir(PlayerInteractEvent event) { + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { + if(event.getItem() != null) { + FileConfiguration config = plugin.getConfig(); + ItemStack item = UtilidadesItems.crearItem(config, "leave_item"); + if(event.getItem().isSimilar(item)) { + event.setCancelled(true); + PartidaManager.jugadorSale(partida, jugador,false,plugin,false); + } + } + } + } + } + + @EventHandler + public void clickearItemHats(PlayerInteractEvent event) { + final Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { + if(event.getItem() != null) { + FileConfiguration config = plugin.getConfig(); + ItemStack item = UtilidadesItems.crearItem(config, "hats_item"); + if(event.getItem().isSimilar(item)) { + event.setCancelled(true); + + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + // TODO Auto-generated method stub + jugador.updateInventory(); + jugador.getEquipment().setHelmet(null); + InventarioHats.crearInventario(jugador, plugin); + } + },2L); + } + } + } + } + } + + @EventHandler + public void clickearItemPlayAgain(PlayerInteractEvent event) { + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { + if(event.getItem() != null) { + FileConfiguration config = plugin.getConfig(); + ItemStack item = UtilidadesItems.crearItem(config, "play_again_item"); + if(event.getItem().isSimilar(item)) { + event.setCancelled(true); + Partida partidaNueva = PartidaManager.getPartidaDisponible(plugin); + if(partidaNueva == null) { + FileConfiguration messages = plugin.getMessages(); + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("noArenasAvailable"))); + }else { + PartidaManager.jugadorSale(partida, jugador, true, plugin, false); + PartidaManager.jugadorEntra(partidaNueva, jugador, plugin); + } + } + } + } + } + } + + @EventHandler + public void clickearItemSelectorEquipo(PlayerInteractEvent event) { + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { + if(event.getItem() != null) { + FileConfiguration config = plugin.getConfig(); + FileConfiguration messages = plugin.getMessages(); + if(config.getString("choose_team_system").equals("true")) { + ItemStack team1 = UtilidadesItems.crearItem(config, "teams."+partida.getTeam1().getTipo()); + ItemMeta meta = team1.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', messages.getString("teamChoose").replace("%team%", config.getString("teams."+partida.getTeam1().getTipo()+".name")))); + team1.setItemMeta(meta); + ItemStack team2 = UtilidadesItems.crearItem(config, "teams."+partida.getTeam2().getTipo()); + meta = team2.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', messages.getString("teamChoose").replace("%team%", config.getString("teams."+partida.getTeam2().getTipo()+".name")))); + team2.setItemMeta(meta); + //String prefix = ChatColor.translateAlternateColorCodes('&', messages.getString("prefix"))+" "; + if(event.getItem().isSimilar(team1)) { + event.setCancelled(true); + jugador.updateInventory(); + JugadorPaintball j = partida.getJugador(jugador.getName()); + if(j.getPreferenciaTeam() != null && j.getPreferenciaTeam().equals(partida.getTeam1().getTipo())) { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("errorTeamAlreadySelected"))); + return; + } + if(partida.puedeSeleccionarEquipo(partida.getTeam1().getTipo())) { + j.setPreferenciaTeam(partida.getTeam1().getTipo()); + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("teamSelected").replace("%team%", config.getString("teams."+partida.getTeam1().getTipo()+".name")))); + }else { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("errorTeamSelected"))); + } + + }else if(event.getItem().isSimilar(team2)) { + event.setCancelled(true); + jugador.updateInventory(); + JugadorPaintball j = partida.getJugador(jugador.getName()); + if(j.getPreferenciaTeam() != null && j.getPreferenciaTeam().equals(partida.getTeam2().getTipo())) { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("errorTeamAlreadySelected"))); + return; + } + if(partida.puedeSeleccionarEquipo(partida.getTeam2().getTipo())) { + j.setPreferenciaTeam(partida.getTeam2().getTipo()); + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("teamSelected").replace("%team%", config.getString("teams."+partida.getTeam2().getTipo()+".name")))); + }else { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("errorTeamSelected"))); + } + + } + } + } + } + } + } + + @EventHandler + public void clickearItemKillstreak(PlayerInteractEvent event) { + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { + if(event.getItem() != null && event.getItem().hasItemMeta()) { + FileConfiguration config = plugin.getConfig(); + if(jugador.getInventory().getHeldItemSlot() == 8 && (event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK))) { + if(config.getString("killstreaks_item_enabled").equals("true")) { + if(partida.getEstado().equals(EstadoPartida.JUGANDO)) { + event.setCancelled(true); + Inventory inv = Bukkit.createInventory(null, 18, ChatColor.translateAlternateColorCodes('&', config.getString("killstreaks_inventory_title"))); + jugador.openInventory(inv); + InventarioKillstreaks i = new InventarioKillstreaks(plugin); + i.actualizarInventario(jugador, partida); + } + } + } + + } + } + } + } + + @EventHandler + public void alShiftear(PlayerToggleSneakEvent event) { + if(event.isSneaking()) { + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null && partida.getEstado().equals(EstadoPartida.JUGANDO)) { + FileConfiguration messages = plugin.getMessages(); + JugadorPaintball j = partida.getJugador(jugador.getName()); + String hat = j.getSelectedHat(); + if(hat.equals("guardian_hat") || hat.equals("jump_hat")) { + if(!j.isEfectoHatEnCooldown()) { + FileConfiguration config = plugin.getConfig(); + int duration = Integer.valueOf(config.getString("hats_items."+hat+".duration")); + int cooldown = Integer.valueOf(config.getString("hats_items."+hat+".cooldown")); + if(hat.equals("jump_hat")) { + jugador.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST,20*duration,1,false,false)); + }else if(hat.equals("guardian_hat")) { + jugador.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS,20*duration,2,false,false)); + CooldownHats c = new CooldownHats(plugin); + c.durationHat(j, partida, duration); + } + j.setEfectoHatActivado(true); + j.setEfectoHatEnCooldown(true); + j.getJugador().sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("hatAbilityActivated"))); + String[] separados = config.getString("hatAbilityActivatedSound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separados[0]); + j.getJugador().playSound(j.getJugador().getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados[0]+" &7is not valid.")); + } + CooldownHats c = new CooldownHats(plugin); + c.cooldownHat(j, partida, cooldown); + }else { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("hatCooldownError").replace("%time%", j.getTiempoEfectoHat()+""))); + } + } + + } + } + } + + @EventHandler + public void alUsarComando(PlayerCommandPreprocessEvent event) { + String comando = event.getMessage().toLowerCase(); + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null && !jugador.isOp() && !jugador.hasPermission("paintball.admin")) { + FileConfiguration config = plugin.getConfig(); + List comandos = config.getStringList("commands_whitelist"); + for(int i=0;i jugadores = partida.getJugadores(); + if(partida.estaIniciada()) { + String teamName = config.getString("teams."+partida.getEquipoJugador(jugador.getName()).getTipo()+".name"); + for(JugadorPaintball j : jugadores) { + String msg = ChatColor.translateAlternateColorCodes('&', config.getString("arena_chat_format").replace("%player%", jugador.getName()).replace("%team%", teamName)); + if(Bukkit.getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + msg = PlaceholderAPI.setPlaceholders(j.getJugador(), msg.replace("%message%", message)); + }else { + msg = msg.replace("%message%", message); + } + j.getJugador().sendMessage(msg); + } + }else { + for(JugadorPaintball j : jugadores) { + String msg = ChatColor.translateAlternateColorCodes('&', config.getString("arena_chat_format").replace("%player%", jugador.getName()).replace("%team%", messages.getString("teamInformationNone"))); + if(Bukkit.getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + msg = PlaceholderAPI.setPlaceholders(j.getJugador(), msg.replace("%message%", message)); + }else { + msg = msg.replace("%message%", message); + } + j.getJugador().sendMessage(msg); + } + } + }else { + for(Player p : Bukkit.getOnlinePlayers()) { + if(plugin.getPartidaJugador(p.getName()) != null) { + event.getRecipients().remove(p); + } + } + } + } + } + + @EventHandler + public void impactoBolaDeNieve(EntityDamageByEntityEvent event) { + Entity e = event.getDamager(); + if(e instanceof Projectile && (e.getType().equals(EntityType.SNOWBALL) || e.getType().equals(EntityType.EGG))) { + Projectile proyectil = (Projectile) e; + ProjectileSource shooter = proyectil.getShooter(); + Entity dañado = event.getEntity(); + if(dañado instanceof Player && shooter instanceof Player) { + Player jugadorDañado = (Player) dañado; + Player jugadorAtacante = (Player) shooter; + Partida partida = plugin.getPartidaJugador(jugadorAtacante.getName()); + if(partida != null) { + if(partida.getEstado().equals(EstadoPartida.JUGANDO)) { + + event.setCancelled(true); + + JugadorPaintball j = partida.getJugador(jugadorAtacante.getName()); + JugadorPaintball j2 = partida.getJugador(jugadorDañado.getName()); + + if(j2 == null || j2.getKillstreak("fury") != null) { + return; + } + + + PartidaManager.muereJugador(partida, j, j2, plugin, false, false); + + } + + } + } + } + } + + @EventHandler + public void clickInventarioKillstreak(InventoryClickEvent event){ + FileConfiguration config = plugin.getConfig(); + String pathInventory = ChatColor.translateAlternateColorCodes('&', config.getString("killstreaks_inventory_title")); + String pathInventoryM = ChatColor.stripColor(pathInventory); + FileConfiguration messages = plugin.getMessages(); + //String prefix = ChatColor.translateAlternateColorCodes('&', messages.getString("prefix"))+" "; + if(ChatColor.stripColor(event.getView().getTitle()).contains(pathInventoryM)){ + if(event.getCurrentItem() == null){ + event.setCancelled(true); + return; + } + if((event.getSlotType() == null)){ + event.setCancelled(true); + return; + }else{ + Player jugador = (Player) event.getWhoClicked(); + event.setCancelled(true); + if(event.getClickedInventory().equals(jugador.getOpenInventory().getTopInventory())) { + Partida partida = plugin.getPartidaJugador(jugador.getName()); + JugadorPaintball j = partida.getJugador(jugador.getName()); + if(partida != null) { + int slot = event.getSlot(); + for(String key : config.getConfigurationSection("killstreaks_items").getKeys(false)) { + if(slot == Integer.valueOf(config.getString("killstreaks_items."+key+".slot"))) { + if(j.getKillstreak(key) != null) { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("killstreakAlreadyActivated"))); + return; + } + if(config.contains("killstreaks_items."+key+".permission")) { + if(!jugador.hasPermission(config.getString("killstreaks_items."+key+".permission"))) { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("killstreaks_items."+key+".permissionError"))); + return; + } + } + + int cost = Integer.valueOf(config.getString("killstreaks_items."+key+".cost")); + if(j.getCoins() >= cost) { + if(key.equalsIgnoreCase("nuke") && partida.isEnNuke()) { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("nukeError"))); + return; + } + + j.disminuirCoins(cost); + String name = ChatColor.translateAlternateColorCodes('&', config.getString("killstreaks_items."+key+".name")); + String teamName = config.getString("teams."+partida.getEquipoJugador(jugador.getName()).getTipo()+".name"); + + for(JugadorPaintball player : partida.getJugadores()) { + if(!player.getJugador().getName().equals(jugador.getName())) { + String msg = ChatColor.translateAlternateColorCodes('&', messages.getString("killstreakActivatedPlayer").replace("%player%", jugador.getName()).replace("%team%", teamName) + .replace("%killstreak%", name)); + player.getJugador().sendMessage(msg); + } + } + + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("killstreakActivated").replace("%killstreak%", name))); + + + if(key.equalsIgnoreCase("strong_arm") || key.equalsIgnoreCase("triple_shoot") || key.equalsIgnoreCase("fury")) { + int duration = Integer.valueOf(config.getString("killstreaks_items."+key+".duration")); + if(j.getSelectedHat().equals("time_hat")) { + duration = duration+5; + } + Killstreak k = new Killstreak(key,duration); + j.agregarKillstreak(k); + CooldownKillstreaks cooldown = new CooldownKillstreaks(plugin); + cooldown.cooldownKillstreak(j, partida, key, duration); + }else { + PartidaManager.killstreakInstantanea(key, jugador, partida, plugin); + } + + String[] separados = config.getString("killstreaks_items."+key+".activateSound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separados[0]); + if(separados.length >= 4) { + if(separados[3].equalsIgnoreCase("global")) { + for(JugadorPaintball player : partida.getJugadores()) { + player.getJugador().playSound(player.getJugador().getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + } + }else { + jugador.playSound(jugador.getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + } + }else { + jugador.playSound(jugador.getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + } + + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados[0]+" &7is not valid.")); + } + + UtilidadesItems.crearItemKillstreaks(j, config); + }else { + jugador.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("noSufficientCoins"))); + } + return; + } + } + } + } + } + } + } + + @EventHandler + public void preLanzarSnowball(PlayerInteractEvent event) { + Player jugador = event.getPlayer(); + ItemStack item = event.getItem(); + if(event.getAction().equals(Action.RIGHT_CLICK_AIR)) { + if(item != null && (item.getType().name().contains("SNOW") || item.getType().name().contains("EGG"))) { + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + event.setCancelled(true); + JugadorPaintball player = partida.getJugador(jugador.getName()); + + if(player.getKillstreak("fury") == null) { + if(!UtilidadesOtros.isLegacy()) { + if(player.getSelectedHat().equals("chicken_hat")) { + jugador.getInventory().removeItem(new ItemStack(Material.EGG,1)); + }else { + jugador.getInventory().removeItem(new ItemStack(Material.SNOWBALL,1)); + } + }else { + if(player.getSelectedHat().equals("chicken_hat")) { + jugador.getInventory().removeItem(new ItemStack(Material.EGG,1)); + }else { + jugador.getInventory().removeItem(new ItemStack(Material.valueOf("SNOW_BALL"),1)); + } + } + } + + FileConfiguration config = plugin.getConfig(); + String[] separados = config.getString("snowballShootSound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separados[0]); + jugador.playSound(jugador.getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados[0]+" &7is not valid.")); + } + + if(player.getSelectedHat().equals("chicken_hat")) { + jugador.launchProjectile(Egg.class, jugador.getLocation().getDirection()); + }else { + jugador.launchProjectile(Snowball.class, jugador.getLocation().getDirection()); + } + + + + Killstreak k = player.getKillstreak("triple_shoot"); + if(k != null) { + Vector direccion = jugador.getLocation().getDirection().clone(); + double anguloEntre = Math.toRadians(10); + + double xFinal = direccion.getX()*Math.cos(anguloEntre)-direccion.getZ()*Math.sin(anguloEntre); + double zFinal = direccion.getX()*Math.sin(anguloEntre)+direccion.getZ()*Math.cos(anguloEntre); + + + direccion = new Vector(xFinal,direccion.getY(),zFinal); + + if(player.getSelectedHat().equals("chicken_hat")) { + jugador.launchProjectile(Egg.class, direccion); + }else { + jugador.launchProjectile(Snowball.class, direccion); + } + + direccion = jugador.getLocation().getDirection().clone(); + + anguloEntre = Math.toRadians(-10); + + xFinal = direccion.getX()*Math.cos(anguloEntre)-direccion.getZ()*Math.sin(anguloEntre); + zFinal = direccion.getX()*Math.sin(anguloEntre)+direccion.getZ()*Math.cos(anguloEntre); + + + direccion = new Vector(xFinal,direccion.getY(),zFinal); + + if(player.getSelectedHat().equals("chicken_hat")) { + jugador.launchProjectile(Egg.class, direccion); + }else { + jugador.launchProjectile(Snowball.class, direccion); + } + } + } + } + } + + } + + @EventHandler + public void lanzarSnowball(ProjectileLaunchEvent event) { + Projectile p = event.getEntity(); + ProjectileSource source = p.getShooter(); + FileConfiguration config = plugin.getConfig(); + if((p.getType().equals(EntityType.SNOWBALL) || p.getType().equals(EntityType.EGG)) && source instanceof Player) { + Player jugador = (Player) source; + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + p.setMetadata("PaintballBattle", new FixedMetadataValue(plugin,"proyectil")); + p.setVelocity(p.getVelocity().multiply(1.25)); + JugadorPaintball player = partida.getJugador(jugador.getName()); + Killstreak k = player.getKillstreak("strong_arm"); + if(k != null) { + p.setVelocity(p.getVelocity().multiply(2)); + } + String particle = config.getString("snowball_particle"); + if(!particle.equals("none")) { + if(!player.getSelectedHat().equals("chicken_hat")) { + CooldownSnowballParticle c = new CooldownSnowballParticle(plugin,p,particle); + c.cooldown(); + } + } + } + } + } + + @EventHandler + public void tirarHuevo(PlayerEggThrowEvent event) { + Egg egg = event.getEgg(); + if(egg.hasMetadata("PaintballBattle")) { + event.setHatching(false); + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/PartidaListenerNew.java b/src/main/java/pb/ajneb97/managers/PartidaListenerNew.java new file mode 100644 index 0000000..32e9efe --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/PartidaListenerNew.java @@ -0,0 +1,26 @@ +package pb.ajneb97.managers; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; + +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.juego.Partida; + +public class PartidaListenerNew implements Listener{ + + PaintballBattle plugin; + public PartidaListenerNew(PaintballBattle plugin) { + this.plugin = plugin; + } + + @EventHandler + public void alCambiarDeMano(PlayerSwapHandItemsEvent event) { + Player jugador = event.getPlayer(); + Partida partida = plugin.getPartidaJugador(jugador.getName()); + if(partida != null) { + event.setCancelled(true); + } + } +} diff --git a/src/main/java/pb/ajneb97/managers/PartidaManager.java b/src/main/java/pb/ajneb97/managers/PartidaManager.java new file mode 100644 index 0000000..7cba7da --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/PartidaManager.java @@ -0,0 +1,923 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Random; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Firework; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.FireworkMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Effect; +import org.bukkit.FireworkEffect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.FireworkEffect.Type; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; + +import pb.ajneb97.PaintballBattle; +import pb.ajneb97.api.Hat; +import pb.ajneb97.api.PaintballAPI; +import pb.ajneb97.api.Perk; +import pb.ajneb97.database.JugadorDatos; +import pb.ajneb97.database.MySQL; +import pb.ajneb97.juego.Equipo; +import pb.ajneb97.juego.EstadoPartida; +import pb.ajneb97.juego.JugadorPaintball; +import pb.ajneb97.juego.Partida; +import pb.ajneb97.lib.titleapi.TitleAPI; +import pb.ajneb97.utils.UtilidadesItems; +import pb.ajneb97.utils.UtilidadesOtros; +import pb.ajneb97.utils.ValueOfPatch; + +public class PartidaManager { + + @SuppressWarnings("deprecation") + public static void jugadorEntra(Partida partida,Player jugador,PaintballBattle plugin) { + JugadorPaintball jugadorPaintball = new JugadorPaintball(jugador); + FileConfiguration messages = plugin.getMessages(); + partida.agregarJugador(jugadorPaintball); + ArrayList jugadores = partida.getJugadores(); + for(int i=0;i= partida.getCantidadMinimaJugadores() + && partida.getEstado().equals(EstadoPartida.ESPERANDO)) { + cooldownIniciarPartida(partida,plugin); + } + } + + @SuppressWarnings("deprecation") + public static void jugadorSale(Partida partida,Player jugador,boolean finalizaPartida, + PaintballBattle plugin,boolean cerrandoServer) { + JugadorPaintball jugadorPaintball = partida.getJugador(jugador.getName()); + FileConfiguration messages = plugin.getMessages(); + ItemStack[] inventarioGuardado = jugadorPaintball.getGuardados().getInventarioGuardado(); + ItemStack[] equipamientoGuardado = jugadorPaintball.getGuardados().getEquipamientoGuardado(); + GameMode gamemodeGuardado = jugadorPaintball.getGuardados().getGamemodeGuardado(); + float xpGuardada = jugadorPaintball.getGuardados().getXPGuardada(); + int levelGuardado = jugadorPaintball.getGuardados().getLevelGuardado(); + int hambreGuardada = jugadorPaintball.getGuardados().getHambreGuardada(); + double vidaGuardada = jugadorPaintball.getGuardados().getVidaGuardada(); + double maxVidaGuardada = jugadorPaintball.getGuardados().getMaxVidaGuardada(); + boolean allowFligth = jugadorPaintball.getGuardados().isAllowFlight(); + boolean isFlying = jugadorPaintball.getGuardados().isFlying(); + + partida.removerJugador(jugador.getName()); + + if(!finalizaPartida) { + ArrayList jugadores = partida.getJugadores(); + for(int i=0;i worlds = config.getStringList("broadcast_starting_arena.worlds"); + for(String world : worlds) { + for(Player player : Bukkit.getOnlinePlayers()) { + if(player.getWorld().getName().equals(world)) { + player.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', messages.getString("arenaStartingBroadcast") + .replace("%arena%", partida.getNombre()))); + } + } + } + } + } + + public static void iniciarPartida(Partida partida,PaintballBattle plugin) { + + partida.setEstado(EstadoPartida.JUGANDO); + + FileConfiguration messages = plugin.getMessages(); + FileConfiguration config = plugin.getConfig(); + //String prefix = ChatColor.translateAlternateColorCodes('&', messages.getString("prefix"))+" "; + // Scoreboards für alle Spieler anzeigen + + + if(plugin.getConfig().getString("choose_team_system").equals("true")) { + setTeams(partida); + }else { + setTeamsAleatorios(partida); + } + + darItems(partida,plugin.getConfig(),plugin.getShop(),plugin.getMessages()); + teletransportarJugadores(partida); + setVidas(partida,plugin.getShop()); + + ArrayList jugadores = partida.getJugadores(); + String[] separados = config.getString("startGameSound").split(";"); + Sound sound = null; + float volume = 0; + float pitch = 0; + try { + sound = ValueOfPatch.valueOf(separados[0]); + volume = Float.valueOf(separados[1]); + pitch = Float.valueOf(separados[2]); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados[0]+" &7is not valid.")); + sound = null; + } + for(int i=0;i jugadoresTeam1 = partida.getTeam1().getJugadores(); + for(JugadorPaintball j : jugadoresTeam1) { + //comprobar perk extralives + int nivelExtraLives = PaintballAPI.getPerkLevel(j.getJugador(), "extra_lives"); + if(nivelExtraLives != 0) { + String linea = shop.getStringList("perks_upgrades.extra_lives").get(nivelExtraLives-1); + String[] sep = linea.split(";"); + int cantidad = Integer.valueOf(sep[0]); + partida.getTeam1().aumentarVidas(cantidad); + } + } + ArrayList jugadoresTeam2 = partida.getTeam2().getJugadores(); + for(JugadorPaintball j : jugadoresTeam2) { + //comprobar perk extralives + int nivelExtraLives = PaintballAPI.getPerkLevel(j.getJugador(), "extra_lives"); + if(nivelExtraLives != 0) { + String linea = shop.getStringList("perks_upgrades.extra_lives").get(nivelExtraLives-1); + String[] sep = linea.split(";"); + int cantidad = Integer.valueOf(sep[0]); + partida.getTeam2().aumentarVidas(cantidad); + } + } + } + + public static void killstreakInstantanea(String key,Player jugador,Partida partida,PaintballBattle plugin) { + FileConfiguration config = plugin.getConfig(); + if(key.equalsIgnoreCase("3_lives")) { + Equipo equipo = partida.getEquipoJugador(jugador.getName()); + equipo.aumentarVidas(3); + }else if(key.equalsIgnoreCase("teleport")) { + JugadorPaintball j = partida.getJugador(jugador.getName()); + if(j.getDeathLocation() != null) { + j.getJugador().teleport(j.getDeathLocation()); + }else { + Equipo equipo = partida.getEquipoJugador(jugador.getName()); + j.getJugador().teleport(equipo.getSpawn()); + } + }else if(key.equalsIgnoreCase("more_snowballs")) { + JugadorPaintball j = partida.getJugador(jugador.getName()); + int snowballs = Integer.valueOf(config.getString("killstreaks_items."+key+".snowballs")); + ItemStack item = null; + if(!UtilidadesOtros.isLegacy()) { + if(j.getSelectedHat().equals("chicken_hat")) { + item = new ItemStack(Material.EGG,1); + }else { + item = new ItemStack(Material.SNOWBALL,1); + } + + }else { + if(j.getSelectedHat().equals("chicken_hat")) { + item = new ItemStack(Material.EGG,1); + }else { + item = new ItemStack(Material.valueOf("SNOW_BALL"),1); + } + + } + for(int i=0;i entidades = jugador.getWorld().getNearbyEntities(jugador.getLocation(), radio, radio, radio); + for(Entity e : entidades) { + if(e != null && e.getType().equals(EntityType.PLAYER)) { + Player player = (Player) e; + JugadorPaintball jugadorDañado = partida.getJugador(player.getName()); + if(jugadorDañado != null) { + PartidaManager.muereJugador(partida, jugadorAtacante, jugadorDañado, plugin, true, false); + } + } + } + }else if(key.equalsIgnoreCase("nuke")) { + partida.setEnNuke(true); + JugadorPaintball jugadorAtacante = partida.getJugador(jugador.getName()); + CooldownKillstreaks c = new CooldownKillstreaks(plugin); + String[] separados1 = config.getString("killstreaks_items."+key+".activateSound").split(";"); + String[] separados2 = config.getString("killstreaks_items."+key+".finalSound").split(";"); + c.cooldownNuke(jugadorAtacante, partida, separados1, separados2); + } + } + + @SuppressWarnings("unchecked") + public static void setTeamsAleatorios(Partida partida) { + ArrayList jugadores = partida.getJugadores(); + ArrayList jugadoresCopia = (ArrayList) partida.getJugadores().clone(); + //Si son 4 se seleccionan 2, Si son 5 tambien 2, Si son 6, 3, Si son 7, tambien 3 + Random r = new Random(); + int num = jugadores.size()/2; + for(int i=0;i jugadores = partida.getJugadores(); + for(JugadorPaintball j : jugadores) { + partida.getEquipoJugador(j.getJugador().getName()).removerJugador(j.getJugador().getName()); + String preferenciaTeam = j.getPreferenciaTeam(); + if(preferenciaTeam == null) { + if(partida.puedeSeleccionarEquipo(partida.getTeam1().getTipo())) { + j.setPreferenciaTeam(partida.getTeam1().getTipo()); + }else { + j.setPreferenciaTeam(partida.getTeam2().getTipo()); + } + } + preferenciaTeam = j.getPreferenciaTeam(); + if(preferenciaTeam.equals(partida.getTeam2().getTipo())) { + partida.getTeam2().agregarJugador(j); + }else { + partida.getTeam1().agregarJugador(j); + } + } + + //Balanceo final + Equipo equipo1 = partida.getTeam1(); + Equipo equipo2 = partida.getTeam2(); + for(JugadorPaintball j : jugadores) { + Equipo equipo = partida.getEquipoJugador(j.getJugador().getName()); + if(equipo1.getCantidadJugadores() > equipo2.getCantidadJugadores()+1) { + if(equipo.getTipo().equals(equipo1.getTipo())) { + //Mover al jugador del equipo1 al equipo2 + equipo1.removerJugador(j.getJugador().getName()); + equipo2.agregarJugador(j); + } + }else if(equipo2.getCantidadJugadores() > equipo1.getCantidadJugadores()+1) { + if(equipo.getTipo().equals(equipo2.getTipo())) { + //Mover al jugador del equipo2 al equipo1 + equipo2.removerJugador(j.getJugador().getName()); + equipo1.agregarJugador(j); + } + } + } + } + + public static void darItems(Partida partida,FileConfiguration config,FileConfiguration shop,FileConfiguration messages) { + ArrayList jugadores = partida.getJugadores(); + for(JugadorPaintball j : jugadores) { + Player p = j.getJugador(); + p.getInventory().setItem(8, null); + + Equipo equipo = partida.getEquipoJugador(p.getName()); + if(config.contains("teams."+equipo.getTipo())) { + darEquipamientoJugador(p,Integer.valueOf(config.getString("teams."+equipo.getTipo()+".color"))); + }else { + darEquipamientoJugador(p,0); + } + //comprobar perk initial killcoins + int nivelInitialKillcoins = PaintballAPI.getPerkLevel(j.getJugador(), "initial_killcoins"); + if(nivelInitialKillcoins != 0) { + String linea = shop.getStringList("perks_upgrades.initial_killcoins").get(nivelInitialKillcoins-1); + String[] sep = linea.split(";"); + int cantidad = Integer.valueOf(sep[0]); + j.agregarCoins(cantidad); + } + UtilidadesItems.crearItemKillstreaks(j,config); + ponerHat(partida,j,config,messages); + setBolasDeNieve(j,config); + } + } + + @SuppressWarnings("unchecked") + public static void ponerHat(Partida partida,JugadorPaintball jugador,FileConfiguration config,FileConfiguration messages) { + ArrayList hats = PaintballAPI.getHats(jugador.getJugador()); + for(Hat h : hats) { + if(h.isSelected()) { + jugador.setSelectedHat(h.getName()); + ItemStack item = UtilidadesItems.crearItem(config, "hats_items."+h.getName()); + ItemMeta meta = item.getItemMeta(); + meta.setLore(null); + item.setItemMeta(meta); + if(config.contains("hats_items."+h.getName()+".skull_id")) { + String id = config.getString("hats_items."+h.getName()+".skull_id"); + String textura = config.getString("hats_items."+h.getName()+".skull_texture"); + item = UtilidadesItems.getCabeza(item, id, textura); + } + jugador.getJugador().getEquipment().setHelmet(item); + + if(h.getName().equals("speed_hat")) { + jugador.getJugador().addPotionEffect(new PotionEffect(PotionEffectType.SPEED,9999999,0,false,false)); + }else if(h.getName().equals("present_hat")) { + Equipo equipo = partida.getEquipoJugador(jugador.getJugador().getName()); + ArrayList jugadoresCopy = (ArrayList) equipo.getJugadores().clone(); + jugadoresCopy.remove(jugador); + if(!jugadoresCopy.isEmpty()) { + Random r = new Random(); + int pos = r.nextInt(jugadoresCopy.size()); + String jName = jugadoresCopy.get(pos).getJugador().getName(); + JugadorPaintball j = partida.getJugador(jName); + j.agregarCoins(3); + jugador.getJugador().sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("presentHatGive").replace("%player%", j.getJugador().getName()))); + j.getJugador().sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("presentHatReceive").replace("%player%", jugador.getJugador().getName()))); + } + } + return; + } + } + } + + public static void darEquipamientoJugador(Player jugador,int color) { + ItemStack item = new ItemStack(Material.LEATHER_HELMET,1); + LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); + meta.setColor(Color.fromRGB(color)); + item.setItemMeta(meta); + jugador.getInventory().setHelmet(item); + + item = new ItemStack(Material.LEATHER_CHESTPLATE,1); + meta = (LeatherArmorMeta) item.getItemMeta(); + meta.setColor(Color.fromRGB(color)); + item.setItemMeta(meta); + jugador.getInventory().setChestplate(item); + + item = new ItemStack(Material.LEATHER_LEGGINGS,1); + meta = (LeatherArmorMeta) item.getItemMeta(); + meta.setColor(Color.fromRGB(color)); + item.setItemMeta(meta); + jugador.getInventory().setLeggings(item); + + item = new ItemStack(Material.LEATHER_BOOTS,1); + meta = (LeatherArmorMeta) item.getItemMeta(); + meta.setColor(Color.fromRGB(color)); + item.setItemMeta(meta); + jugador.getInventory().setBoots(item); + } + + public static void setBolasDeNieve(JugadorPaintball j,FileConfiguration config) { + for(int i=0;i<=7;i++) { + j.getJugador().getInventory().setItem(i, null); + } + for(int i=9;i<=35;i++) { + j.getJugador().getInventory().setItem(i, null); + } + int amount = Integer.valueOf(config.getString("initial_snowballs")); + ItemStack item = null; + if(!UtilidadesOtros.isLegacy()) { + if(j.getSelectedHat().equals("chicken_hat")) { + item = new ItemStack(Material.EGG,1); + }else { + item = new ItemStack(Material.SNOWBALL,1); + } + }else { + if(j.getSelectedHat().equals("chicken_hat")) { + item = new ItemStack(Material.EGG,1); + }else { + item = new ItemStack(Material.valueOf("SNOW_BALL"),1); + } + } + + for(int i=0;i jugadores) { + for(JugadorPaintball j : jugadores) { + Firework fw = (Firework) j.getJugador().getWorld().spawnEntity(j.getJugador().getLocation(), EntityType.FIREWORK_ROCKET); + FireworkMeta fwm = fw.getFireworkMeta(); + Type type = Type.BALL; + Color c1 = Color.RED; + Color c2 = Color.AQUA; + FireworkEffect efecto = FireworkEffect.builder().withColor(c1).withFade(c2).with(type).build(); + fwm.addEffect(efecto); + fwm.setPower(2); + fw.setFireworkMeta(fwm); + } + } + + public static void teletransportarJugadores(Partida partida) { + ArrayList jugadores = partida.getJugadores(); + for(JugadorPaintball j : jugadores) { + Player p = j.getJugador(); + Equipo equipo = partida.getEquipoJugador(p.getName()); + p.teleport(equipo.getSpawn()); + } + } + + public static void iniciarFaseFinalizacion(Partida partida,PaintballBattle plugin) { + partida.setEstado(EstadoPartida.TERMINANDO); + Equipo ganador = partida.getGanador(); + FileConfiguration messages = plugin.getMessages(); + FileConfiguration config = plugin.getConfig(); + + String nameTeam1 = config.getString("teams."+partida.getTeam1().getTipo()+".name"); + String nameTeam2 = config.getString("teams."+partida.getTeam2().getTipo()+".name"); + + String status = ""; + if(ganador == null) { + //empate + status = messages.getString("gameFinishedTieStatus"); + }else { + String ganadorTexto = plugin.getConfig().getString("teams."+ganador.getTipo()+".name"); + status = messages.getString("gameFinishedWinnerStatus").replace("%winner_team%", ganadorTexto); + } + + ArrayList jugadoresKillsOrd = partida.getJugadoresKills(); + String top1 = ""; + String top2 = ""; + String top3 = ""; + int top1Kills = 0; + int top2Kills = 0; + int top3Kills = 0; + + if(jugadoresKillsOrd.size() == 2) { + top1 = jugadoresKillsOrd.get(0).getJugador().getName(); + top1Kills = jugadoresKillsOrd.get(0).getAsesinatos(); + top2 = jugadoresKillsOrd.get(1).getJugador().getName(); + top2Kills = jugadoresKillsOrd.get(1).getAsesinatos(); + top3 = messages.getString("topKillsNone"); + }else if(jugadoresKillsOrd.size() == 1) { + top1 = jugadoresKillsOrd.get(0).getJugador().getName(); + top1Kills = jugadoresKillsOrd.get(0).getAsesinatos(); + top3 = messages.getString("topKillsNone"); + top2 = messages.getString("topKillsNone"); + }else { + top1 = jugadoresKillsOrd.get(0).getJugador().getName(); + top1Kills = jugadoresKillsOrd.get(0).getAsesinatos(); + top2 = jugadoresKillsOrd.get(1).getJugador().getName(); + top3 = jugadoresKillsOrd.get(2).getJugador().getName(); + top2Kills = jugadoresKillsOrd.get(1).getAsesinatos(); + top3Kills = jugadoresKillsOrd.get(2).getAsesinatos(); + } + ArrayList jugadores = partida.getJugadores(); + List msg = messages.getStringList("gameFinished"); + for(JugadorPaintball j : jugadores) { + for(int i=0;i(),new ArrayList())); + } + JugadorDatos jugador = plugin.getJugador(j.getJugador().getName()); + if(partida.getEquipoJugador(j.getJugador().getName()).equals(ganador)) { + jugador.aumentarWins(); + TitleAPI.sendTitle(j.getJugador(), 10, 40, 10, messages.getString("winnerTitleMessage"), ""); + }else if(ganador == null) { + jugador.aumentarTies(); + TitleAPI.sendTitle(j.getJugador(), 10, 40, 10, messages.getString("tieTitleMessage"), ""); + }else { + jugador.aumentarLoses(); + TitleAPI.sendTitle(j.getJugador(), 10, 40, 10, messages.getString("loserTitleMessage"), ""); + } + + jugador.aumentarKills(j.getAsesinatos()); + } + j.getJugador().closeInventory(); + j.getJugador().getInventory().clear(); + + + if(config.getString("leave_item_enabled").equals("true")) { + ItemStack item = UtilidadesItems.crearItem(config, "leave_item"); + j.getJugador().getInventory().setItem(8, item); + } + if(config.getString("play_again_item_enabled").equals("true")) { + ItemStack item = UtilidadesItems.crearItem(config, "play_again_item"); + j.getJugador().getInventory().setItem(7, item); + } + + if(config.getString("rewards_executed_after_teleport").equals("false")) { + if(ganador != null) { + if(ganador.getTipo().equals(equipoJugador.getTipo())) { + List commands = config.getStringList("winners_command_rewards"); + ejecutarComandosRewards(commands,j); + }else { + List commands = config.getStringList("losers_command_rewards"); + ejecutarComandosRewards(commands,j); + } + }else { + List commands = config.getStringList("tie_command_rewards"); + ejecutarComandosRewards(commands,j); + } + } + } + + int time = Integer.valueOf(config.getString("arena_ending_phase_cooldown")); + CooldownManager c = new CooldownManager(plugin); + c.cooldownFaseFinalizacion(partida,time,ganador); + } + + public static void ejecutarComandosRewards(List commands,JugadorPaintball j) { + CommandSender console = Bukkit.getServer().getConsoleSender(); + for(int i=0;i jugadores = partida.getJugadores(); + // Scoreboards für alle Spieler entfernen + for(JugadorPaintball j : jugadores) { + String tipoFin = ""; + if(ganadorEquipo != null) { + Equipo equipoJugador = partida.getEquipoJugador(j.getJugador().getName()); + if(ganadorEquipo.getTipo().equals(equipoJugador.getTipo())) { + tipoFin = "ganador"; + }else { + tipoFin = "perdedor"; + } + }else { + tipoFin = "empate"; + } + jugadorSale(partida, j.getJugador(),true,plugin,cerrandoServer); + if(config.getString("rewards_executed_after_teleport").equals("true") && !cerrandoServer) { + if(tipoFin.equals("ganador")) { + List commands = config.getStringList("winners_command_rewards"); + ejecutarComandosRewards(commands,j); + }else if(tipoFin.equals("perdedor")) { + List commands = config.getStringList("losers_command_rewards"); + ejecutarComandosRewards(commands,j); + }else { + List commands = config.getStringList("tie_command_rewards"); + ejecutarComandosRewards(commands,j); + } + } + } + partida.getTeam1().setVidas(0); + partida.getTeam2().setVidas(0); + partida.setEnNuke(false); + partida.modificarTeams(config); + + partida.setEstado(EstadoPartida.ESPERANDO); + } + + public static void muereJugador(Partida partida,JugadorPaintball jugadorAtacante,final JugadorPaintball jugadorDañado,PaintballBattle plugin,boolean lightning,boolean nuke) { + if(jugadorDañado.haSidoAsesinadoRecientemente()) { + return; + } + if(jugadorDañado.getSelectedHat().equals("guardian_hat") && jugadorDañado.isEfectoHatActivado()) { + return; + } + if(jugadorDañado.getSelectedHat().equals("protector_hat")) { + Random r = new Random(); + int num = r.nextInt(100); + if(num >= 80) { + return; + } + } + + Equipo equipoDañado = partida.getEquipoJugador(jugadorDañado.getJugador().getName()); + Equipo equipoAtacante = partida.getEquipoJugador(jugadorAtacante.getJugador().getName()); + if(equipoDañado.equals(equipoAtacante)) { + return; + } + + if(lightning) { + jugadorDañado.getJugador().getWorld().strikeLightningEffect(jugadorDañado.getJugador().getLocation()); + } + FileConfiguration messages = plugin.getMessages(); + FileConfiguration config = plugin.getConfig(); + jugadorDañado.aumentarMuertes(); + jugadorDañado.setDeathLocation(jugadorDañado.getJugador().getLocation().clone()); + jugadorDañado.getJugador().sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("killedBy").replace("%player%", jugadorAtacante.getJugador().getName()))); + String[] separados = config.getString("killedBySound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separados[0]); + jugadorDañado.getJugador().playSound(jugadorDañado.getJugador().getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados[0]+" &7is not valid.")); + } + jugadorDañado.setAsesinadoRecientemente(true); + jugadorDañado.setLastKilledBy(jugadorAtacante.getJugador().getName()); + equipoDañado.disminuirVidas(1); + + Equipo equipo = partida.getEquipoJugador(jugadorDañado.getJugador().getName()); + if(jugadorDañado.getSelectedHat().equals("explosive_hat")) { + Random r = new Random(); + int num = r.nextInt(100); + if(num >= 80) { + if(Bukkit.getVersion().contains("1.8")) { + jugadorDañado.getJugador().getWorld().playEffect(jugadorDañado.getJugador().getLocation(), Effect.valueOf("EXPLOSION_LARGE"), 2); + }else { + jugadorDañado.getJugador().getWorld().spawnParticle(Particle.EXPLOSION,jugadorDañado.getJugador().getLocation(),2); + } + separados = config.getString("explosiveHatSound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separados[0]); + jugadorDañado.getJugador().getWorld().playSound(jugadorDañado.getJugador().getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados[0]+" &7is not valid.")); + } + Collection entidades = jugadorDañado.getJugador().getWorld().getNearbyEntities(jugadorDañado.getJugador().getLocation(), 5, 5, 5); + for(Entity e : entidades) { + if(e != null && e.getType().equals(EntityType.PLAYER)) { + Player player = (Player) e; + JugadorPaintball jugadorDañado2 = partida.getJugador(player.getName()); + if(jugadorDañado2 != null) { + PartidaManager.muereJugador(partida, jugadorDañado, jugadorDañado2, plugin, false, false); + } + } + } + } + } + jugadorDañado.getJugador().teleport(equipo.getSpawn()); + if(!UtilidadesOtros.isLegacy()) { + if(jugadorDañado.getSelectedHat().equals("chicken_hat")) { + jugadorDañado.getJugador().getInventory().removeItem(new ItemStack(Material.EGG)); + }else { + jugadorDañado.getJugador().getInventory().removeItem(new ItemStack(Material.SNOWBALL)); + } + }else { + if(jugadorDañado.getSelectedHat().equals("chicken_hat")) { + jugadorDañado.getJugador().getInventory().removeItem(new ItemStack(Material.EGG)); + }else { + jugadorDañado.getJugador().getInventory().removeItem(new ItemStack(Material.valueOf("SNOW_BALL"))); + } + } + PartidaManager.setBolasDeNieve(jugadorDañado,config); + + jugadorAtacante.aumentarAsesinatos(); + int cantidadCoinsGanados = UtilidadesOtros.coinsGanados(jugadorAtacante.getJugador(), config); + int nivelExtraKillCoins = PaintballAPI.getPerkLevel(jugadorAtacante.getJugador(), "extra_killcoins"); + if(nivelExtraKillCoins != 0) { + String linea = plugin.getShop().getStringList("perks_upgrades.extra_killcoins").get(nivelExtraKillCoins-1); + String[] sep = linea.split(";"); + int cantidad = Integer.valueOf(sep[0]); + cantidadCoinsGanados = cantidadCoinsGanados+cantidad; + } + String lastKilledBy = jugadorAtacante.getLastKilledBy(); + if(lastKilledBy != null && lastKilledBy.equals(jugadorDañado.getJugador().getName())) { + cantidadCoinsGanados = cantidadCoinsGanados+1; + } + jugadorAtacante.agregarCoins(cantidadCoinsGanados); + UtilidadesItems.crearItemKillstreaks(jugadorAtacante,config); + + if(nuke) { + String equipoAtacanteName = config.getString("teams."+equipoAtacante.getTipo()+".name"); + String equipoDañadoName = config.getString("teams."+equipoDañado.getTipo()+".name"); + for(JugadorPaintball j : partida.getJugadores()) { + if(!j.getJugador().getName().equals(jugadorAtacante.getJugador().getName())) { + j.getJugador().sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("nukeKillMessage").replace("%team_player1%", equipoDañadoName) + .replace("%player1%", jugadorDañado.getJugador().getName()).replace("%team_player2%", equipoAtacanteName) + .replace("%player2%", jugadorAtacante.getJugador().getName()))); + } + } + } + jugadorAtacante.getJugador().sendMessage(ChatColor.translateAlternateColorCodes('&', messages.getString("kill").replace("%player%", jugadorDañado.getJugador().getName()))); + if(!nuke) { + separados = config.getString("killSound").split(";"); + try { + Sound sound = ValueOfPatch.valueOf(separados[0]); + jugadorAtacante.getJugador().playSound(jugadorAtacante.getJugador().getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2])); + }catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', PaintballBattle.prefix+"&7Sound Name: &c"+separados[0]+" &7is not valid.")); + } + } + + + int snowballs = Integer.valueOf(config.getString("snowballs_per_kill")); + if(!UtilidadesOtros.isLegacy()) { + if(jugadorAtacante.getSelectedHat().equals("chicken_hat")) { + jugadorAtacante.getJugador().getInventory().addItem(new ItemStack(Material.EGG,snowballs)); + }else { + jugadorAtacante.getJugador().getInventory().addItem(new ItemStack(Material.SNOWBALL,snowballs)); + } + + }else { + if(jugadorAtacante.getSelectedHat().equals("chicken_hat")) { + jugadorAtacante.getJugador().getInventory().addItem(new ItemStack(Material.EGG,snowballs)); + }else { + jugadorAtacante.getJugador().getInventory().addItem(new ItemStack(Material.valueOf("SNOW_BALL"),snowballs)); + } + + } + + if(equipoDañado.getVidas() <= 0) { + //terminar partida + PartidaManager.iniciarFaseFinalizacion(partida, plugin); + return; + } + + int invulnerability = Integer.valueOf(config.getString("respawn_invulnerability")); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public void run() { + jugadorDañado.setAsesinadoRecientemente(false); + } + }, invulnerability*20L); + } + + public static Partida getPartidaDisponible(PaintballBattle plugin) { + ArrayList partidas = plugin.getPartidas(); + ArrayList disponibles = new ArrayList(); + for(int i=0;i boards = new HashMap<>(); + public ScoreboardAdmin(PaintballBattle plugin){ + this.plugin = plugin; + } + + public int getTaskID() { + return this.taskID; + } + + public void crearScoreboards() { + BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); + final FileConfiguration messages = plugin.getMessages(); + final FileConfiguration config = plugin.getConfig(); + taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() { + public void run() { + for(Player player : Bukkit.getOnlinePlayers()) { + actualizarScoreboard(player,messages,config); + } + } + },0, 20L); + } + + protected void actualizarScoreboard(final Player player,final FileConfiguration messages,final FileConfiguration config) { + Partida partida = plugin.getPartidaJugador(player.getName()); + FastBoard board = boards.get(player.getUniqueId()); + if(partida != null) { + JugadorPaintball jugador = partida.getJugador(player.getName()); + if(board == null) { + board = new FastBoard(player); + board.updateTitle(ChatColor.translateAlternateColorCodes('&',messages.getString("gameScoreboardTitle"))); + boards.put(player.getUniqueId(), board); + } + + List lista = messages.getStringList("gameScoreboardBody"); + Equipo equipo1 = partida.getTeam1(); + Equipo equipo2 = partida.getTeam2(); + String equipo1Nombre = config.getString("teams."+equipo1.getTipo()+".name"); + String equipo2Nombre = config.getString("teams."+equipo2.getTipo()+".name"); + + for(int i=0;i lineas = messages.getStringList("topHologramFormat"); + + hologram.setDefaultVisibleState(true); + //this.hologram.getVisibilitySettings().setGlobalVisibility(VisibilitySettings.Visibility.VISIBLE); + + String typeName = ""; + String periodName = ""; + if (type.equals("kills")) { + typeName = messages.getString("topHologramTypeKills"); + } else { + typeName = messages.getString("topHologramTypeWins"); + } + if (period.equals("monthly")) { + periodName = messages.getString("topHologramPeriodMonthly"); + } else if (period.equals("weekly")) { + periodName = messages.getString("topHologramPeriodWeekly"); + } else { + periodName = messages.getString("topHologramPeriodGlobal"); + } + + final String lineaMessage = messages.getString("topHologramScoreboardLine"); + for (int i = 0; i < lineas.size(); i++) { + String linea = lineas.get(i).replace("%type%", typeName).replace("%period%", periodName); + if (linea.contains("%scoreboard_lines%")) { + if (MySQL.isEnabled(config) && !period.equals("global")) { + UtilidadesHologramas.getTopPlayersSQL(plugin, type, period, new MySQLCallback() { + @Override + public void alTerminar(ArrayList playersList) { + for (int c = 0; c < topPlayersMax; c++) { + int num = c + 1; + try { + String[] separados = playersList.get(c).split(";"); + DHAPI.addHologramLine(hologram,ChatColor.translateAlternateColorCodes('&', lineaMessage + .replace("%position%", String.valueOf(num)) + .replace("%name%", separados[0]) + .replace("%points%", separados[1]))); + } catch (Exception e) { + break; + } + } + } + }); + } else { + UtilidadesHologramas.getTopPlayers(plugin, plugin.getJugadores(), type, new MySQLCallback() { + @Override + public void alTerminar(ArrayList playersList) { + for (int c = 0; c < topPlayersMax; c++) { + int num = c + 1; + try { + String[] separados = playersList.get(c).split(";"); + DHAPI.addHologramLine(hologram,(ChatColor.translateAlternateColorCodes('&', lineaMessage + .replace("%position%", String.valueOf(num)) + .replace("%name%", separados[0]) + .replace("%points%", separados[1])))); + } catch (Exception e) { + break; + } + } + } + }); + } + } else { + DHAPI.addHologramLine(hologram, ChatColor.translateAlternateColorCodes('&', linea)); + //hologram.getLines().appendText(ChatColor.translateAlternateColorCodes('&', linea)); + } + } + } + + public void actualizar(PaintballBattle plugin) { + //Location loc = this.hologram.getPosition().toLocation(); + Location loc = this.hologram.getLocation(); + removeHologram(); + loc.setY(yOriginal); + Location nuevaLoc = loc.clone(); + nuevaLoc.setY(nuevaLoc.getY() + UtilidadesHologramas.determinarY(nuevaLoc, UtilidadesHologramas.getCantidadLineasHolograma(plugin)) + 1.4); + //this.hologram = HolographicDisplaysAPI.get(plugin).createHologram(nuevaLoc); + this.hologram = DHAPI.createHologram(name,nuevaLoc); + spawnHologram(plugin); + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } + + public Hologram getHologram() { + return hologram; + } +} \ No newline at end of file diff --git a/src/main/java/pb/ajneb97/managers/TopHologramAdmin.java b/src/main/java/pb/ajneb97/managers/TopHologramAdmin.java new file mode 100644 index 0000000..b3da137 --- /dev/null +++ b/src/main/java/pb/ajneb97/managers/TopHologramAdmin.java @@ -0,0 +1,40 @@ +package pb.ajneb97.managers; + +import java.util.ArrayList; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.scheduler.BukkitScheduler; + +import pb.ajneb97.PaintballBattle; + +public class TopHologramAdmin { + + int taskID; + private PaintballBattle plugin; + public TopHologramAdmin(PaintballBattle plugin){ + this.plugin = plugin; + } + + public int getTaskID() { + return this.taskID; + } + + public void actualizarHologramas() { + FileConfiguration config = plugin.getConfig(); + long ticks = Long.valueOf(config.getString("top_hologram_update_time"))*20; + BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); + taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() { + public void run() { + ejecutarActualizarHologramas(); + } + },ticks, ticks); + } + + protected void ejecutarActualizarHologramas() { + ArrayList hologramas = plugin.getTopHologramas(); + for(int i=0;i