From cd3ec80f4359a34a00bafb74c6b91f0f51ff6636 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Thu, 13 May 2021 13:14:42 +0200 Subject: [PATCH] Update Config Update PercentWincondition --- .../winconditions/PercentWincondition.java | 40 +++++++++++++ .../WinconditionPercentSystem.java | 33 ++++------- .../WinconditionRelativePercent.java | 56 ++++++++----------- .../WinconditionRelativeRedstonePercent.java | 5 -- 4 files changed, 74 insertions(+), 60 deletions(-) diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/PercentWincondition.java b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/PercentWincondition.java index 685166d..5abe011 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/PercentWincondition.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/PercentWincondition.java @@ -19,7 +19,14 @@ package de.steamwar.fightsystem.winconditions; +import de.steamwar.fightsystem.FightSystem; +import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; +import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.StateDependent; +import org.bukkit.Bukkit; + +import java.util.EnumSet; public abstract class PercentWincondition extends Wincondition implements PrintableWincondition { @@ -32,4 +39,37 @@ public abstract class PercentWincondition extends Wincondition implements Printa } abstract double getPercent(FightTeam team); + + public class TeamPercent { + public final FightTeam team; + + public int totalBlocks; + public int currentBlocks; + + protected TeamPercent(FightTeam team) { + this.team = team; + } + + public void lose() { + Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + team.getColoredName() + " §chat zu viel Schaden erlitten!"); + win(Fight.getOpposite(team)); + } + } + + public abstract class StateDependentTeamPercent extends StateDependent { + public final FightTeam team; + + public int totalBlocks; + public int currentBlocks; + + protected StateDependentTeamPercent(FightTeam team, Winconditions winconditions) { + super(winconditions, FightState.Running); + this.team = team; + } + + public void lose() { + Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + team.getColoredName() + " §chat zu viel Schaden erlitten!"); + win(Fight.getOpposite(team)); + } + } } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java index f726c9a..a7fa389 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java @@ -20,12 +20,10 @@ 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.fight.FightTeam; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentListener; -import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityExplodeEvent; @@ -42,17 +40,17 @@ public class WinconditionPercentSystem extends PercentWincondition implements Li teamMap.put(Fight.getBlueTeam(), new TeamPercent(Fight.getBlueTeam())); teamMap.put(Fight.getRedTeam(), new TeamPercent(Fight.getRedTeam())); - new StateDependentListener(Winconditions.PERCENT_SYSTEM, FightState.Running, this){ + new StateDependentListener(Winconditions.PERCENT_SYSTEM, FightState.Running, this) { @Override public void enable() { super.enable(); teamMap.forEach((team, percent) -> { - percent.destroyedBlocks = 0; + percent.currentBlocks = 0; percent.percent = 0; }); } }; - if(Config.ActiveWinconditions.contains(Winconditions.PERCENT_SYSTEM)){ + if (Config.ActiveWinconditions.contains(Winconditions.PERCENT_SYSTEM)) { printableWinconditions.add(this); percentWincondition = this; } @@ -63,38 +61,29 @@ public class WinconditionPercentSystem extends PercentWincondition implements Li teamMap.values().forEach(teamPercent -> teamPercent.check(event)); } - @Override - public String getDisplay(FightTeam team) { - return team.getPrefix() + "Schaden: " + (Math.round(100.0 * getPercent(team)) / 100.0) + "%"; - } - @Override public double getPercent(FightTeam team) { return teamMap.get(team).percent; } - private class TeamPercent { + private class TeamPercent extends PercentWincondition.TeamPercent { - private final FightTeam team; - private final int volume; private double percent; - private int destroyedBlocks; private TeamPercent(FightTeam team) { - this.team = team; - this.volume = team.getSchemRegion().volume(); + super(team); + totalBlocks = team.getSchemRegion().volume(); } private void check(EntityExplodeEvent event) { - if(!team.getExtendRegion().inRegion(event.getEntity().getLocation())){ + if (!team.getExtendRegion().inRegion(event.getEntity().getLocation())) { return; } - destroyedBlocks += event.blockList().size(); - percent = (double)destroyedBlocks * 100 / volume; - if(percent >= Config.PercentWin) { - Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + team.getColoredName() + " §chat zu viel Schaden erlitten!"); - win(Fight.getOpposite(team)); + currentBlocks += event.blockList().size(); + percent = (double) currentBlocks * 100 / totalBlocks; + if (percent >= Config.PercentWin) { + lose(); } } } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java index 420379f..13011ee 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java @@ -23,8 +23,6 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; -import de.steamwar.fightsystem.states.FightState; -import de.steamwar.fightsystem.states.StateDependent; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.scheduler.BukkitTask; @@ -38,12 +36,12 @@ public class WinconditionRelativePercent extends PercentWincondition { private final Map teamMap = new HashMap<>(); - public WinconditionRelativePercent(){ + public WinconditionRelativePercent() { super("RelativePercent"); teamMap.put(Fight.getBlueTeam(), new TeamPercent(Fight.getBlueTeam())); teamMap.put(Fight.getRedTeam(), new TeamPercent(Fight.getRedTeam())); - if(Config.ActiveWinconditions.contains(Winconditions.RELATIVE_PERCENT)){ + if (Config.ActiveWinconditions.contains(Winconditions.RELATIVE_PERCENT)) { printableWinconditions.add(this); percentWincondition = this; } @@ -54,67 +52,59 @@ public class WinconditionRelativePercent extends PercentWincondition { return teamMap.get(team).getPercent(); } - @Override - public String getDisplay(FightTeam team) { - return team.getPrefix() + "Schaden: " + (Math.round(100.0 * getPercent(team)) / 100.0) + "%"; - } + public class TeamPercent extends StateDependentTeamPercent { - public static class TeamPercent extends StateDependent { - private final FightTeam team; - - private int blockCount; private BukkitTask task; - private int currentBlocks; - public TeamPercent(FightTeam team){ - super(Winconditions.RELATIVE_PERCENT, FightState.Running); - this.team = team; - this.currentBlocks = 1; + public TeamPercent(FightTeam team) { + super(team, Winconditions.RELATIVE_PERCENT); + currentBlocks = 1; register(); } @Override - public void enable(){ - blockCount = currentBlocks(); + public void enable() { + totalBlocks = currentBlocks(); task = Bukkit.getScheduler().runTaskTimer(FightSystem.getPlugin(), this::check, 400, 400); } @Override - public void disable(){ + public void disable() { task.cancel(); } - private void check(){ + private void check() { currentBlocks(); - if(!Config.ActiveWinconditions.contains(Winconditions.RELATIVE_PERCENT)) + if (!Config.ActiveWinconditions.contains(Winconditions.RELATIVE_PERCENT)) return; - if(getPercent() >= Config.PercentWin){ - Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + team.getColoredName() + " §chat zu viel Schaden erlitten!"); - FightSystem.setSpectateState(Fight.getOpposite(team), "RelativePercent"); + if (getPercent() >= Config.PercentWin) { + lose(); } } - public double getPercent(){ - if(currentBlocks > blockCount) + public double getPercent() { + if (currentBlocks > totalBlocks) { return 0; - return (blockCount - currentBlocks) * 100 / (double) blockCount; + } + return (totalBlocks - currentBlocks) * 100 / (double) totalBlocks; } - public int getBlockCount(){ - return blockCount; + public int getBlockCount() { + return totalBlocks; } - private int currentBlocks(){ + private int currentBlocks() { // Entern active - if(!Config.EnterStages.isEmpty() && Config.EnterStages.get(0) >= Wincondition.getTimeOverCountdown().getTimeLeft()) + if (!Config.EnterStages.isEmpty() && Config.EnterStages.get(0) >= Wincondition.getTimeOverCountdown().getTimeLeft()) return currentBlocks; currentBlocks = 0; team.getSchemRegion().forEach((x, y, z) -> { - if(!Config.Blocks.contains(world.getBlockAt(x,y,z).getType())) + if (!Config.Blocks.contains(world.getBlockAt(x, y, z).getType())) { currentBlocks++; + } }); return currentBlocks; } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativeRedstonePercent.java b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativeRedstonePercent.java index 8f02e11..b4c53e5 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativeRedstonePercent.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/winconditions/WinconditionRelativeRedstonePercent.java @@ -57,11 +57,6 @@ public class WinconditionRelativeRedstonePercent extends PercentWincondition imp return teamMap.get(team).getPercent(); } - @Override - public String getDisplay(FightTeam team) { - return team.getPrefix() + "Schaden: " + (Math.round(100.0 * getPercent(team)) / 100.0) + "%"; - } - @EventHandler public void onBlockPlace(BlockPlaceEvent event) { FightPlayer fightPlayer = Fight.getFightPlayer(event.getPlayer());