2020-08-26 18:24:44 +02:00
|
|
|
/*
|
|
|
|
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 <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
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-06-03 10:19:57 +02:00
|
|
|
super(Config.PercentSystem, EnumSet.of(FightState.RUNNING));
|
2019-04-05 19:32:59 +02:00
|
|
|
}
|
2019-03-09 19:40:12 +01:00
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void handleEntityExplode(EntityExplodeEvent event) {
|
|
|
|
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) {
|
2021-03-10 17:12:24 +01:00
|
|
|
FightSystem.setSpectateState(Fight.getRedTeam(), "Percent");
|
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) {
|
2021-03-10 17:12:24 +01:00
|
|
|
FightSystem.setSpectateState(Fight.getBlueTeam(), "Percent");
|
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
|
|
|
}
|