diff --git a/docs/parameters.md b/docs/parameters.md index 0e705414..d2bb4880 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -90,4 +90,13 @@ Negative Allowed - `No` Multiple Allowed - `No` Example - `rolledback:true` -This parameter allows you to filter by rollback state. If true, then it will only show results that have already been rolled back. If false, then it will only show results that have not been rolled back. \ No newline at end of file +This parameter allows you to filter by rollback state. If true, then it will only show results that have already been rolled back. If false, then it will only show results that have not been rolled back. + +### Chat Message +Key - `chatmessage:` +Value - `true` or `false` +Negative Allowed - `No` +Multiple Allowed - `No` +Example - `chatmessage:true` + +This parameter allows to sent data as chat message. If true, then it will also send a chat message when using networking. If false, then it will only send using networking. \ No newline at end of file diff --git a/src/main/kotlin/com/github/quiltservertools/ledger/actionutils/ActionSearchParams.kt b/src/main/kotlin/com/github/quiltservertools/ledger/actionutils/ActionSearchParams.kt index 26c95e1f..abd798b1 100644 --- a/src/main/kotlin/com/github/quiltservertools/ledger/actionutils/ActionSearchParams.kt +++ b/src/main/kotlin/com/github/quiltservertools/ledger/actionutils/ActionSearchParams.kt @@ -11,6 +11,7 @@ data class ActionSearchParams( val before: Instant?, val after: Instant?, val rolledBack: Boolean?, + val chatMessage: Boolean?, var actions: MutableSet>?, var objects: MutableSet>?, var sourceNames: MutableSet>?, @@ -22,6 +23,7 @@ data class ActionSearchParams( builder.before, builder.after, builder.rolledBack, + builder.chatMessage, builder.actions, builder.objects, builder.sourceNames, @@ -29,7 +31,7 @@ data class ActionSearchParams( builder.worlds ) - fun isEmpty() = listOf(bounds, before, after, actions, objects, sourceNames, sourcePlayerIds, worlds, rolledBack).all { it == null } + fun isEmpty() = listOf(bounds, before, after, actions, objects, sourceNames, sourcePlayerIds, worlds, rolledBack, chatMessage).all { it == null } companion object { inline fun build(block: Builder.() -> Unit) = Builder().apply(block).build() @@ -40,6 +42,7 @@ data class ActionSearchParams( var before: Instant? = null var after: Instant? = null var rolledBack: Boolean? = null + var chatMessage: Boolean? = null var actions: MutableSet>? = null var objects: MutableSet>? = null var sourceNames: MutableSet>? = null diff --git a/src/main/kotlin/com/github/quiltservertools/ledger/commands/arguments/SearchParamArgument.kt b/src/main/kotlin/com/github/quiltservertools/ledger/commands/arguments/SearchParamArgument.kt index 50162aa0..52800aed 100644 --- a/src/main/kotlin/com/github/quiltservertools/ledger/commands/arguments/SearchParamArgument.kt +++ b/src/main/kotlin/com/github/quiltservertools/ledger/commands/arguments/SearchParamArgument.kt @@ -2,6 +2,7 @@ package com.github.quiltservertools.ledger.commands.arguments import com.github.quiltservertools.ledger.actionutils.ActionSearchParams import com.github.quiltservertools.ledger.commands.parameters.ActionParameter +import com.github.quiltservertools.ledger.commands.parameters.ChatmessageParameter import com.github.quiltservertools.ledger.commands.parameters.DimensionParameter import com.github.quiltservertools.ledger.commands.parameters.ObjectParameter import com.github.quiltservertools.ledger.commands.parameters.RangeParameter @@ -41,6 +42,7 @@ object SearchParamArgument { paramSuggesters["before"] = Parameter(TimeParameter()) paramSuggesters["after"] = Parameter(TimeParameter()) paramSuggesters["rolledback"] = Parameter(RollbackStatusParameter()) + paramSuggesters["chatmessage"] = Parameter(ChatmessageParameter()) } fun argument(name: String): RequiredArgumentBuilder { @@ -173,6 +175,10 @@ object SearchParamArgument { val rolledBack = value as Boolean builder.rolledBack = rolledBack } + "chatmessage" -> { + val chatMessage = value as Boolean + builder.chatMessage = chatMessage + } } } diff --git a/src/main/kotlin/com/github/quiltservertools/ledger/commands/parameters/ChatmessageParameter.kt b/src/main/kotlin/com/github/quiltservertools/ledger/commands/parameters/ChatmessageParameter.kt new file mode 100644 index 00000000..ad4380c9 --- /dev/null +++ b/src/main/kotlin/com/github/quiltservertools/ledger/commands/parameters/ChatmessageParameter.kt @@ -0,0 +1,24 @@ +package com.github.quiltservertools.ledger.commands.parameters + +import com.mojang.brigadier.StringReader +import com.mojang.brigadier.arguments.BoolArgumentType +import com.mojang.brigadier.context.CommandContext +import com.mojang.brigadier.exceptions.CommandSyntaxException +import com.mojang.brigadier.suggestion.Suggestions +import com.mojang.brigadier.suggestion.SuggestionsBuilder +import net.minecraft.server.command.ServerCommandSource +import java.util.concurrent.CompletableFuture + +class ChatmessageParameter : SimpleParameter() { + override fun parse(stringReader: StringReader): Boolean = try { + BoolArgumentType.bool().parse(stringReader) + } catch (e: CommandSyntaxException) { + stringReader.readString() + false // TODO Maybe rework parser to alert errors and not require a default value + } + + override fun getSuggestions( + context: CommandContext, + builder: SuggestionsBuilder + ): CompletableFuture = BoolArgumentType.bool().listSuggestions(context, builder) +} diff --git a/src/main/kotlin/com/github/quiltservertools/ledger/utility/MessageUtils.kt b/src/main/kotlin/com/github/quiltservertools/ledger/utility/MessageUtils.kt index 81823329..4c39456e 100644 --- a/src/main/kotlin/com/github/quiltservertools/ledger/utility/MessageUtils.kt +++ b/src/main/kotlin/com/github/quiltservertools/ledger/utility/MessageUtils.kt @@ -29,6 +29,9 @@ object MessageUtils { for (n in results.page..results.pages) { val networkResults = DatabaseManager.searchActions(results.searchParams, n) networkResults.actions.forEach { + if (results.searchParams.chatMessage) { + actionType -> source.sendFeedback({ actionType.getMessage() }, false) + } val packet = ActionPacket() packet.populate(it) ServerPlayNetworking.send(source.player, packet.channel, packet.buf)