diff --git a/api/src/main/java/net/kyori/adventure/text/BlockNBTComponentImpl.java b/api/src/main/java/net/kyori/adventure/text/BlockNBTComponentImpl.java index 6f40b9297..9e490d3c3 100644 --- a/api/src/main/java/net/kyori/adventure/text/BlockNBTComponentImpl.java +++ b/api/src/main/java/net/kyori/adventure/text/BlockNBTComponentImpl.java @@ -326,8 +326,8 @@ public String toString() { } static final class Tokens { - static final Pattern LOCAL_PATTERN = Pattern.compile("^\\^(\\d+(\\.\\d+)?) \\^(\\d+(\\.\\d+)?) \\^(\\d+(\\.\\d+)?)$"); - static final Pattern WORLD_PATTERN = Pattern.compile("^(~?)(\\d+) (~?)(\\d+) (~?)(\\d+)$"); + static final Pattern LOCAL_PATTERN = Pattern.compile("^\\^(-?\\d+(\\.\\d+)?) \\^(-?\\d+(\\.\\d+)?) \\^(-?\\d+(\\.\\d+)?)$"); + static final Pattern WORLD_PATTERN = Pattern.compile("^(~?)(-?\\d+) (~?)(-?\\d+) (~?)(-?\\d+)$"); static final String LOCAL_SYMBOL = "^"; static final String RELATIVE_SYMBOL = "~"; diff --git a/api/src/test/java/net/kyori/adventure/text/BlockNBTComponentTest.java b/api/src/test/java/net/kyori/adventure/text/BlockNBTComponentTest.java index 53eb23de9..ff5f23207 100644 --- a/api/src/test/java/net/kyori/adventure/text/BlockNBTComponentTest.java +++ b/api/src/test/java/net/kyori/adventure/text/BlockNBTComponentTest.java @@ -115,4 +115,20 @@ void testWorldPosParsing() { BlockNBTComponent.Pos.fromString("12 ~3 1200") ); } + + @Test + void testLocalPosParsingWithNegatives() { + assertEquals( + BlockNBTComponent.LocalPos.localPos(-4.5, 3, -35.67), + BlockNBTComponent.Pos.fromString("^-4.5 ^3 ^-35.67") + ); + } + + @Test + void testWorldPosParsingWithNegatives() { + assertEquals( + BlockNBTComponent.WorldPos.worldPos(BlockNBTComponent.WorldPos.Coordinate.relative(-6), BlockNBTComponent.WorldPos.Coordinate.absolute(-34), BlockNBTComponent.WorldPos.Coordinate.relative(13)), + BlockNBTComponent.Pos.fromString("~-6 -34 ~13") + ); + } }