mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-01-09 09:57:40 +01:00
Added 'island.name.uniqueness' in the config
Implements https://github.com/BentoBoxWorld/BentoBox/issues/899 Edited IslandsManager#nameExists(...) to strip colors.
This commit is contained in:
parent
f63f73a3b7
commit
eea91b6269
@ -149,6 +149,11 @@ public class Settings implements ConfigObject {
|
||||
@ConfigComment("Sets the maximum length an island custom name cannot exceed.")
|
||||
@ConfigEntry(path = "island.name.max-length")
|
||||
private int nameMaxLength = 20;
|
||||
@ConfigComment("Requires island custom names to be unique in the gamemode the island is in.")
|
||||
@ConfigComment("As a result, only one island per gamemode are allowed to share the same name.")
|
||||
@ConfigComment("Note that island names are purely cosmetics and are not used as a way to programmatically identify islands.")
|
||||
@ConfigEntry(path = "island.name.uniqueness", since = "1.7.0")
|
||||
private boolean nameUniqueness = false;
|
||||
|
||||
@ConfigComment("Remove hostile mob on teleport box radius")
|
||||
@ConfigComment("If hostile mobs are cleared on player teleport, then this sized box will be cleared")
|
||||
@ -395,6 +400,20 @@ public class Settings implements ConfigObject {
|
||||
this.nameMaxLength = nameMaxLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.0
|
||||
*/
|
||||
public boolean isNameUniqueness() {
|
||||
return nameUniqueness;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.0
|
||||
*/
|
||||
public void setNameUniqueness(boolean nameUniqueness) {
|
||||
this.nameUniqueness = nameUniqueness;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pasteSpeed the pasteSpeed to set
|
||||
*/
|
||||
|
@ -29,22 +29,22 @@ public class IslandSetnameCommand extends CompositeCommand {
|
||||
|
||||
@Override
|
||||
public boolean execute(User user, String label, List<String> args) {
|
||||
// Explain command
|
||||
if (args.isEmpty()) {
|
||||
showHelp(this, user);
|
||||
return false;
|
||||
}
|
||||
|
||||
UUID playerUUID = user.getUniqueId();
|
||||
|
||||
if (!getIslands().hasIsland(getWorld(), playerUUID)) {
|
||||
user.sendMessage("general.errors.no-island");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!getIslands().isOwner(getWorld(), playerUUID)) {
|
||||
user.sendMessage("general.errors.not-owner");
|
||||
return false;
|
||||
}
|
||||
// Explain command
|
||||
if (args.isEmpty()) {
|
||||
showHelp(this, user);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Naming the island - join all the arguments with spaces.
|
||||
String name = String.join(" ", args);
|
||||
@ -59,15 +59,20 @@ public class IslandSetnameCommand extends CompositeCommand {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set the name
|
||||
if (user.hasPermission(this.getPermissionPrefix() + "island.name.format")) {
|
||||
getIslands().getIsland(getWorld(), playerUUID).setName(ChatColor.translateAlternateColorCodes('&', name));
|
||||
} else {
|
||||
getIslands().getIsland(getWorld(), playerUUID).setName(name);
|
||||
// Apply colors
|
||||
if (user.hasPermission(getPermissionPrefix() + "island.name.format")) {
|
||||
name = ChatColor.translateAlternateColorCodes('&', name);
|
||||
}
|
||||
|
||||
// Check if the name doesn't already exist in the gamemode
|
||||
if (getSettings().isNameUniqueness() && getIslands().nameExists(getWorld(), name)) {
|
||||
user.sendMessage("commands.island.setname.name-already-exists");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Everything's good!
|
||||
getIslands().getIsland(getWorld(), playerUUID).setName(name);
|
||||
user.sendMessage("general.success");
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.TreeSpecies;
|
||||
@ -1208,6 +1209,7 @@ public class IslandsManager {
|
||||
* @since 1.7.0
|
||||
*/
|
||||
public boolean nameExists(@NonNull World world, @NonNull String name) {
|
||||
return getIslands(world).stream().filter(island -> island.getName() != null).map(Island::getName).anyMatch(n -> n.equals(name));
|
||||
return getIslands(world).stream().filter(island -> island.getName() != null).map(Island::getName)
|
||||
.anyMatch(n -> ChatColor.stripColor(n).equals(ChatColor.stripColor(name)));
|
||||
}
|
||||
}
|
||||
|
@ -439,6 +439,7 @@ commands:
|
||||
description: "set a name for your island"
|
||||
name-too-short: "&cToo short. Minimum size is [number] characters."
|
||||
name-too-long: "&cToo long. Maximum size is [number] characters."
|
||||
name-already-exists: "&cThere is already an island with that name in this gamemode."
|
||||
parameters: "<name>"
|
||||
resetname:
|
||||
description: "reset your island name"
|
||||
|
Loading…
Reference in New Issue
Block a user