mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-01-13 03:40:45 +01:00
Adds ability for the start sign to use a locale file set by the addon
https://github.com/BentoBoxWorld/bentobox/issues/372 Signs must have [start] as their first line to be converted.
This commit is contained in:
parent
a7365ef805
commit
d907506fda
@ -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;
|
||||
|
@ -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]";
|
||||
}
|
||||
|
@ -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()));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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)}.
|
||||
|
Loading…
Reference in New Issue
Block a user