From 7d45680fcbd9a1db50537dc868c1a4d3f38b655f Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Wed, 23 Apr 2025 21:52:27 +0200 Subject: [PATCH] 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()); }