Skip to content

Commit 044dc30

Browse files
committed
send invites to join nation & access requests to join
1 parent d863d7a commit 044dc30

File tree

5 files changed

+99
-7
lines changed

5 files changed

+99
-7
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,19 @@ public boolean send() {
9191
final @NotNull Member member = member();
9292
final @Nullable Player player = member.player().getPlayer();
9393
final @NotNull Nation nation = nation();
94-
if (player != null)
95-
player.sendMessage(SMPCore.messages().nationJoinRequestSent(nation));
94+
95+
// invited
96+
if (!mode) {
97+
if (player != null)
98+
player.sendMessage(SMPCore.messages().nationJoinInviteReceived(nation));
99+
return true;
100+
}
101+
102+
// requested
96103
return Command.sendMessage(
97104
Audience.audience(
98105
nation().onlinePlayers().stream()
99-
.filter(p -> p.hasPermission(Permission.NATION_JOIN_REQUEST_ACCEPT))
106+
.filter(p -> p.hasPermission(Permission.NATION_INVITE))
100107
.toList()
101108
),
102109
SMPCore.messages().nationJoinRequestReceived(member)

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,17 @@ public Messages() {
311311
.ofNullable(member.player().getName()).orElse(member.uuid.toString())));
312312
}
313313

314+
public @NotNull Component nationJoinInviteSent(final @NotNull Member member) {
315+
return MiniMessage.miniMessage()
316+
.deserialize(Objects.requireNonNull(config.getString("nation.join.invite-sent")), Placeholder.unparsed("player", Optional
317+
.ofNullable(member.player().getName()).orElse(member.uuid.toString())));
318+
}
319+
320+
public @NotNull Component nationJoinInviteReceived(final @NotNull Nation nation) {
321+
return MiniMessage.miniMessage()
322+
.deserialize(Objects.requireNonNull(config.getString("nation.join.invite-received")), Placeholder.unparsed("nation", nation.name));
323+
}
324+
314325
public @NotNull Component nationJoinJoined(final @NotNull Member member) {
315326
return MiniMessage.miniMessage()
316327
.deserialize(Objects.requireNonNull(config.getString("nation.join.joined")), Placeholder.unparsed("player", Optional
@@ -415,6 +426,10 @@ public Messages() {
415426
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("error.already-citizen-nation")), Placeholder.unparsed("nation", nation.name));
416427
}
417428

429+
public @NotNull Component errorAlreadyCitizen(final @NotNull Member member) {
430+
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())));
431+
}
432+
418433
public @NotNull Component errorNotPlayer() {
419434
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("error.not-player")));
420435
}
@@ -439,6 +454,10 @@ public Messages() {
439454
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("error.already-requested-join")), Placeholder.unparsed("nation", nation.name));
440455
}
441456

