Skip to content

Commit

Permalink
Fix nation deleted message showing when a predeletenationevent
Browse files Browse the repository at this point in the history
iscancelled.

Uses the nation.exists to determine if the removal of the nation was
successful or not, and displays messages to match the outcome.

Closes #7380.
Supercedes #7381.
  • Loading branch information
LlmDl committed Apr 26, 2024
1 parent 890ac83 commit fd3e8ac
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1062,8 +1062,12 @@ public void nationDelete(Player player, String[] split) throws TownyException {
}

Confirmation.runOnAccept(() -> {
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation.getName()));
TownyUniverse.getInstance().getDataSource().removeNation(nation);
if (nation.exists()) { // The PreDeleteNationEvent was cancelled.
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_you_cannot_delete_this_nation"));
return;
}
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation.getName()));
if (tooManyResidents)
ResidentUtil.reduceResidentCountToFitTownMaxPop(town);
})
Expand All @@ -1076,8 +1080,12 @@ public void nationDelete(Player player, String[] split) throws TownyException {

Nation nation = getNationOrThrow(split[0]);
Confirmation.runOnAccept(() -> {
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation.getName()));
TownyUniverse.getInstance().getDataSource().removeNation(nation);
if (nation.exists()) {// The PreDeleteNationEvent was cancelled.
TownyMessaging.sendErrorMsg(player, Translatable.of("msg_err_you_cannot_delete_this_nation"));
return;
}
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation.getName()));
}).sendTo(player);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1663,11 +1663,14 @@ public void parseAdminNationCommand(CommandSender sender, String[] split) throws
case "delete":
checkPermOrThrow(sender, PermissionNodes.TOWNY_COMMAND_TOWNYADMIN_NATION_DELETE.getNode());
Confirmation.runOnAccept(() -> {
if (sender instanceof Player)
TownyMessaging.sendMsg(sender, Translatable.of("nation_deleted_by_admin", nation.getName()));

TownyUniverse.getInstance().getDataSource().removeNation(nation);
if (nation.exists()) {
TownyMessaging.sendErrorMsg(sender, Translatable.of("msg_err_you_cannot_delete_this_nation"));
return;
}
TownyMessaging.sendGlobalMessage(Translatable.of("MSG_DEL_NATION", nation.getName()));
if (sender instanceof Player)
TownyMessaging.sendMsg(sender, Translatable.of("nation_deleted_by_admin", nation.getName()));
}).sendTo(sender);
break;
case "meta":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.palmergames.bukkit.towny.event.ChunkNotificationEvent;
import com.palmergames.bukkit.towny.event.NewTownEvent;
import com.palmergames.bukkit.towny.event.PlayerChangePlotEvent;
import com.palmergames.bukkit.towny.event.PreDeleteNationEvent;
import com.palmergames.bukkit.towny.event.SpawnEvent;
import com.palmergames.bukkit.towny.event.TownAddResidentEvent;
import com.palmergames.bukkit.towny.event.TownBlockPermissionChangeEvent;
Expand Down Expand Up @@ -59,6 +60,12 @@ public TownyCustomListener(Towny instance) {
plugin = instance;
}

@EventHandler
public void onNationDelete(PreDeleteNationEvent event) {
System.out.println("Cancelling nation delete.");
event.setCancelled(true);
}

@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerChangePlotEvent(PlayerChangePlotEvent event) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,8 @@ public void removeNation() {
oldNation.removeTown(this);
} catch (EmptyNationException e) {
TownyUniverse.getInstance().getDataSource().removeNation(oldNation);
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", e.getNation().getName()));
if (!nation.exists()) // The PreDeleteNationEvent was not cancelled.
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", e.getNation().getName()));
}

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -780,9 +780,12 @@ private void processNationUpkeep(Nation nation) {
totalNationUpkeep = totalNationUpkeep + upkeep;
TownyMessaging.sendPrefixedNationMessage(nation, Translatable.of("msg_your_nation_payed_upkeep", prettyMoney(upkeep)));
} else {
TownyMessaging.sendPrefixedNationMessage(nation, Translatable.of("msg_your_nation_couldnt_pay_upkeep", prettyMoney(upkeep)));
universe.getDataSource().removeNation(nation);
removedNations.add(nation.getName());
if (!nation.exists()) { // The PreDeleteNationEvent was not cancelled.
TownyMessaging.sendPrefixedNationMessage(nation, Translatable.of("msg_your_nation_couldnt_pay_upkeep", prettyMoney(upkeep)));
removedNations.add(nation.getName());
return;
}
}
} else if (upkeep < 0) {
nation.getAccount().withdraw(upkeep, "Negative Nation Upkeep");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,12 @@ public static void checkNationResidentsRequirementsOfTown(Town town) {
return;

// No new capital found, delete the nation and potentially refund the capital town.
TownyUniverse.getInstance().getDataSource().removeNation(nation);
if (nation.exists()) // The PreDeleteNationEvent was cancelled.
return;

TownyMessaging.sendPrefixedNationMessage(nation, Translatable.of("msg_nation_disbanded_town_not_enough_residents", town.getName()));
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation));
TownyUniverse.getInstance().getDataSource().removeNation(nation);

if (TownyEconomyHandler.isActive() && TownySettings.isRefundNationDisbandLowResidents()) {
town.getAccount().deposit(TownySettings.getNewNationPrice(), "nation refund");
Expand Down
4 changes: 3 additions & 1 deletion Towny/src/main/resources/lang/en-US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2524,4 +2524,6 @@ msg_new_resident_spawn_to_town_prompt: "Did you want to spawn to the town you ju

msg_recieved_refund_for_deleted_object: "You have received the bank balance of your deleted town or nation, a sum of %s."

msg_err_you_already_own_this_plot: "You already own this plot."
msg_err_you_already_own_this_plot: "You already own this plot."

msg_err_you_cannot_delete_this_nation: "You have been prevented from deleting this nation."

0 comments on commit fd3e8ac

Please sign in to comment.