Skip to content

Commit

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

Not really happy with the implementation of this, as it changes our
DataSource pattern to one where only a single removeObject method
returns a boolean. The TownUtil change is also not ideal now or before
this PR as the Nation can be prevented from being deleted, while still
processing a refund.

Potential alternative solutions:
- Run the message in the DatabaseHandler method, and lose the custom
deleted by admin message sent to the admin who deleted the nation.
- Run the PreDeleteNation event before the removeNation(Nation) in order
to prevent the TownUtil method being made redundant, and causing issues.

Closes #7380.
  • Loading branch information
LlmDl committed Apr 25, 2024
1 parent 6a98bed commit 9ce4745
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1062,10 +1062,11 @@ 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 (tooManyResidents)
ResidentUtil.reduceResidentCountToFitTownMaxPop(town);
if (TownyUniverse.getInstance().getDataSource().removeNation(nation)) {
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation.getName()));
if (tooManyResidents)
ResidentUtil.reduceResidentCountToFitTownMaxPop(town);
}
})
.sendTo(player);
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1663,11 +1663,11 @@ 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);
TownyMessaging.sendGlobalMessage(Translatable.of("MSG_DEL_NATION", nation.getName()));
if (TownyUniverse.getInstance().getDataSource().removeNation(nation)) {
if (sender instanceof Player)
TownyMessaging.sendMsg(sender, Translatable.of("nation_deleted_by_admin", nation.getName()));
TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation.getName()));
}
}).sendTo(sender);
break;
case "meta":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ public boolean saveTownBlocks() {

abstract public void removeTownBlocks(Town town);

abstract public void removeNation(Nation nation);
abstract public boolean removeNation(Nation nation);

abstract public @NotNull Resident newResident(String name) throws AlreadyRegisteredException, NotRegisteredException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -463,11 +463,11 @@ public void removeTown(Town town, boolean delayFullRemoval) {
}

@Override
public void removeNation(Nation nation) {
public boolean removeNation(Nation nation) {

PreDeleteNationEvent preEvent = new PreDeleteNationEvent(nation);
if (BukkitTools.isEventCancelled(preEvent))
return;
return false;

Resident king = null;
if (nation.hasKing())
Expand Down Expand Up @@ -543,6 +543,8 @@ public void removeNation(Nation nation) {
plugin.resetCache();

BukkitTools.fireEvent(new DeleteNationEvent(nation, king));

return true;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,13 @@ public static void checkNationResidentsRequirementsOfTown(Town town) {
if (findNewCapital(town, nation))
return;

if (!TownyUniverse.getInstance().getDataSource().removeNation(nation))
return;

// No new capital found, delete the nation and potentially refund the capital town.
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);

TownyMessaging.sendGlobalMessage(Translatable.of("msg_del_nation", nation));
if (TownyEconomyHandler.isActive() && TownySettings.isRefundNationDisbandLowResidents()) {
town.getAccount().deposit(TownySettings.getNewNationPrice(), "nation refund");
TownyMessaging.sendPrefixedTownMessage(town, Translatable.of("msg_not_enough_residents_refunded", TownySettings.getNewNationPrice()));
Expand Down

0 comments on commit 9ce4745

Please sign in to comment.