package de.steamwar.fightsystem.winconditions; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.utils.Region; import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityExplodeEvent; import java.util.EnumSet; public class WinconditionPercentSystem extends ListenerWincondition { private static double bluePercent = 0D; private static double redPercent = 0D; private static int blueDestroyedBlocks; private static int redDestroyedBlocks; private static final int schematicSize = Math.abs(Config.SchemsizeX * Config.SchemsizeY * Config.SchemsizeZ); public WinconditionPercentSystem() { super(Config.PercentSystem, EnumSet.of(FightState.RUNNING, FightState.ENTERN)); } @EventHandler public void handleEntityExplode(EntityExplodeEvent event) { if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return; Entity entity = event.getEntity(); //Team Blue if(Region.isInRange(entity.getLocation(), Config.TeamBlueCornerX, Config.TeamBlueCornerY, Config.TeamBlueCornerZ, Config.SchemsizeX, Config.SchemsizeY, Config.SchemsizeZ, Config.BorderFromSchematic)){ blueDestroyedBlocks = blueDestroyedBlocks + event.blockList().size(); double doubleBlueDestroyedBlocks = blueDestroyedBlocks; double destroyPercent = doubleBlueDestroyedBlocks * 100 / schematicSize; bluePercent = destroyPercent; if(destroyPercent >= Config.PercentWin) { FightSystem.setSpectateState(Fight.redTeam); } //Team Red }else if(Region.isInRange(entity.getLocation(), Config.TeamRedCornerX, Config.TeamRedCornerY, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeY, Config.SchemsizeZ, Config.BorderFromSchematic)) { redDestroyedBlocks = redDestroyedBlocks + event.blockList().size(); double doubleRedDestroyedBlocks = redDestroyedBlocks; double destroyPercent = doubleRedDestroyedBlocks * 100 / schematicSize; redPercent = destroyPercent; if(destroyPercent >= Config.PercentWin) { FightSystem.setSpectateState(Fight.blueTeam); } } } public static double getBluePercent() { return bluePercent; } public static double getRedPercent() { return redPercent; } }