@@ -20,19 +20,25 @@ package com.lambda.command.commands
2020import com.lambda.Lambda.mc
2121import com.lambda.brigadier.CommandResult.Companion.failure
2222import com.lambda.brigadier.CommandResult.Companion.success
23+ import com.lambda.brigadier.argument.greedyString
2324import com.lambda.brigadier.argument.literal
2425import com.lambda.brigadier.argument.string
2526import com.lambda.brigadier.argument.uuid
2627import com.lambda.brigadier.argument.value
2728import com.lambda.brigadier.execute
2829import com.lambda.brigadier.executeWithResult
30+ import com.lambda.brigadier.optional
2931import com.lambda.brigadier.required
32+ import com.lambda.command.CommandRegistry.prefix
3033import com.lambda.command.LambdaCommand
3134import com.lambda.config.categories.FriendCategory
3235import com.lambda.interaction.handlers.FriendHandler
36+ import com.lambda.interaction.handlers.FriendImporter
3337import com.lambda.network.mojang.getProfile
3438import com.lambda.threading.runIO
3539import com.lambda.util.CommunicationUtils.info
40+ import com.lambda.util.CommunicationUtils.logError
41+ import com.lambda.util.CommunicationUtils.warn
3642import com.lambda.util.extension.CommandBuilder
3743import com.lambda.util.text.ClickEvents
3844import com.lambda.util.text.buildText
@@ -41,13 +47,15 @@ import com.lambda.util.text.styled
4147import kotlinx.coroutines.runBlocking
4248import net.minecraft.command.CommandSource.suggestMatching
4349import java.awt.Color
50+ import java.io.File
4451import java.util.*
4552
4653@Suppress(" unused" )
4754object FriendCommand : LambdaCommand(
4855 name = " friends" ,
49- usage = " friends <add <name> | add-uuid <uuid> | remove <name> | remove-uuid <uuid>>" ,
50- description = " Add or remove a friend"
56+ usage = " friends <add <name> | add-uuid <uuid> | remove <name> | remove-uuid <uuid> | import [path]>" ,
57+ description = " Add, remove or import friends" ,
58+ examples = listOf("friends import", "friends import <path>")
5159) {
5260 override fun CommandBuilder.create () {
5361 execute {
@@ -60,8 +68,7 @@ object FriendCommand : LambdaCommand(
6068 literal(" Your friends (${FriendHandler .friends.size} ):\n " )
6169
6270 FriendHandler .friends.forEachIndexed { index, uuid ->
63- val profile = FriendHandler .latestGameProfile(uuid)
64- val displayName = profile?.name ? : uuid.toString()
71+ val displayName = FriendHandler .friendDisplayName(uuid)
6572
6673 literal(" ${index + 1 } . $displayName " )
6774 styled(
@@ -83,6 +90,10 @@ object FriendCommand : LambdaCommand(
8390 }
8491 }
8592 )
93+
94+ if (FriendHandler .friends.any { FriendHandler .gameProfile(it) == null }) {
95+ runIO { FriendHandler .resolveMissing() }
96+ }
8697 }
8798 }
8899
@@ -203,5 +214,26 @@ object FriendCommand : LambdaCommand(
203214 }
204215 }
205216 }
217+
218+ required(literal(" import" )) {
219+ optional(greedyString(" path" )) { file ->
220+ execute {
221+ runIO {
222+ val target = file?.let { File (it().value().trim().removeSurrounding(" \" " )) }
223+ ?.toPath()
224+ ? : runCatching { FriendImporter .pickFile() }.getOrElse {
225+ this @FriendCommand.logError(" The file picker could not be opened. Try $prefix$name import <path>." )
226+ return @runIO
227+ }
228+ ? : run {
229+ this @FriendCommand.warn(" Import cancelled." )
230+ return @runIO
231+ }
232+
233+ FriendImporter .importFile(target)
234+ }
235+ }
236+ }
237+ }
206238 }
207239}
0 commit comments