diff --git a/src/main/java/world/bentobox/bentobox/api/addons/exceptions/AddonRequestException.java b/src/main/java/world/bentobox/bentobox/api/addons/exceptions/AddonRequestException.java index eb5f8e264..29ec3f051 100644 --- a/src/main/java/world/bentobox/bentobox/api/addons/exceptions/AddonRequestException.java +++ b/src/main/java/world/bentobox/bentobox/api/addons/exceptions/AddonRequestException.java @@ -1,9 +1,5 @@ package world.bentobox.bentobox.api.addons.exceptions; -import world.bentobox.bentobox.api.addons.request.AddonRequestBuilder; - -import java.util.UUID; - public class AddonRequestException extends AddonException { private static final long serialVersionUID = -5698456013070166174L; diff --git a/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java b/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java index da1535c59..877ab2af7 100644 --- a/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java +++ b/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java @@ -16,4 +16,5 @@ public class TextVariables { public static final String PERMISSION = "[permission]"; public static final String SPAWN_HERE = "[spawn_here]"; public static final String VERSION = "[version]"; + public static final String START_TEXT = "[start]"; } diff --git a/src/main/java/world/bentobox/bentobox/managers/LocalesManager.java b/src/main/java/world/bentobox/bentobox/managers/LocalesManager.java index 3b4032553..c67c870d0 100644 --- a/src/main/java/world/bentobox/bentobox/managers/LocalesManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/LocalesManager.java @@ -52,6 +52,25 @@ public class LocalesManager { // No translation could be gotten from the player's locale, trying more generic solutions return get(reference); } + + /** + * Gets the translated String corresponding to the reference from the locale file for this user. + * @param user the User + * @param reference a reference that can be found in a locale file + * @param default to return if the reference cannot be found anywhere + * @return the translated String from the User's locale or from the server's locale or from the en-US locale, or null. + */ + public String getOrDefault(User user, String reference, String defaultText) { + // Make sure the user is not null + if (user != null) { + BentoBoxLocale locale = languages.get(user.getLocale()); + if (locale != null && locale.contains(reference)) { + return locale.get(reference); + } + } + // No translation could be gotten from the player's locale, trying more generic solutions + return getOrDefault(reference, defaultText); + } /** * Gets the translated String corresponding to the reference from the server's or the en-US locale file. @@ -69,6 +88,18 @@ public class LocalesManager { } return null; } + + /** + * Gets the translated String corresponding to the reference from the server's or the en-US locale file + * or if it cannot be found anywhere, use the default text supplied. + * @param reference a reference that can be found in a locale file + * @param default text to return if the reference cannot be found anywhere + * @return the translated String from the server's locale or from the en-US locale, or default. + */ + public String getOrDefault(String reference, String defaultText) { + String result = get(reference); + return result == null ? defaultText : result; + } /** * Copies all the locale files from the plugin jar to the filesystem. @@ -183,4 +214,6 @@ public class LocalesManager { loadLocalesFromFile(BENTOBOX); plugin.getAddonsManager().getAddons().forEach(addon -> loadLocalesFromFile(addon.getDescription().getName())); } + + } diff --git a/src/main/java/world/bentobox/bentobox/schems/Clipboard.java b/src/main/java/world/bentobox/bentobox/schems/Clipboard.java index 443a07680..d52eaa5c3 100644 --- a/src/main/java/world/bentobox/bentobox/schems/Clipboard.java +++ b/src/main/java/world/bentobox/bentobox/schems/Clipboard.java @@ -18,6 +18,7 @@ import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.DyeColor; import org.bukkit.Location; import org.bukkit.Material; @@ -221,6 +222,19 @@ public class Clipboard { island.setSpawnPoint(block.getWorld().getEnvironment(), spawnPoint); return; } + // Handle locale text for starting sign + // Sign text must be stored under the addon's name.sign.line0,1,2,3 in the yaml file + if (island != null && !lines.isEmpty() && lines.get(0).equalsIgnoreCase(TextVariables.START_TEXT)) { + // Get the addon that is operating in this world + plugin.getIWM().getAddon(island.getWorld()).ifPresent(addon -> { + lines.clear(); + for (int i = 0; i < 4; i++) { + lines.add(ChatColor.translateAlternateColorCodes('&', plugin.getLocalesManager().getOrDefault(User.getInstance(island.getOwner()), + addon.getDescription().getName().toLowerCase() + ".sign.line" + i,""))); + } + }); + } + // Get the name of the player String name = TextVariables.NAME; if (island != null) { name = plugin.getPlayers().getName(island.getOwner()); @@ -229,6 +243,7 @@ public class Clipboard { for (int i = 0 ; i < lines.size(); i++) { sign.setLine(i, lines.get(i).replace(TextVariables.NAME, name)); } + // Update the sign sign.update(); } diff --git a/src/test/java/world/bentobox/bentobox/api/localization/TextVariablesTest.java b/src/test/java/world/bentobox/bentobox/api/localization/TextVariablesTest.java new file mode 100644 index 000000000..bee49f61f --- /dev/null +++ b/src/test/java/world/bentobox/bentobox/api/localization/TextVariablesTest.java @@ -0,0 +1,30 @@ +/** + * + */ +package world.bentobox.bentobox.api.localization; + +import static org.junit.Assert.*; + +import org.junit.Test; + +/** + * Test class just to check that these constants don't accidentally change + * @author tastybento + * + */ +public class TextVariablesTest { + + @Test + public void test() { + assertEquals("[name]", TextVariables.NAME); + assertEquals("[description]", TextVariables.DESCRIPTION); + assertEquals("[number]", TextVariables.NUMBER); + assertEquals("[rank]", TextVariables.RANK); + assertEquals("[label]", TextVariables.LABEL); + assertEquals("[permission]", TextVariables.PERMISSION); + assertEquals("[spawn_here]", TextVariables.SPAWN_HERE); + assertEquals("[version]", TextVariables.VERSION); + assertEquals("[start]", TextVariables.START_TEXT); + } + +} diff --git a/src/test/java/world/bentobox/bentobox/managers/LocalesManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/LocalesManagerTest.java index b12f43a93..aae3bb2e2 100644 --- a/src/test/java/world/bentobox/bentobox/managers/LocalesManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/LocalesManagerTest.java @@ -123,6 +123,28 @@ public class LocalesManagerTest { LocalesManager lm = new LocalesManager(plugin); assertNull(lm.get("test.test.test")); } + + /** + * Test method for {@link world.bentobox.bentobox.managers.LocalesManager#getOrDefault(java.lang.String, java.lang.String)}. + * @throws IOException + */ + @Test + public void testGetOrDefaultStringString() throws IOException { + makeFakeLocaleFile(); + LocalesManager lm = new LocalesManager(plugin); + assertEquals("test string", lm.getOrDefault("test.test", "")); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.LocalesManager#getOrDefault(java.lang.String, java.lang.String)}. + * @throws IOException + */ + @Test + public void testGetOrDefaultStringStringFail() throws IOException { + makeFakeLocaleFile(); + LocalesManager lm = new LocalesManager(plugin); + assertEquals("", lm.getOrDefault("test.test.test","")); + } /** * Test method for {@link world.bentobox.bentobox.managers.LocalesManager#get(world.bentobox.bentobox.api.user.User, java.lang.String)}. @@ -148,6 +170,19 @@ public class LocalesManagerTest { when(user.getLocale()).thenReturn(Locale.US); assertEquals("test string", lm.get(user, "test.test")); } + + /** + * Test method for {@link world.bentobox.bentobox.managers.LocalesManager#getOrDefault(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. + * @throws IOException + */ + @Test + public void testGetOrDefaultUserStringString() throws IOException { + makeFakeLocaleFile(); + LocalesManager lm = new LocalesManager(plugin); + User user = mock(User.class); + when(user.getLocale()).thenReturn(Locale.US); + assertEquals("test string", lm.getOrDefault(user, "test.test", "")); + } /** * Test method for {@link world.bentobox.bentobox.managers.LocalesManager#get(world.bentobox.bentobox.api.user.User, java.lang.String)}. @@ -175,6 +210,19 @@ public class LocalesManagerTest { assertNull(lm.get(user, "test.test.test")); } + /** + * Test method for {@link world.bentobox.bentobox.managers.LocalesManager#getOrDefault(world.bentobox.bentobox.api.user.User, java.lang.String, java.lang.String)}. + * @throws IOException + */ + @Test + public void testGetOrDefaultUserStringStringFail() throws IOException { + makeFakeLocaleFile(); + LocalesManager lm = new LocalesManager(plugin); + User user = mock(User.class); + when(user.getLocale()).thenReturn(Locale.US); + assertEquals("", lm.getOrDefault(user, "test.test.test", "")); + } + /** * Test method for {@link world.bentobox.bentobox.managers.LocalesManager#getAvailableLocales(boolean)}.