mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 03:44:54 -04:00
parser: angle, rotation, block_position
This commit is contained in:
parent
0ae6d1a60b
commit
8508442b35
@ -19,6 +19,9 @@ 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.coordinate.angle.AngleParser
|
||||||
|
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.vec2.Vec2Parser
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.vec2.Vec2Parser
|
||||||
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.vec3.Vec3Parser
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.vec3.Vec3Parser
|
||||||
import de.bixilon.minosoft.commands.parser.minecraft.range.RangeParserFactory
|
import de.bixilon.minosoft.commands.parser.minecraft.range.RangeParserFactory
|
||||||
@ -54,6 +57,9 @@ object ArgumentParserFactories : DefaultFactory<ArgumentParserFactory<*>>(
|
|||||||
|
|
||||||
Vec2Parser,
|
Vec2Parser,
|
||||||
Vec3Parser,
|
Vec3Parser,
|
||||||
|
BlockPositionParser,
|
||||||
|
AngleParser,
|
||||||
|
RotationParser,
|
||||||
|
|
||||||
DummyParser,
|
DummyParser,
|
||||||
|
|
||||||
@ -63,7 +69,6 @@ object ArgumentParserFactories : DefaultFactory<ArgumentParserFactory<*>>(
|
|||||||
|
|
||||||
/* TODO:
|
/* TODO:
|
||||||
minecraft:game_profile
|
minecraft:game_profile
|
||||||
minecraft:block_pos
|
|
||||||
minecraft:column_pos
|
minecraft:column_pos
|
||||||
minecraft:block_state
|
minecraft:block_state
|
||||||
minecraft:block_predicate
|
minecraft:block_predicate
|
||||||
@ -78,8 +83,6 @@ minecraft:objective
|
|||||||
minecraft:objective_criteria
|
minecraft:objective_criteria
|
||||||
minecraft:operation
|
minecraft:operation
|
||||||
minecraft:particle
|
minecraft:particle
|
||||||
minecraft:rotation
|
|
||||||
minecraft:angle
|
|
||||||
minecraft:scoreboard_slot
|
minecraft:scoreboard_slot
|
||||||
minecraft:score_holder
|
minecraft:score_holder
|
||||||
minecraft:swizzle
|
minecraft:swizzle
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.errors.ReaderError
|
||||||
|
import de.bixilon.minosoft.commands.util.CommandReader
|
||||||
|
|
||||||
|
class CaretNotAllowedError(
|
||||||
|
reader: CommandReader,
|
||||||
|
pointer: Int,
|
||||||
|
) : ReaderError(reader, pointer - 1, pointer)
|
@ -14,11 +14,12 @@
|
|||||||
package de.bixilon.minosoft.commands.parser.minecraft.coordinate
|
package de.bixilon.minosoft.commands.parser.minecraft.coordinate
|
||||||
|
|
||||||
import de.bixilon.minosoft.commands.parser.brigadier._float.FloatParser.Companion.readFloat
|
import de.bixilon.minosoft.commands.parser.brigadier._float.FloatParser.Companion.readFloat
|
||||||
|
import de.bixilon.minosoft.commands.parser.brigadier._int.IntParser.Companion.readInt
|
||||||
import de.bixilon.minosoft.commands.util.CommandReader
|
import de.bixilon.minosoft.commands.util.CommandReader
|
||||||
|
|
||||||
object CoordinateParserUtil {
|
object CoordinateParserUtil {
|
||||||
|
|
||||||
fun CommandReader.readCoordinateOrNull(): Coordinate? {
|
fun CommandReader.readCoordinateOrNull(decimal: Boolean = true, caret: Boolean = true): Coordinate? {
|
||||||
val peek = peek() ?: return null
|
val peek = peek() ?: return null
|
||||||
val type = when (peek) {
|
val type = when (peek) {
|
||||||
'~'.code -> {
|
'~'.code -> {
|
||||||
@ -27,12 +28,15 @@ object CoordinateParserUtil {
|
|||||||
}
|
}
|
||||||
'^'.code -> {
|
'^'.code -> {
|
||||||
read()
|
read()
|
||||||
|
if (!caret) {
|
||||||
|
throw CaretNotAllowedError(this, pointer)
|
||||||
|
}
|
||||||
CoordinateRelatives.CARET
|
CoordinateRelatives.CARET
|
||||||
}
|
}
|
||||||
else -> CoordinateRelatives.NONE
|
else -> CoordinateRelatives.NONE
|
||||||
}
|
}
|
||||||
|
|
||||||
val offset = if (peekWhitespaces() == 0) readFloat() else null
|
val offset = if (peekWhitespaces() == 0) if (decimal) readFloat() else readInt()?.toFloat() else null
|
||||||
if (offset == null && type == CoordinateRelatives.NONE) {
|
if (offset == null && type == CoordinateRelatives.NONE) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -42,7 +46,7 @@ object CoordinateParserUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun CommandReader.readCoordinate(): Coordinate {
|
fun CommandReader.readCoordinate(decimal: Boolean = true, caret: Boolean = true): Coordinate {
|
||||||
readResult { readCoordinateOrNull() }.let { return it.result ?: throw InvalidCoordinateError(this, it) }
|
readResult { readCoordinateOrNull(decimal, caret) }.let { return it.result ?: throw InvalidCoordinateError(this, it) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.angle
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.ArgumentParser
|
||||||
|
import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.Coordinate
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.CoordinateParserUtil.readCoordinate
|
||||||
|
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 AngleParser : ArgumentParser<Coordinate>, ArgumentParserFactory<AngleParser> {
|
||||||
|
override val RESOURCE_LOCATION: ResourceLocation = "minecraft:angle".toResourceLocation()
|
||||||
|
override val examples: List<Any> = listOf("~", "5", "~10.8")
|
||||||
|
override val placeholder = ChatComponent.of("<angle>")
|
||||||
|
|
||||||
|
override fun parse(reader: CommandReader): Coordinate {
|
||||||
|
return reader.readCoordinate(caret = false) // ToDo: Check min/max?
|
||||||
|
}
|
||||||
|
|
||||||
|
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,22 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.block
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.Coordinate
|
||||||
|
|
||||||
|
data class BlockCoordinate(
|
||||||
|
val x: Coordinate,
|
||||||
|
val y: Coordinate,
|
||||||
|
val z: Coordinate,
|
||||||
|
)
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.block
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.ArgumentParser
|
||||||
|
import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.CoordinateParserUtil.readCoordinate
|
||||||
|
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 BlockPositionParser : ArgumentParser<BlockCoordinate>, ArgumentParserFactory<BlockPositionParser> {
|
||||||
|
override val RESOURCE_LOCATION: ResourceLocation = "minecraft:block_pos".toResourceLocation()
|
||||||
|
override val examples: List<Any> = listOf("~ ~ ~", "^ ^ ^", "5 5 5")
|
||||||
|
override val placeholder = ChatComponent.of("<block position>")
|
||||||
|
|
||||||
|
override fun parse(reader: CommandReader): BlockCoordinate {
|
||||||
|
return BlockCoordinate(reader.readCoordinate(decimal = false), reader.readCoordinate(decimal = false), reader.readCoordinate(decimal = false))
|
||||||
|
}
|
||||||
|
|
||||||
|
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,21 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.rotation
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.Coordinate
|
||||||
|
|
||||||
|
data class Rotation(
|
||||||
|
val yaw: Coordinate,
|
||||||
|
val pitch: Coordinate,
|
||||||
|
)
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.rotation
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.ArgumentParser
|
||||||
|
import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.CoordinateParserUtil.readCoordinate
|
||||||
|
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 RotationParser : ArgumentParser<Rotation>, ArgumentParserFactory<RotationParser> {
|
||||||
|
override val RESOURCE_LOCATION: ResourceLocation = "minecraft:rotation".toResourceLocation()
|
||||||
|
override val examples: List<Any> = listOf("~ ~", "5 5", "~10.8 ~12")
|
||||||
|
override val placeholder = ChatComponent.of("<rotation>")
|
||||||
|
|
||||||
|
override fun parse(reader: CommandReader): Rotation {
|
||||||
|
return Rotation(reader.readCoordinate(caret = false), reader.readCoordinate(caret = false)) // ToDo: Check min/max?
|
||||||
|
}
|
||||||
|
|
||||||
|
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,68 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.angle
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.CaretNotAllowedError
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.Coordinate
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.CoordinateRelatives
|
||||||
|
import de.bixilon.minosoft.commands.util.CommandReader
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.assertThrows
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
|
||||||
|
internal class AngleParserTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readNumeric() {
|
||||||
|
val reader = CommandReader("123")
|
||||||
|
assertEquals(AngleParser.parse(reader), Coordinate(CoordinateRelatives.NONE, 123.0f))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readTilde() {
|
||||||
|
val reader = CommandReader("~123")
|
||||||
|
assertEquals(AngleParser.parse(reader), Coordinate(CoordinateRelatives.TILDE, 123.0f))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readNumber() {
|
||||||
|
val reader = CommandReader("12")
|
||||||
|
assertEquals(AngleParser.parse(reader), Coordinate(CoordinateRelatives.NONE, 12.0f))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readRelative() {
|
||||||
|
val reader = CommandReader("~")
|
||||||
|
assertEquals(AngleParser.parse(reader), Coordinate(CoordinateRelatives.TILDE, 0.0f))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readRelativeOffset() {
|
||||||
|
val reader = CommandReader("~42")
|
||||||
|
assertEquals(AngleParser.parse(reader), Coordinate(CoordinateRelatives.TILDE, 42.0f))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readCaret() {
|
||||||
|
val reader = CommandReader("^")
|
||||||
|
assertThrows<CaretNotAllowedError> { AngleParser.parse(reader) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readDecimal() {
|
||||||
|
val reader = CommandReader("12.34")
|
||||||
|
assertEquals(AngleParser.parse(reader), Coordinate(CoordinateRelatives.NONE, 12.34f))
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.block
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.Coordinate
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.CoordinateRelatives
|
||||||
|
import de.bixilon.minosoft.commands.util.CommandReader
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
|
||||||
|
internal class BlockPositionParserTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readNumber() {
|
||||||
|
val reader = CommandReader("12 34 45")
|
||||||
|
assertEquals(BlockPositionParser.parse(reader), BlockCoordinate(Coordinate(CoordinateRelatives.NONE, 12.0f), Coordinate(CoordinateRelatives.NONE, 34.0f), Coordinate(CoordinateRelatives.NONE, 45.0f)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readRelative() {
|
||||||
|
val reader = CommandReader("~ ~ ~")
|
||||||
|
assertEquals(BlockPositionParser.parse(reader), BlockCoordinate(Coordinate(CoordinateRelatives.TILDE, 0.0f), Coordinate(CoordinateRelatives.TILDE, 0.0f), Coordinate(CoordinateRelatives.TILDE, 0.0f)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readRelativeOffset() {
|
||||||
|
val reader = CommandReader("~12 ~34 ~45")
|
||||||
|
assertEquals(BlockPositionParser.parse(reader), BlockCoordinate(Coordinate(CoordinateRelatives.TILDE, 12.0f), Coordinate(CoordinateRelatives.TILDE, 34.0f), Coordinate(CoordinateRelatives.TILDE, 45.0f)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun readDecimal() {
|
||||||
|
val reader = CommandReader("12 34 45.56")
|
||||||
|
assertEquals(BlockPositionParser.parse(reader), BlockCoordinate(Coordinate(CoordinateRelatives.NONE, 12.0f), Coordinate(CoordinateRelatives.NONE, 34.0f), Coordinate(CoordinateRelatives.NONE, 45.0f)))
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* 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.coordinate.rotation
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.Coordinate
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.CoordinateRelatives
|
||||||
|
import de.bixilon.minosoft.commands.parser.minecraft.coordinate.InvalidCoordinateError
|
||||||
|
import de.bixilon.minosoft.commands.util.CommandReader
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.assertThrows
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
|
||||||
|
internal class RotationParserTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testNumeric() {
|
||||||
|
val reader = CommandReader("12 34")
|
||||||
|
assertEquals(RotationParser.parse(reader), Rotation(Coordinate(CoordinateRelatives.NONE, 12.0f), Coordinate(CoordinateRelatives.NONE, 34.0f)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testMixed() {
|
||||||
|
val reader = CommandReader("~12 34")
|
||||||
|
assertEquals(RotationParser.parse(reader), Rotation(Coordinate(CoordinateRelatives.TILDE, 12.0f), Coordinate(CoordinateRelatives.NONE, 34.0f)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testTilde() {
|
||||||
|
val reader = CommandReader("~ ~")
|
||||||
|
assertEquals(RotationParser.parse(reader), Rotation(Coordinate(CoordinateRelatives.TILDE, 0.0f), Coordinate(CoordinateRelatives.TILDE, 0.0f)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testInvalid() {
|
||||||
|
val reader = CommandReader("hm")
|
||||||
|
assertThrows<InvalidCoordinateError> { RotationParser.parse(reader) }
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user