Skip to content

Commit

Permalink
Merge pull request #91 from Warriorrrr/townutil-2
Browse files Browse the repository at this point in the history
Disable nation perms when town is invaded
  • Loading branch information
Goosius1 authored Jan 31, 2021
2 parents 300d7e9 + 8453f8a commit 47e98bb
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 51 deletions.
20 changes: 3 additions & 17 deletions src/main/java/com/gmail/goosius/siegewar/SiegeController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -194,9 +194,8 @@ else if (refundSideIfSiegeIsActive == SiegeSide.DEFENDERS)
townSiegeMap.remove(town.getUUID());
removeSiegedTown(siege);

setTownFlags(town, false);
//Save town & attacking nation
town.save();
SiegeWarTownUtil.setTownFlags(town, false);
//Save attacking nation
siege.getAttackingNation().save();
siege = null;
}
Expand Down Expand Up @@ -305,17 +304,4 @@ public static List<Siege> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()) {
Expand All @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()) {
Expand Down Expand Up @@ -356,27 +354,4 @@ private static List<Town> getGuardianTownsNotUnderSiege(Set<Town> 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();
}
}

0 comments on commit 47e98bb

Please sign in to comment.