/* This file is a part of the SteamWar software. Copyright (C) 2020 SteamWar.de-Serverteam This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ 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)); } @EventHandler public void handleEntityExplode(EntityExplodeEvent event) { 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.getRedTeam(), "Percent"); } //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.getBlueTeam(), "Percent"); } } } public static double getBluePercent() { return bluePercent; } public static double getRedPercent() { return redPercent; } }