From 92cae780f763f902978f7cb537d4e608c908012b Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Sat, 30 Jan 2021 23:10:31 +0100 Subject: [PATCH 1/2] Fixed stuff --- .../goosius/siegewar/SiegeController.java | 17 +---- .../listeners/SiegeWarTownEventListener.java | 4 +- .../siegewar/playeractions/AttackTown.java | 4 +- .../siegewar/playeractions/InvadeTown.java | 5 +- .../utils/SiegeWarSiegeCompletionUtil.java | 4 +- .../siegewar/utils/SiegeWarTownUtil.java | 71 +++++++++++++++++++ .../siegewar/utils/TownPeacefulnessUtil.java | 27 +------ 7 files changed, 84 insertions(+), 48 deletions(-) create mode 100644 src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarTownUtil.java diff --git a/src/main/java/com/gmail/goosius/siegewar/SiegeController.java b/src/main/java/com/gmail/goosius/siegewar/SiegeController.java index bd47835df..487a8975b 100644 --- a/src/main/java/com/gmail/goosius/siegewar/SiegeController.java +++ b/src/main/java/com/gmail/goosius/siegewar/SiegeController.java @@ -21,9 +21,9 @@ import com.gmail.goosius.siegewar.enums.SiegeStatus; import com.gmail.goosius.siegewar.metadata.SiegeMetaDataController; import com.gmail.goosius.siegewar.objects.Siege; -import com.gmail.goosius.siegewar.settings.SiegeWarSettings; import com.gmail.goosius.siegewar.utils.SiegeWarMoneyUtil; import com.gmail.goosius.siegewar.utils.SiegeWarTimeUtil; +import com.gmail.goosius.siegewar.utils.SiegeWarTownUtil; import com.palmergames.bukkit.towny.TownyUniverse; import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; import com.palmergames.bukkit.towny.object.Nation; @@ -194,7 +194,7 @@ else if (refundSideIfSiegeIsActive == SiegeSide.DEFENDERS) townSiegeMap.remove(town.getUUID()); removeSiegedTown(siege); - setTownFlags(town, false); + SiegeWarTownUtil.setTownFlags(town, false); //Save town & attacking nation town.save(); siege.getAttackingNation().save(); @@ -305,17 +305,4 @@ public static List getActiveSiegesAt(Location location) { } return siegesAtLocation; } - - /** - * Sets pvp and explosions in a town to the desired setting, if enabled in the config. - * - * @param town The town to set the flags for. - * @param desiredSetting The value to set pvp and explosions to. - */ - public static void setTownFlags(Town town, boolean desiredSetting) { - if (town.getPermissions().pvp != desiredSetting && SiegeWarSettings.getWarSiegePvpAlwaysOnInBesiegedTowns()) - town.getPermissions().pvp = desiredSetting; - if (town.getPermissions().explosion != desiredSetting && SiegeWarSettings.getWarSiegeExplosionsAlwaysOnInBesiegedTowns()) - town.getPermissions().explosion = desiredSetting; - } } diff --git a/src/main/java/com/gmail/goosius/siegewar/listeners/SiegeWarTownEventListener.java b/src/main/java/com/gmail/goosius/siegewar/listeners/SiegeWarTownEventListener.java index 33240a031..663e0a1d2 100644 --- a/src/main/java/com/gmail/goosius/siegewar/listeners/SiegeWarTownEventListener.java +++ b/src/main/java/com/gmail/goosius/siegewar/listeners/SiegeWarTownEventListener.java @@ -18,7 +18,7 @@ import com.gmail.goosius.siegewar.settings.Translation; import com.gmail.goosius.siegewar.utils.SiegeWarDistanceUtil; import com.gmail.goosius.siegewar.utils.SiegeWarPermissionUtil; -import com.gmail.goosius.siegewar.utils.TownPeacefulnessUtil; +import com.gmail.goosius.siegewar.utils.SiegeWarTownUtil; import com.palmergames.bukkit.towny.TownyFormatter; import com.palmergames.bukkit.towny.TownyMessaging; import com.palmergames.bukkit.towny.TownySettings; @@ -156,7 +156,7 @@ public void onTownToggleNeutral(TownToggleNeutralEvent event) { TownMetaDataController.setDesiredPeacefulnessSetting(town, event.getFutureState()); TownMetaDataController.setPeacefulnessChangeDays(town, 0); if (event.getFutureState() == true) - TownPeacefulnessUtil.disableTownPVP(town); + SiegeWarTownUtil.disableTownPVP(town); return; } else { int days; diff --git a/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java b/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java index c8f361655..1c4107deb 100644 --- a/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java +++ b/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java @@ -9,10 +9,10 @@ import com.gmail.goosius.siegewar.settings.SiegeWarSettings; import com.gmail.goosius.siegewar.utils.SiegeWarDistanceUtil; import com.gmail.goosius.siegewar.utils.SiegeWarMoneyUtil; +import com.gmail.goosius.siegewar.utils.SiegeWarTownUtil; import com.palmergames.bukkit.towny.TownyEconomyHandler; import com.palmergames.bukkit.towny.TownyMessaging; import com.palmergames.bukkit.towny.TownySettings; -import com.palmergames.bukkit.towny.TownyUniverse; import com.palmergames.bukkit.towny.exceptions.EconomyException; import com.palmergames.bukkit.towny.exceptions.TownyException; import com.palmergames.bukkit.towny.object.Coord; @@ -119,7 +119,7 @@ private static void attackTown(Block block, Nation attackingNation, Town defendi SiegeController.putTownInSiegeMap(defendingTown, siege); //Set town pvp and explosions to true. - SiegeController.setTownFlags(defendingTown, true); + SiegeWarTownUtil.setTownFlags(defendingTown, true); //Pay into warchest if (TownySettings.isUsingEconomy()) { diff --git a/src/main/java/com/gmail/goosius/siegewar/playeractions/InvadeTown.java b/src/main/java/com/gmail/goosius/siegewar/playeractions/InvadeTown.java index a00d7bd38..489477293 100644 --- a/src/main/java/com/gmail/goosius/siegewar/playeractions/InvadeTown.java +++ b/src/main/java/com/gmail/goosius/siegewar/playeractions/InvadeTown.java @@ -11,6 +11,7 @@ import com.palmergames.bukkit.towny.object.Nation; import com.palmergames.bukkit.towny.object.Town; import com.gmail.goosius.siegewar.settings.Translation; +import com.gmail.goosius.siegewar.utils.SiegeWarTownUtil; /** * This class is responsible for processing requests to invade towns @@ -95,7 +96,9 @@ private static void captureTown(Siege siege, Nation attackingNation, Town defend //Set flags to indicate success siege.setTownInvaded(true); - defendingTown.setConquered(true); + defendingTown.setConquered(true); + + SiegeWarTownUtil.disableNationPerms(defendingTown); //Save to db SiegeController.saveSiege(siege); diff --git a/src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarSiegeCompletionUtil.java b/src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarSiegeCompletionUtil.java index 3e0c63b16..a49d4bbac 100644 --- a/src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarSiegeCompletionUtil.java +++ b/src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarSiegeCompletionUtil.java @@ -3,6 +3,7 @@ import com.gmail.goosius.siegewar.SiegeController; import com.gmail.goosius.siegewar.enums.SiegeStatus; import com.gmail.goosius.siegewar.objects.Siege; +import com.gmail.goosius.siegewar.utils.SiegeWarTownUtil; /** * This class contains utility functions related to completing sieges @@ -26,10 +27,9 @@ public static void updateSiegeValuesToComplete(Siege siege, if (siegeStatus == SiegeStatus.DEFENDER_SURRENDER || siegeStatus == SiegeStatus.ATTACKER_WIN) { SiegeWarTimeUtil.activateRevoltImmunityTimer(siege.getDefendingTown()); //Prevent immediate revolt } - SiegeController.setTownFlags(siege.getDefendingTown(), false); + SiegeWarTownUtil.setTownFlags(siege.getDefendingTown(), false); //Save to db SiegeController.saveSiege(siege); - siege.getDefendingTown().save(); } } diff --git a/src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarTownUtil.java b/src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarTownUtil.java new file mode 100644 index 000000000..3e933b12a --- /dev/null +++ b/src/main/java/com/gmail/goosius/siegewar/utils/SiegeWarTownUtil.java @@ -0,0 +1,71 @@ +package com.gmail.goosius.siegewar.utils; + +import com.gmail.goosius.siegewar.settings.SiegeWarSettings; +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.TownBlock; +import com.palmergames.bukkit.towny.object.TownBlockType; +import com.palmergames.bukkit.towny.object.TownyPermission; +import com.palmergames.bukkit.towny.object.TownyPermission.PermLevel; +import com.palmergames.bukkit.towny.object.TownyPermissionChange.Action; + +/** + * Util class containing methods related to town flags/permssions. + */ +public class SiegeWarTownUtil { + public static void disableTownPVP(Town town) { + if (town.isPVP()) + town.setPVP(false); + + for (TownBlock plot : town.getTownBlocks()) { + if (plot.hasPlotObjectGroup()) { + TownyPermission groupPermissions = plot.getPlotObjectGroup().getPermissions(); + if (groupPermissions.pvp) { + groupPermissions.pvp = false; + plot.getPlotObjectGroup().setPermissions(groupPermissions); + } + } + if (plot.getPermissions().pvp) { + if (plot.getType() == TownBlockType.ARENA) + plot.setType(TownBlockType.RESIDENTIAL); + + plot.getPermissions().pvp = false; + plot.setChanged(true); + } + } + town.save(); + } + + public static void disableNationPerms(Town town) { + town.getPermissions().change(Action.PERM_LEVEL, false, PermLevel.NATION); + + for (TownBlock plot : town.getTownBlocks()) { + if (plot.hasResident()) + continue; + + if (plot.hasPlotObjectGroup()) { + TownyPermission groupPermission = plot.getPlotObjectGroup().getPermissions(); + groupPermission.change(Action.PERM_LEVEL, false, PermLevel.NATION); + plot.getPlotObjectGroup().setPermissions(groupPermission); + plot.getPlotObjectGroup().save(); + } + + plot.getPermissions().change(Action.PERM_LEVEL, false, PermLevel.NATION); + plot.save(); + } + town.save(); + } + + /** + * Sets pvp and explosions in a town to the desired setting, if enabled in the config. + * + * @param town The town to set the flags for. + * @param desiredSetting The value to set pvp and explosions to. + */ + public static void setTownFlags(Town town, boolean desiredSetting) { + if (town.getPermissions().pvp != desiredSetting && SiegeWarSettings.getWarSiegePvpAlwaysOnInBesiegedTowns()) + town.getPermissions().pvp = desiredSetting; + if (town.getPermissions().explosion != desiredSetting && SiegeWarSettings.getWarSiegeExplosionsAlwaysOnInBesiegedTowns()) + town.getPermissions().explosion = desiredSetting; + town.save(); + } +} \ No newline at end of file diff --git a/src/main/java/com/gmail/goosius/siegewar/utils/TownPeacefulnessUtil.java b/src/main/java/com/gmail/goosius/siegewar/utils/TownPeacefulnessUtil.java index b7bbb17a1..c1f14bf76 100644 --- a/src/main/java/com/gmail/goosius/siegewar/utils/TownPeacefulnessUtil.java +++ b/src/main/java/com/gmail/goosius/siegewar/utils/TownPeacefulnessUtil.java @@ -16,8 +16,6 @@ import com.palmergames.bukkit.towny.object.Resident; import com.palmergames.bukkit.towny.object.Town; import com.palmergames.bukkit.towny.object.TownBlock; -import com.palmergames.bukkit.towny.object.TownBlockType; -import com.palmergames.bukkit.towny.object.TownyPermission; import com.gmail.goosius.siegewar.settings.Translation; import com.palmergames.bukkit.util.BukkitTools; import com.palmergames.util.TimeTools; @@ -67,7 +65,7 @@ public static void updateTownPeacefulnessCounters(Town town) { town.setNeutral(!town.isNeutral()); if (town.isNeutral() && !SiegeWarSettings.getWarCommonPeacefulTownsAllowedToTogglePVP()) - disableTownPVP(town); + SiegeWarTownUtil.disableTownPVP(town); if (SiegeWarSettings.getWarSiegeEnabled()) { if (town.isNeutral()) { @@ -356,27 +354,4 @@ private static List getGuardianTownsNotUnderSiege(Set guardianTowns) } return guardianTownsNotUnderSiege; } - - public static void disableTownPVP(Town town) { - if (town.isPVP()) - town.setPVP(false); - - for (TownBlock plot : town.getTownBlocks()) { - if (plot.hasPlotObjectGroup()) { - TownyPermission groupPermissions = plot.getPlotObjectGroup().getPermissions(); - if (groupPermissions.pvp) { - groupPermissions.pvp = false; - plot.getPlotObjectGroup().setPermissions(groupPermissions); - } - } - if (plot.getPermissions().pvp) { - if (plot.getType() == TownBlockType.ARENA) - plot.setType(TownBlockType.RESIDENTIAL); - - plot.getPermissions().pvp = false; - plot.setChanged(true); - } - } - town.save(); - } } From 8453f8a3274b05bf9fe1449dfee3f321e5c4299b Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Sun, 31 Jan 2021 13:16:50 +0100 Subject: [PATCH 2/2] Remove unneeded town saves --- src/main/java/com/gmail/goosius/siegewar/SiegeController.java | 3 +-- .../com/gmail/goosius/siegewar/playeractions/AttackTown.java | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/gmail/goosius/siegewar/SiegeController.java b/src/main/java/com/gmail/goosius/siegewar/SiegeController.java index 487a8975b..8b5090d78 100644 --- a/src/main/java/com/gmail/goosius/siegewar/SiegeController.java +++ b/src/main/java/com/gmail/goosius/siegewar/SiegeController.java @@ -195,8 +195,7 @@ else if (refundSideIfSiegeIsActive == SiegeSide.DEFENDERS) removeSiegedTown(siege); SiegeWarTownUtil.setTownFlags(town, false); - //Save town & attacking nation - town.save(); + //Save attacking nation siege.getAttackingNation().save(); siege = null; } diff --git a/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java b/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java index 1c4107deb..bd6cdff28 100644 --- a/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java +++ b/src/main/java/com/gmail/goosius/siegewar/playeractions/AttackTown.java @@ -143,7 +143,6 @@ private static void attackTown(Block block, Nation attackingNation, Town defendi SiegeController.saveSiege(siege); SiegeController.addSiegedTown(siege); attackingNation.save(); - defendingTown.save(); //Send global message; if (siege.getDefendingTown().hasNation()) {