mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 02:45:13 -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._long.LongParser
|
||||||
import de.bixilon.minosoft.commands.parser.brigadier.bool.BooleanParser
|
import de.bixilon.minosoft.commands.parser.brigadier.bool.BooleanParser
|
||||||
import de.bixilon.minosoft.commands.parser.brigadier.string.StringParser
|
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.angle.AngleParser
|
||||||
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.block.BlockPositionParser
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.block.BlockPositionParser
|
||||||
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.rotation.RotationParser
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.rotation.RotationParser
|
||||||
@ -61,6 +62,8 @@ object ArgumentParserFactories : DefaultFactory<ArgumentParserFactory<*>>(
|
|||||||
AngleParser,
|
AngleParser,
|
||||||
RotationParser,
|
RotationParser,
|
||||||
|
|
||||||
|
ChatComponentParser,
|
||||||
|
|
||||||
DummyParser,
|
DummyParser,
|
||||||
|
|
||||||
ScoreHolderParser,
|
ScoreHolderParser,
|
||||||
@ -75,7 +78,6 @@ minecraft:block_predicate
|
|||||||
minecraft:item_stack
|
minecraft:item_stack
|
||||||
minecraft:item_predicate
|
minecraft:item_predicate
|
||||||
minecraft:color
|
minecraft:color
|
||||||
minecraft:component
|
|
||||||
minecraft:message
|
minecraft:message
|
||||||
minecraft:nbt
|
minecraft:nbt
|
||||||
minecraft:nbt_path
|
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