From 36cb8ebbeab8bd28864ca4f9798da57940c32f11 Mon Sep 17 00:00:00 2001 From: FlynCodes <84115766+flyncodes@users.noreply.github.com> Date: Tue, 11 Aug 2026 15:46:06 +0100 Subject: [PATCH 1/3] Add /res trustlist --- .../bukkit/towny/command/ResidentCommand.java | 11 +++++++++++ .../com/palmergames/bukkit/towny/object/Resident.java | 7 +++++++ .../bukkit/towny/permissions/PermissionNodes.java | 1 + Towny/src/main/resources/lang/en-US.yml | 1 + Towny/src/main/resources/plugin.yml | 1 + Towny/src/main/resources/townyperms.yml | 1 + 6 files changed, 22 insertions(+) diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/command/ResidentCommand.java b/Towny/src/main/java/com/palmergames/bukkit/towny/command/ResidentCommand.java index e4516554e1..8609d7ed7f 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/command/ResidentCommand.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/command/ResidentCommand.java @@ -55,6 +55,7 @@ public class ResidentCommand extends BaseCommand implements CommandExecutor { "jail", "plotlist", "outlawlist", + "trustlist", "spawn", "toggle", "set", @@ -148,6 +149,7 @@ public List onTabComplete(CommandSender sender, Command command, String break; case "tax": case "outlawlist": + case "trustlist": if (args.length == 2) return getTownyStartingWith(args[1], "r"); break; @@ -250,6 +252,7 @@ public void parseResidentCommand(final Player player, String[] split) throws Tow case "tax" -> parseResidentTax(player, StringMgmt.remFirstArg(split)); case "plotlist" -> parseResidentPlotlist(player, StringMgmt.remFirstArg(split)); case "outlawlist" -> parseResidentOutlawlist(player, StringMgmt.remFirstArg(split)); + case "trustlist" -> parseResidentTrustlist(player, StringMgmt.remFirstArg(split)); case "jail" -> parseResidentJail(player, StringMgmt.remFirstArg(split)); case "set" -> residentSet(player, StringMgmt.remFirstArg(split)); case "toggle" -> residentToggle(player, StringMgmt.remFirstArg(split)); @@ -334,6 +337,14 @@ private void parseResidentOutlawlist(Player player, String[] split) throws Towny TownyMessaging.sendMessage(player, TownyFormatter.getFormattedTownyObjects(Translatable.of("outlawed_in").forLocale(player), new ArrayList<>(resident.getTownsOutlawedIn()))); } + private void parseResidentTrustlist(Player player, String[] split) throws TownyException { + checkPermOrThrow(player, PermissionNodes.TOWNY_COMMAND_RESIDENT_TRUSTLIST.getNode()); + + Resident resident = split.length == 0 ? getResidentOrThrow(player) : getResidentOrThrow(split[0]); + + TownyMessaging.sendMessage(player, TownyFormatter.getFormattedTownyObjects(Translatable.of("trusted_in").forLocale(player), new ArrayList<>(resident.getTownsTrustedIn()))); + } + private void parseResidentJail(Player player, String[] split) throws TownyException { checkPermOrThrow(player, PermissionNodes.TOWNY_COMMAND_RESIDENT_JAIL.getNode()); diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/object/Resident.java b/Towny/src/main/java/com/palmergames/bukkit/towny/object/Resident.java index bfa1e2c7f8..dfae774ec1 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/object/Resident.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/object/Resident.java @@ -833,6 +833,13 @@ public List getTownsOutlawedIn() { return TownyUniverse.getInstance().getTowns().stream().filter(t -> t.hasOutlaw(this)).collect(Collectors.toList()); } + /** + * @return All towns that the resident is trusted in. + */ + public List getTownsTrustedIn() { + return TownyUniverse.getInstance().getTowns().stream().filter(t -> t.hasTrustedResident(this)).collect(Collectors.toList()); + } + @Override public boolean hasTownBlock(TownBlock townBlock) { return townBlocks.contains(townBlock); diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/permissions/PermissionNodes.java b/Towny/src/main/java/com/palmergames/bukkit/towny/permissions/PermissionNodes.java index a3be68768e..f489248f1e 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/permissions/PermissionNodes.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/permissions/PermissionNodes.java @@ -267,6 +267,7 @@ public enum PermissionNodes { TOWNY_COMMAND_RESIDENT_TAX("towny.command.resident.tax"), TOWNY_COMMAND_RESIDENT_PLOTLIST("towny.command.resident.plotlist"), TOWNY_COMMAND_RESIDENT_OUTLAWLIST("towny.command.resident.outlawlist"), + TOWNY_COMMAND_RESIDENT_TRUSTLIST("towny.command.resident.trustlist"), TOWNY_COMMAND_RESIDENT_JAIL("towny.command.resident.jail"), TOWNY_COMMAND_RESIDENT_SET("towny.command.resident.set.*"), TOWNY_COMMAND_RESIDENT_SET_PERM("towny.command.resident.set.perm"), diff --git a/Towny/src/main/resources/lang/en-US.yml b/Towny/src/main/resources/lang/en-US.yml index 802110d29c..f6d13efd7a 100644 --- a/Towny/src/main/resources/lang/en-US.yml +++ b/Towny/src/main/resources/lang/en-US.yml @@ -2557,6 +2557,7 @@ msg_err_name_validation_used_in_command_structure: "%s is used in the command st msg_town_being_deleted_because_no_residents: "%s is being deleted because it lost its last resident." outlawed_in: "Outlawed in" +trusted_in: "Trusted in" msg_warning_town_deposit_hint: "To put money in your town bank use /town deposit [amount]." diff --git a/Towny/src/main/resources/plugin.yml b/Towny/src/main/resources/plugin.yml index 5c9fe3c320..f8902f49f3 100644 --- a/Towny/src/main/resources/plugin.yml +++ b/Towny/src/main/resources/plugin.yml @@ -664,6 +664,7 @@ permissions: towny.command.resident.list: true towny.command.resident.plotlist: true towny.command.resident.outlawlist: true + towny.command.resident.trustlist: true towny.command.resident.set.*: true towny.command.resident.otherresident: true towny.command.resident.tax: true diff --git a/Towny/src/main/resources/townyperms.yml b/Towny/src/main/resources/townyperms.yml index 308ccfd085..800722ac84 100644 --- a/Towny/src/main/resources/townyperms.yml +++ b/Towny/src/main/resources/townyperms.yml @@ -31,6 +31,7 @@ nomad: - towny.command.resident.set.about - towny.command.resident.jail - towny.command.resident.outlawlist + - towny.command.resident.trustlist - towny.command.town.allylist - towny.command.town.enemylist From 44008c6925a4fe3dfe799d4ce71737d598a91af2 Mon Sep 17 00:00:00 2001 From: Flyn <84115766+flyncodes@users.noreply.github.com> Date: Tue, 11 Aug 2026 16:52:06 +0100 Subject: [PATCH 2/3] Add townyperms config migration --- Towny/src/main/resources/config-migration.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Towny/src/main/resources/config-migration.json b/Towny/src/main/resources/config-migration.json index 2eaaf15ac9..1937e2ac1e 100644 --- a/Towny/src/main/resources/config-migration.json +++ b/Towny/src/main/resources/config-migration.json @@ -959,5 +959,15 @@ "value": ",END_PORTAL_FRAME" } ] - } + }, + { + "version": "0.103.3.0", + "changes": [ + { + "type": "TOWNYPERMS_ADD", + "path": "nomad", + "value": "towny.command.resident.trustlist" + } + ] + }, ] From 7af8bd026120823ecd4226b60e7ce8ac4fe79dc9 Mon Sep 17 00:00:00 2001 From: Flyn <84115766+flyncodes@users.noreply.github.com> Date: Tue, 11 Aug 2026 16:55:03 +0100 Subject: [PATCH 3/3] Change townyperms config migration version --- Towny/src/main/resources/config-migration.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Towny/src/main/resources/config-migration.json b/Towny/src/main/resources/config-migration.json index 1937e2ac1e..19bb9b9f33 100644 --- a/Towny/src/main/resources/config-migration.json +++ b/Towny/src/main/resources/config-migration.json @@ -961,7 +961,7 @@ ] }, { - "version": "0.103.3.0", + "version": "0.103.2.1", "changes": [ { "type": "TOWNYPERMS_ADD",