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<World> coordMundoPlayer1 = new Location<World>(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<World> coordMundoPlayer2 = new Location<World>(NucleusAPI.getWarpService()
.get().getWarp("evento").get().getLocation().get().getExtent(),coordsPlayer1);
private class CancellingTimerTask2 implements Consumer<Task> {
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
<Integer, TorneioPlayers
> playersbata
= new HashMap
<>();
EventoEntrar eventoEntrar = new EventoEntrar();
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;
}
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());
}
}
}