package torneio.torneiopokemon; import com.flowpowered.math.vector.Vector3d; import com.pixelmonmod.pixelmon.api.events.BattleStartedEvent; import com.pixelmonmod.pixelmon.api.events.battles.BattleEndEvent; import io.github.nucleuspowered.nucleus.api.NucleusAPI; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.spongepowered.api.Sponge; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.scheduler.Task; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.MessageChannel; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; import java.util.HashMap; import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; public class EventoBatalha { Configura configs = new Configura(); Vector3d coordsPlayer1 = new Vector3d(configs.getNodes().getNode("Arena", "local1", "x").getDouble(), configs.getNodes().getNode("Arena", "local1", "y").getDouble(), configs.getNodes().getNode("Arena", "local1", "z").getDouble()); Location coordMundoPlayer1 = new Location(NucleusAPI.getWarpService() .get().getWarp("evento").get().getLocation().get().getExtent(),coordsPlayer1); Vector3d coordsPlayer2 = new Vector3d(configs.getNodes().getNode("Arena", "local2", "x").getDouble(), configs.getNodes().getNode("Arena", "local2", "y").getDouble(), configs.getNodes().getNode("Arena", "local2", "z").getDouble()); Location coordMundoPlayer2 = new Location(NucleusAPI.getWarpService() .get().getWarp("evento").get().getLocation().get().getExtent(),coordsPlayer1); private class CancellingTimerTask2 implements Consumer { private int seconds = 5; @Override public void accept(Task task) { if(seconds == 5) { MessageChannel.world(NucleusAPI.getWarpService().get().getWarp("evento").get().getLocation().get().getExtent()) .send(Text.of("Duelo iniciado\n" + getSorteado1().getName() + " vs " + getSorteado2() + "\n" + "5 segundos para iniciar a batalha")); } seconds--; if(seconds == 0){ getSorteado1().setLocation(coordMundoPlayer1); getSorteado2().setLocation(coordMundoPlayer2); task.cancel(); } } } private static boolean eventoiniciado = false; private static boolean camaroteDisponivel = false; public static void setCamaroteDisponivel(boolean camaroteDisponivel1){ camaroteDisponivel = camaroteDisponivel1; } public int valorPlayers = 1; public static void setEventoIniciado(boolean eventoiniciado1){ eventoiniciado = eventoiniciado1; } private static Boolean getEventoIniciado(){ return eventoiniciado; } public static HashMap playersbata = new HashMap<>(); EventoEntrar eventoEntrar = new EventoEntrar(); private Random r1 = new Random(); int varivalRandom = r1.nextInt(eventoEntrar.getQuantia())+1; private Player sorteado1; private Player sorteado2; private Player vencendor; public Player getSorteado1() { return sorteado1; } public void setSorteado1(Player sorteado1) { this.sorteado1 = sorteado1; } public Player getSorteado2() { return sorteado2; } public void setSorteado2(Player sorteado2) { this.sorteado2 = sorteado2; } public void setVencendor(Player venceu){ this.vencendor = venceu; } public Player getVencendor(){ return this.vencendor; } public Boolean seTemPlayers(){ int playersRestantes = 0; for (int n6 = 1;n6<=eventoEntrar.getQuantia();n6++){ if(playersbata.get(n6).isParticipanteArena() == true){ playersRestantes = playersRestantes +1; } } if(playersRestantes>=2){ return true; }else{ return false; } } public void sortear(){ verificarPlayers(); boolean playerPronto = false; AtomicInteger playerSelection = new AtomicInteger(); while (playerPronto = false){ if(playersbata.get(varivalRandom).isParticipanteArena() == false){ varivalRandom = r1.nextInt(eventoEntrar.getQuantia())+1; }else{ playerSelection.set(varivalRandom); setSorteado1(playersbata.get(playerSelection).getParticipante()); } } } public void sortear2(){ boolean playerPronto2 = false; AtomicInteger playerSelection2 = new AtomicInteger(); while (playerPronto2 = false){ if(playersbata.get(varivalRandom).isParticipanteArena() == false){ varivalRandom = r1.nextInt(eventoEntrar.getQuantia())+1; }else{ playerSelection2.set(varivalRandom); setSorteado2(playersbata.get(playerSelection2).getParticipante()); } } } private void verificarPlayers(){ for(Player player : Sponge.getServer().getWorld("evento").get().getPlayers()){ valorPlayers++; TorneioPlayers torneioPlayers = new TorneioPlayers(player,true); playersbata.put(valorPlayers,torneioPlayers); setCamaroteDisponivel(true); } } public void IniciarBatalha(Player vencendor){ if(seTemPlayers() == true) { sortear(); sortear2(); Task task = Task.builder().execute(new EventoBatalha.CancellingTimerTask2()) .interval(1, TimeUnit.SECONDS) .name("Task do evento").submit(TorneioPokemon.getInstance()); Sponge.getCommandManager().process(Sponge.getServer().getConsole(), "/pokebattle " + getSorteado1() + " " + getSorteado2()); MessageChannel.TO_PLAYERS.send(Text.of(""+getSorteado1().getName() + " vs " + getSorteado2().getName())); }else{ } } @SubscribeEvent public void fimBatalha(BattleStartedEvent event, BattleEndEvent event2){ if(event.participant1[0].getDisplayName() == getSorteado1().getName() || event.participant2[0].getDisplayName() == getSorteado2().getName()){ setVencendor(event2.bc.get); } } public void batalhaInicia(){ if(getEventoIniciado() == true){ IniciarBatalha(getVencendor()); } } }