diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java index 1338c3327..095b9f2ac 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandGoCommand.java @@ -287,7 +287,7 @@ public static String resolveName(String typed, Set names) { * @return the normalized form */ private static String normalize(String s) { - return Util.stripColor(s).toLowerCase(Locale.ENGLISH).replaceAll("\\s+", " ").trim(); + return Util.stripColor(s).toLowerCase(Locale.ENGLISH).replace('_', ' ').replaceAll("\\s+", " ").trim(); } /** diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java index 0af742d9a..e51f73468 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandGoCommandTest.java @@ -334,6 +334,22 @@ void testResolveNameCaseAndSpaceInsensitive() { assertEquals("My Home", IslandGoCommand.resolveName("my HOME", Set.of("My Home", "Hut"))); } + /** + * Underscores and spaces are interchangeable when resolving destination names. + */ + @Test + void testResolveNameUnderscoreAndSpaceEquivalent() { + assertEquals("Happy Place", IslandGoCommand.resolveName("happy_place", Set.of("Happy Place", "Hut"))); + } + + /** + * Underscore normalization must not choose arbitrarily between equivalent names. + */ + @Test + void testResolveNameAmbiguousUnderscoreAndSpaceEquivalentReturnsNull() { + assertNull(IslandGoCommand.resolveName("HAPPY PLACE", Set.of("Happy Place", "Happy_Place"))); + } + /** * Test method for {@link IslandGoCommand#resolveName(String, Set)} */