mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 10:25:06 -04:00
parsers: component
This commit is contained in:
parent
7d40f0ec2d
commit
93d76eb51f
@ -19,6 +19,7 @@ import de.bixilon.minosoft.commands.parser.brigadier._int.IntParser
|
||||
import de.bixilon.minosoft.commands.parser.brigadier._long.LongParser
|
||||
import de.bixilon.minosoft.commands.parser.brigadier.bool.BooleanParser
|
||||
import de.bixilon.minosoft.commands.parser.brigadier.string.StringParser
|
||||
import de.bixilon.minosoft.commands.parser.minecraft.component.ChatComponentParser
|
||||
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.angle.AngleParser
|
||||
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.block.BlockPositionParser
|
||||
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.rotation.RotationParser
|
||||
@ -61,6 +62,8 @@ object ArgumentParserFactories : DefaultFactory<ArgumentParserFactory<*>>(
|
||||
AngleParser,
|
||||
RotationParser,
|
||||
|
||||
ChatComponentParser,
|
||||
|
||||
DummyParser,
|
||||
|
||||
ScoreHolderParser,
|
||||
@ -75,7 +78,6 @@ minecraft:block_predicate
|
||||
minecraft:item_stack
|
||||
minecraft:item_predicate
|
||||
minecraft:color
|
||||
minecraft:component
|
||||
minecraft:message
|
||||
minecraft:nbt
|
||||
minecraft:nbt_path
|
||||
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.commands.parser.minecraft.component
|
||||
|
||||
import de.bixilon.minosoft.commands.parser.ArgumentParser
|
||||
import de.bixilon.minosoft.commands.parser.brigadier.string.StringParser
|
||||
import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory
|
||||
import de.bixilon.minosoft.commands.util.CommandReader
|
||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||
import de.bixilon.minosoft.data.text.ChatComponent
|
||||
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
|
||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||
|
||||
object ChatComponentParser : ArgumentParser<ChatComponent>, ArgumentParserFactory<ChatComponentParser> {
|
||||
override val RESOURCE_LOCATION: ResourceLocation = "minecraft:component".toResourceLocation()
|
||||
override val examples: List<Any> = listOf("", "hello", """{"text":"hello world"}""")
|
||||
private val parser = StringParser(StringParser.StringModes.GREEDY)
|
||||
override val placeholder = ChatComponent.of("<angle>")
|
||||
|
||||
override fun parse(reader: CommandReader): ChatComponent {
|
||||
if (!reader.canPeek()) {
|
||||
return ChatComponent.EMPTY
|
||||
}
|
||||
val pointer = reader.pointer
|
||||
try {
|
||||
return ChatComponent.of(reader.readJson())
|
||||
} catch (ignored: Throwable) {
|
||||
}
|
||||
reader.pointer = pointer
|
||||
return ChatComponent.of(parser.parse(reader))
|
||||
}
|
||||
|
||||
override fun getSuggestions(reader: CommandReader): List<Any> {
|
||||
if (reader.readString()?.isBlank() != false) {
|
||||
return examples
|
||||
}
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
override fun read(buffer: PlayInByteBuffer) = this
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.commands.parser.minecraft.component
|
||||
|
||||
import de.bixilon.minosoft.commands.util.CommandReader
|
||||
import org.junit.jupiter.api.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
|
||||
internal class ChatComponentParserTest {
|
||||
|
||||
@Test
|
||||
fun readEmpty() {
|
||||
val reader = CommandReader("")
|
||||
assertEquals(ChatComponentParser.parse(reader).message, "")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun readHelloWorld() {
|
||||
val reader = CommandReader("hello world")
|
||||
assertEquals(ChatComponentParser.parse(reader).message, "hello world")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun readBasicJsonText() {
|
||||
val reader = CommandReader("""{"text":"hello world"}""")
|
||||
assertEquals(ChatComponentParser.parse(reader).message, "hello world")
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user