Skip to content

Commit ae4968b

Browse files
committed
command to add member to nation
1 parent 15e3094 commit ae4968b

File tree

4 files changed

+68
-0
lines changed

4 files changed

+68
-0
lines changed

src/main/java/pro/cloudnode/smp/smpcore/Messages.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,10 @@ public Messages() {
430430
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("error.already-citizen-player")), Placeholder.unparsed("player", Optional.ofNullable(member.player().getName()).orElse(member.player().getUniqueId().toString())));
431431
}
432432

433+
public @NotNull Component errorOtherCitizen(final @NotNull Member member) {
434+
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("error.other-citizen")), Placeholder.unparsed("player", Optional.ofNullable(member.player().getName()).orElse(member.player().getUniqueId().toString())));
435+
}
436+
433437
public @NotNull Component errorNotPlayer() {
434438
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("error.not-player")));
435439
}

src/main/java/pro/cloudnode/smp/smpcore/Permission.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,21 @@ public final class Permission {
122122
*/
123123
public static @NotNull String NATION_LEAVE = "smpcore.nation.leave";
124124

125+
/**
126+
* Add member to your nation
127+
*/
128+
public static @NotNull String NATION_CITIZEN_ADD = "smpcore.nation.citizens.add";
129+
130+
/**
131+
* Add member to any nation
132+
*/
133+
public static @NotNull String NATION_CITIZEN_ADD_OTHER = "smpcore.nation.citizens.add.other";
134+
135+
/**
136+
* Add member to nation even if they are already in another
137+
*/
138+
public static @NotNull String NATION_CITIZEN_ADD_SWITCH = "smpcore.nation.citizens.add.switch";
139+
125140
/**
126141
* Appoint nation citizen as vice-leader
127142
*/

src/main/java/pro/cloudnode/smp/smpcore/command/NationCommand.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ public boolean citizens(
129129
case "list" -> listCitizens(member, nation, sender);
130130
case "kick" -> kickCitizen(member, nation, sender, command, argsSubset);
131131
case "invite" -> inviteCitizen(member, nation, sender, command, argsSubset);
132+
case "add" -> addCitizen(member, nation, sender, command, argsSubset);
132133
default -> citizensSubcommand(member, nation, sender, "/" + label);
133134
};
134135
}
@@ -171,6 +172,14 @@ public boolean citizensSubcommand(
171172
}, "Invite to join nation."
172173
));
173174

175+
if ((!other && sender.hasPermission(Permission.NATION_CITIZEN_ADD))
176+
|| sender.hasPermission(Permission.NATION_CITIZEN_ADD_OTHER))
177+
subCommandBuilder.append(Component.newline()).append(SMPCore.messages().subCommandEntry(
178+
label + " add ", "add", new Messages.SubCommandArgument[]{
179+
new Messages.SubCommandArgument("member", true)
180+
}, "Add member to nation."
181+
));
182+
174183
return sendMessage(sender, subCommandBuilder.build());
175184
}
176185

@@ -268,6 +277,45 @@ public boolean inviteCitizen(
268277
return true;
269278
}
270279

280+
public boolean addCitizen(
281+
final @Nullable Member member,
282+
final @NotNull Nation nation,
283+
final @NotNull CommandSender sender,
284+
final @NotNull String label,
285+
final @NotNull String @NotNull [] args
286+
) {
287+
if (
288+
!sender.hasPermission(Permission.NATION_CITIZEN_ADD)
289+
|| (
290+
(member == null || !nation.id.equals(member.nationID))
291+
&& !sender.hasPermission(Permission.NATION_CITIZEN_ADD_OTHER)
292+
)
293+
)
294+
return sendMessage(sender, SMPCore.messages().errorNoPermission());
295+
296+
if (args.length < 1)
297+
return sendMessage(sender, SMPCore.messages().usage(label, "<member>"));
298+
299+
final @NotNull var targetPlayer = sender.getServer().getOfflinePlayer(args[0]);
300+
final @NotNull var target = Member.get(targetPlayer);
301+
302+
if (target.isEmpty())
303+
return sendMessage(sender, SMPCore.messages().errorNotMember(targetPlayer));
304+
305+
if (nation.id.equals(target.get().nationID))
306+
return sendMessage(sender, SMPCore.messages().errorAlreadyCitizen(target.get()));
307+
308+
if (target.get().nationID != null && !sender.hasPermission(Permission.NATION_CITIZEN_ADD_SWITCH))
309+
return sendMessage(sender, SMPCore.messages().errorOtherCitizen(target.get()));
310+
311+
final var currentNation = target.get().nation().orElseThrow(() -> new IllegalStateException("Could not find nation " + target.get().nationID + " of member " + target.get().uuid));
312+
if (currentNation.leaderUUID.equals(targetPlayer.getUniqueId()))
313+
return sendMessage(sender, SMPCore.messages().errorKickLeadership());
314+
315+
nation.add(target.get());
316+
return true;
317+
}
318+
271319
public boolean join(
272320
final @Nullable Member member,
273321
final @NotNull CommandSender sender,

src/main/resources/messages.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ error:
9393
already-citizen: <red>(!) You are already a citizen of a nation.</red>
9494
already-citizen-nation: <red>(!) You are already a citizen of <gray><nation></gray>.</red>
9595
already-citizen-player: <red>(!) Citizen <gray><player></gray> is already in the nation.</red>
96+
other-citizen: <red>(!) Member <gray><player></gray> is a citizen of another nation.</red>
9697
not-invited: <red>(!) You were not invited to join <gray><nation></gray>.</red>
9798
already-requested-join: <red>(!) You have already requested to join <gray><nation></gray>.</red>
9899
already-invited: <red>(!) You have already invited <gray><player></gray> to join the nation.</red>

0 commit comments

Comments
 (0)