From 7d45680fcbd9a1db50537dc868c1a4d3f38b655f Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Wed, 23 Apr 2025 21:52:27 +0200 Subject: [PATCH 1/3] Enable a Dirt Block (Schem owner -1 and Name like GameMode) to be selected for any ServerTeam member --- .../fightsystem/FightSystem.properties | 1 + .../fightsystem/FightSystem_de.properties | 1 + .../de/steamwar/fightsystem/commands/GUI.java | 41 ++++++++++++++----- .../steamwar/fightsystem/fight/FightTeam.java | 7 +++- .../winconditions/WinconditionBlocks.java | 2 +- .../WinconditionCaptainDead.java | 2 + .../winconditions/WinconditionPercent.java | 2 + 7 files changed, 43 insertions(+), 13 deletions(-) diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties index dde4e266..455e0444 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties @@ -76,6 +76,7 @@ KITSEARCH_TITLE=Search for kit SCHEM_NO_ENEMY=§cNo schematic selection without an opponent SCHEM_TITLE={0} selection +SCHEM_DIRT=§eDirt Block SCHEM_PUBLIC=§ePublic {0} SCHEM_UNCHECKED=§eUnchecked {0} SCHEM_PRIVATE=§ePrivate {0} diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties index 470226a8..cd294425 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties @@ -70,6 +70,7 @@ KITSEARCH_TITLE=Nach Kit suchen SCHEM_NO_ENEMY=§cKeine Schematicwahl ohne Gegner SCHEM_TITLE={0}-Auswahl +SCHEM_DIRT=§eErdblock SCHEM_PUBLIC=§eÖffentliches {0} SCHEM_UNCHECKED=§eUngeprüftes {0} SCHEM_PRIVATE=§ePrivates {0} diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java index 2ca6849c..87e72c08 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java @@ -24,15 +24,14 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.ai.AIManager; import de.steamwar.fightsystem.fight.*; +import de.steamwar.fightsystem.fight.Fight; +import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.listener.PersonalKitCreator; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.utils.ColorConverter; import de.steamwar.inventory.*; import de.steamwar.message.Message; -import de.steamwar.sql.PersonalKit; -import de.steamwar.sql.SchematicNode; -import de.steamwar.sql.SchematicType; -import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.*; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -40,7 +39,10 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.function.Consumer; import java.util.stream.Collectors; public class GUI { @@ -206,6 +208,16 @@ public class GUI { for (int i = 0; i < Config.SubTypes.size(); i++) { setupSchemTypeRow(p, inv, Config.SubTypes.get(i), i + 1); } + if (!Config.test() && SteamwarUser.get(p.getUniqueId()).hasPerm(UserPerm.TEAM)) { + SchematicNode node = SchematicNode.getSchematicNode(-1, Config.GameName, (Integer) null); + if (node != null) { + inv.setItem(2, new SWItem(SWItem.getMaterial(node.getItem()), msg.parse("SCHEM_DIRT", p), click -> { + schemSelect(p, node, fightTeam -> { + fightTeam.setIgnoreWinconditions(true); + }); + })); + } + } inv.setCallback(-999, (ClickType click) -> p.closeInventory()); inv.open(); } @@ -241,14 +253,21 @@ public class GUI { private static void schemDialog(Player p, SchematicType type, boolean publicSchems, boolean unchecked){ SchematicSelector selector = new SchematicSelector(p, Config.test() ? SchematicSelector.selectSchematic() : SchematicSelector.selectSchematicType(unchecked ? type.checkType() : type), node -> { - FightTeam fightTeam = Fight.getPlayerTeam(p); - if(fightTeam == null) - return; - if(Config.test() || FightState.getFightState() != FightState.POST_SCHEM_SETUP) - fightTeam.pasteSchem(node); - p.closeInventory(); + schemSelect(p, node, fightTeam -> { + fightTeam.setIgnoreWinconditions(false); + }); }); selector.setPublicMode(publicSchems?SchematicSelector.PublicMode.PUBLIC_ONLY:SchematicSelector.PublicMode.PRIVATE_ONLY); selector.open(); } + + private static void schemSelect(Player p, SchematicNode node, Consumer fightTeamConsumer) { + FightTeam fightTeam = Fight.getPlayerTeam(p); + if(fightTeam == null) + return; + fightTeamConsumer.accept(fightTeam); + if(Config.test() || FightState.getFightState() != FightState.POST_SCHEM_SETUP) + fightTeam.pasteSchem(node); + p.closeInventory(); + } } diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java index 0cb68f71..19d45690 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -42,6 +42,7 @@ import de.steamwar.inventory.SWItem; import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SteamwarUser; import lombok.Getter; +import lombok.Setter; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.*; import org.bukkit.entity.LivingEntity; @@ -100,6 +101,10 @@ public class FightTeam { @Getter private boolean publicsOnly; + @Getter + @Setter + private boolean ignoreWinconditions; + private final Map players = new HashMap<>(); @Getter @@ -385,7 +390,7 @@ public class FightTeam { } public void pasteSchem(SchematicNode schematic){ - if(schematic.getSchemtype().check()) { + if(schematic.getSchemtype().check() || schematic.getSchemtype().writeable()) { FightStatistics.unrank(); FightSystem.getMessage().broadcast("SCHEMATIC_UNCHECKED", getColoredName()); } diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java index b9b0c9f7..4bbaa241 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java @@ -85,7 +85,7 @@ public class WinconditionBlocks extends Wincondition implements PrintableWincond private void check() { blocks.removeIf(block -> !isOfType.test(block)); - if(blocks.isEmpty()) + if(blocks.isEmpty() && !team.isIgnoreWinconditions()) win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName()); } } diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java index de0205ab..df7651ee 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java @@ -42,6 +42,8 @@ public class WinconditionCaptainDead extends Wincondition implements Listener { return; FightTeam team = leader.getTeam(); + if (team.isIgnoreWinconditions()) + return; win(Fight.getOpposite(team), "WIN_LEADER_DEAD", team.getPrefix() + leader.getEntity().getName()); } } diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java index 37d3fafa..5a2cbe4f 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java @@ -40,6 +40,8 @@ public class WinconditionPercent extends Wincondition implements PrintableWincon private final Map teamMap = new HashMap<>(); protected Consumer checkWin = team -> { + if (team.isIgnoreWinconditions()) + return; if (getPercent(team) >= Config.PercentWin) { win(Fight.getOpposite(team), "WIN_PERCENT", team.getColoredName()); } From b14cf445dfbc017a57aeaa06d494ec8ee403039d Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Thu, 29 May 2025 11:32:50 +0200 Subject: [PATCH 2/3] Fix PR stuff --- .../src/de/steamwar/fightsystem/commands/GUI.java | 11 +++-------- .../src/de/steamwar/fightsystem/fight/FightTeam.java | 5 ----- .../fightsystem/winconditions/WinconditionBlocks.java | 5 ++++- .../winconditions/WinconditionCaptainDead.java | 2 -- .../winconditions/WinconditionPercent.java | 11 ++++++++--- 5 files changed, 15 insertions(+), 19 deletions(-) diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java index 87e72c08..237d860e 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java @@ -212,9 +212,7 @@ public class GUI { SchematicNode node = SchematicNode.getSchematicNode(-1, Config.GameName, (Integer) null); if (node != null) { inv.setItem(2, new SWItem(SWItem.getMaterial(node.getItem()), msg.parse("SCHEM_DIRT", p), click -> { - schemSelect(p, node, fightTeam -> { - fightTeam.setIgnoreWinconditions(true); - }); + schemSelect(p, node); })); } } @@ -253,19 +251,16 @@ public class GUI { private static void schemDialog(Player p, SchematicType type, boolean publicSchems, boolean unchecked){ SchematicSelector selector = new SchematicSelector(p, Config.test() ? SchematicSelector.selectSchematic() : SchematicSelector.selectSchematicType(unchecked ? type.checkType() : type), node -> { - schemSelect(p, node, fightTeam -> { - fightTeam.setIgnoreWinconditions(false); - }); + schemSelect(p, node); }); selector.setPublicMode(publicSchems?SchematicSelector.PublicMode.PUBLIC_ONLY:SchematicSelector.PublicMode.PRIVATE_ONLY); selector.open(); } - private static void schemSelect(Player p, SchematicNode node, Consumer fightTeamConsumer) { + private static void schemSelect(Player p, SchematicNode node) { FightTeam fightTeam = Fight.getPlayerTeam(p); if(fightTeam == null) return; - fightTeamConsumer.accept(fightTeam); if(Config.test() || FightState.getFightState() != FightState.POST_SCHEM_SETUP) fightTeam.pasteSchem(node); p.closeInventory(); diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java index 19d45690..8eed2f2a 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -42,7 +42,6 @@ import de.steamwar.inventory.SWItem; import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SteamwarUser; import lombok.Getter; -import lombok.Setter; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.*; import org.bukkit.entity.LivingEntity; @@ -101,10 +100,6 @@ public class FightTeam { @Getter private boolean publicsOnly; - @Getter - @Setter - private boolean ignoreWinconditions; - private final Map players = new HashMap<>(); @Getter diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java index 4bbaa241..72c0873a 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionBlocks.java @@ -84,8 +84,11 @@ public class WinconditionBlocks extends Wincondition implements PrintableWincond } private void check() { + // Edge Case for DirtBlock + if (blocks.isEmpty()) return; + blocks.removeIf(block -> !isOfType.test(block)); - if(blocks.isEmpty() && !team.isIgnoreWinconditions()) + if(blocks.isEmpty()) win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName()); } } diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java index df7651ee..de0205ab 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java @@ -42,8 +42,6 @@ public class WinconditionCaptainDead extends Wincondition implements Listener { return; FightTeam team = leader.getTeam(); - if (team.isIgnoreWinconditions()) - return; win(Fight.getOpposite(team), "WIN_LEADER_DEAD", team.getPrefix() + leader.getEntity().getName()); } } diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java index 5a2cbe4f..f98bdecc 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercent.java @@ -40,8 +40,6 @@ public class WinconditionPercent extends Wincondition implements PrintableWincon private final Map teamMap = new HashMap<>(); protected Consumer checkWin = team -> { - if (team.isIgnoreWinconditions()) - return; if (getPercent(team) >= Config.PercentWin) { win(Fight.getOpposite(team), "WIN_PERCENT", team.getColoredName()); } @@ -80,6 +78,7 @@ public class WinconditionPercent extends Wincondition implements PrintableWincon private int totalBlocks = 0; private int currentBlocks = 0; + private boolean countAnyBlock = false; private TeamPercent(FightTeam team, Winconditions wincondition) { this.team = team; @@ -100,7 +99,7 @@ public class WinconditionPercent extends Wincondition implements PrintableWincon } event.blockList().forEach(block -> { - if (Config.PercentBlocks.contains(block.getType()) == Config.PercentBlocksWhitelist) { + if (countAnyBlock || Config.PercentBlocks.contains(block.getType()) == Config.PercentBlocksWhitelist) { currentBlocks--; } }); @@ -110,10 +109,16 @@ public class WinconditionPercent extends Wincondition implements PrintableWincon private void enable() { totalBlocks = 0; + countAnyBlock = false; team.getSchemRegion().forEach((x, y, z) -> { if (Config.PercentBlocks.contains(Config.world.getBlockAt(x, y, z).getType()) == Config.PercentBlocksWhitelist) totalBlocks++; }); + // Edge Case for DirtBlock + if (totalBlocks == 0) { + totalBlocks = team.getSchemRegion().volume(); + countAnyBlock = true; + } currentBlocks = totalBlocks; postEnable.accept(team); } From 9bc01a4e3bd92506ec05fbef3b2bf56cf96ed890 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Thu, 29 May 2025 12:00:12 +0200 Subject: [PATCH 3/3] Revert FightTeam --- .../src/de/steamwar/fightsystem/fight/FightTeam.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java index 8eed2f2a..0cb68f71 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -385,7 +385,7 @@ public class FightTeam { } public void pasteSchem(SchematicNode schematic){ - if(schematic.getSchemtype().check() || schematic.getSchemtype().writeable()) { + if(schematic.getSchemtype().check()) { FightStatistics.unrank(); FightSystem.getMessage().broadcast("SCHEMATIC_UNCHECKED", getColoredName()); }