457+
public @NotNull Component errorAlreadyInvited(final @NotNull Member member) {
458+
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("error.already-invited")), Placeholder.unparsed("player", Optional.ofNullable(member.player().getName()).orElse(member.player().getUniqueId().toString())));
459+
}
460+
442461
public record SubCommandArgument(@NotNull String name, boolean required) {
443462
public @NotNull Component component() {
444463
return required ? SMPCore.messages().subCommandArgumentRequired(name) : SMPCore.messages()

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,12 @@ public final class Permission {
110110
/**
111111
* Send invitation to join your nation
112112
*/
113-
public static @NotNull String NATION_INVITE_SEND = "smpcore.nation.invite";
113+
public static @NotNull String NATION_INVITE = "smpcore.nation.invite";
114114

115115
/**
116116
* Send invitation to join any nation
117117
*/
118-
public static @NotNull String NATION_INVITE_SEND_OTHER = "smpcore.nation.invite.other";
118+
public static @NotNull String NATION_INVITE_OTHER = "smpcore.nation.invite.other";
119119

120120
/**
121121
* Accept request to join your nation

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

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ public boolean citizens(
123123
return switch (args[0]) {
124124
case "list" -> listMembers(member, nation, sender);
125125
case "kick" -> kickMember(member, nation, sender, command, argsSubset);
126+
case "invite" -> inviteMember(member, nation, sender, command, argsSubset);
126127
default -> citizensSubcommand(member, nation, sender, "/" + label);
127128
};
128129
}
@@ -157,6 +158,14 @@ public boolean citizensSubcommand(
157158
}, "Revoke citizenship."
158159
));
159160

161+
if ((!other && sender.hasPermission(Permission.NATION_INVITE))
162+
|| sender.hasPermission(Permission.NATION_INVITE_OTHER))
163+
subCommandBuilder.append(Component.newline()).append(SMPCore.messages().subCommandEntry(
164+
label + " invite ", "invite", new Messages.SubCommandArgument[]{
165+
new Messages.SubCommandArgument("member", true)
166+
}, "Invite to join nation."
167+
));
168+
160169
return sendMessage(sender, subCommandBuilder.build());
161170
}
162171

@@ -256,6 +265,7 @@ public boolean join(
256265
Date.from(Instant.now().plusSeconds(SMPCore.config().joinRequestExpireMinutes() * 60L))
257266
);
258267
newRequest.save();
268+
sendMessage(sender, SMPCore.messages().nationJoinRequestSent(nation.get()));
259269
return newRequest.send();
260270
}
261271

@@ -265,4 +275,56 @@ public boolean join(
265275
request.get().accept();
266276
return true;
267277
}
278+
279+
public boolean inviteMember(
280+
final @Nullable Member member,
281+
final @NotNull Nation nation,
282+
final @NotNull CommandSender sender,
283+
final @NotNull String label,
284+
final @NotNull String @NotNull [] args
285+
) {
286+
if (
287+
!sender.hasPermission(Permission.NATION_INVITE)
288+
|| (
289+
(member == null || !nation.id.equals(member.nationID))
290+
&& !sender.hasPermission(Permission.NATION_INVITE_OTHER)
291+
)
292+
)
293+
return sendMessage(sender, SMPCore.messages().errorNoPermission());
294+
295+
if (args.length < 1)
296+
return sendMessage(sender, SMPCore.messages().usage(label, "<member>"));
297+
298+
final var targetPlayer = sender.getServer().getOfflinePlayer(args[0]);
299+
final @NotNull var target = Member.get(targetPlayer);
300+
301+
if (target.isEmpty())
302+
return sendMessage(sender, SMPCore.messages().errorNotMember(targetPlayer));
303+
304+
if (nation.id.equals(target.get().nationID))
305+
return sendMessage(sender, SMPCore.messages().errorAlreadyCitizen(target.get()));
306+
307+
final @NotNull var request = CitizenRequest.get(target.get(), nation);
308+
309+
if (request.isEmpty() || request.get().expired()) {
310+
request.ifPresent(CitizenRequest::delete);
311+
312+
final var newRequest = new CitizenRequest(
313+
target.get().uuid,
314+
nation.id,
315+
false,
316+
new Date(),
317+
Date.from(Instant.now().plusSeconds(SMPCore.config().joinRequestExpireMinutes() * 60L))
318+
);
319+
newRequest.save();
320+
sendMessage(sender, SMPCore.messages().nationJoinInviteSent(target.get()));
321+
return newRequest.send();
322+
}
323+
324+
if (!request.get().mode)
325+
return sendMessage(sender, SMPCore.messages().errorAlreadyInvited(target.get()));
326+
327+
request.get().accept();
328+
return true;
329+
}
268330
}

src/main/resources/messages.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ nation:
6666
join:
6767
request-sent: <green>(!) Your request to join <gray><nation></gray> has been sent.</green>
6868
request-received: <green>(!) Member <gray><player></gray> requests to join your nation.</green>
69-
joined: <green>(!) Member <gray><player></gray> has joined your nation!</green>
70-
left: <gold>(!) Member <gray><player></gray> has left your nation!</gold>
69+
invite-sent: <green>(!) You have invited <gray><player></gray> to join the nation.</green>
70+
invite-received: <green>(!) You have been invited to join <gray><nation></gray>!</green>
71+
joined: <green>(!) Member <gray><player></gray> has joined the nation!</green>
72+
left: <gold>(!) Member <gray><player></gray> has left the nation!</gold>
7173
error:
7274
no-permission: <red>(!) You don't have permission to use this command.</red>
7375
player-not-banned: <red>(!) Player <gray><player></gray> is not banned and is not a member.</red>
@@ -90,5 +92,7 @@ error:
9092
nation-not-found: <red>(!) Nation <gray><nation></gray> not found.</red>
9193
already-citizen: <red>(!) You are already a citizen of a nation.</red>
9294
already-citizen-nation: <red>(!) You are already a citizen of <gray><nation></gray>.</red>
95+
already-citizen-player: <red>(!) Citizen <gray><player></gray> is already in the nation.</red>
9396
not-invited: <red>(!) You were not invited to join <gray><nation></gray>.</red>
9497
already-requested-join: <red>(!) You have already requested to join <gray><nation></gray>.</red>
98+
already-invited: <red>(!) You have already invited <gray><player></gray> to join the nation.</red>

0 commit comments

Comments
 (0)