2019-09-05 18:26:13 +02:00
|
|
|
package de.steamwar.fightsystem.winconditions;
|
2019-03-09 19:40:12 +01:00
|
|
|
|
2020-01-11 15:44:40 +01:00
|
|
|
import de.steamwar.fightsystem.Config;
|
2019-09-05 18:26:13 +02:00
|
|
|
import de.steamwar.fightsystem.FightSystem;
|
|
|
|
import de.steamwar.fightsystem.fight.Fight;
|
2020-01-11 12:53:31 +01:00
|
|
|
import de.steamwar.fightsystem.states.FightState;
|
2019-09-05 18:26:13 +02:00
|
|
|
import de.steamwar.fightsystem.utils.Region;
|
2019-03-09 19:40:12 +01:00
|
|
|
import org.bukkit.entity.Entity;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
|
|
|
|
2020-01-11 15:44:40 +01:00
|
|
|
import java.util.EnumSet;
|
|
|
|
|
2019-09-05 18:26:13 +02:00
|
|
|
public class WinconditionPercentSystem extends ListenerWincondition {
|
2019-03-09 19:40:12 +01:00
|
|
|
|
2019-04-14 01:23:46 +02:00
|
|
|
private static double bluePercent = 0D;
|
|
|
|
private static double redPercent = 0D;
|
|
|
|
|
2019-04-05 19:32:59 +02:00
|
|
|
private static int blueDestroyedBlocks;
|
|
|
|
private static int redDestroyedBlocks;
|
2019-03-09 19:40:12 +01:00
|
|
|
|
2020-01-11 15:44:40 +01:00
|
|
|
private static final int schematicSize = Math.abs(Config.SchemsizeX * Config.SchemsizeY * Config.SchemsizeZ);
|
2019-03-09 19:40:12 +01:00
|
|
|
|
2019-04-05 19:32:59 +02:00
|
|
|
public WinconditionPercentSystem() {
|
2020-01-11 15:44:40 +01:00
|
|
|
super(Config.PercentSystem, EnumSet.of(FightState.RUNNING, FightState.ENTERN));
|
2019-04-05 19:32:59 +02:00
|
|
|
}
|
2019-03-09 19:40:12 +01:00
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void handleEntityExplode(EntityExplodeEvent event) {
|
2019-04-23 18:33:18 +02:00
|
|
|
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
|
2019-03-09 19:40:12 +01:00
|
|
|
Entity entity = event.getEntity();
|
|
|
|
|
2019-04-14 01:23:46 +02:00
|
|
|
//Team Blue
|
2019-04-05 19:32:59 +02:00
|
|
|
if(Region.isInRange(entity.getLocation(), Config.TeamBlueCornerX, Config.TeamBlueCornerY, Config.TeamBlueCornerZ, Config.SchemsizeX, Config.SchemsizeY, Config.SchemsizeZ, Config.BorderFromSchematic)){
|
|
|
|
blueDestroyedBlocks = blueDestroyedBlocks + event.blockList().size();
|
2019-04-14 01:23:46 +02:00
|
|
|
double doubleBlueDestroyedBlocks = blueDestroyedBlocks;
|
|
|
|
double destroyPercent = doubleBlueDestroyedBlocks * 100 / schematicSize;
|
|
|
|
bluePercent = destroyPercent;
|
2019-04-05 19:32:59 +02:00
|
|
|
if(destroyPercent >= Config.PercentWin) {
|
2019-09-05 18:26:13 +02:00
|
|
|
FightSystem.setSpectateState(Fight.redTeam);
|
2019-03-09 19:40:12 +01:00
|
|
|
}
|
2019-04-14 01:23:46 +02:00
|
|
|
//Team Red
|
2019-06-05 22:14:27 +02:00
|
|
|
}else if(Region.isInRange(entity.getLocation(), Config.TeamRedCornerX, Config.TeamRedCornerY, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeY, Config.SchemsizeZ, Config.BorderFromSchematic)) {
|
2019-04-05 19:32:59 +02:00
|
|
|
redDestroyedBlocks = redDestroyedBlocks + event.blockList().size();
|
2019-04-14 01:23:46 +02:00
|
|
|
double doubleRedDestroyedBlocks = redDestroyedBlocks;
|
|
|
|
double destroyPercent = doubleRedDestroyedBlocks * 100 / schematicSize;
|
|
|
|
redPercent = destroyPercent;
|
2019-04-05 19:32:59 +02:00
|
|
|
if(destroyPercent >= Config.PercentWin) {
|
2019-09-05 18:26:13 +02:00
|
|
|
FightSystem.setSpectateState(Fight.blueTeam);
|
2019-03-09 19:40:12 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-14 01:23:46 +02:00
|
|
|
public static double getBluePercent() {
|
|
|
|
return bluePercent;
|
|
|
|
}
|
2019-03-09 19:40:12 +01:00
|
|
|
|
2019-04-14 01:23:46 +02:00
|
|
|
public static double getRedPercent() {
|
|
|
|
return redPercent;
|
|
|
|
}
|
2019-03-09 19:40:12 +01:00
|
|
|
}
|