Compare commits

...

6 Commits

Author SHA1 Message Date
Preva1l
e398306cd7
enhancement: role weight fallback to luckperms placeholder (#238) 2024-12-16 20:00:25 +01:00
AlexDev_
9cb20be6e0 Fixed problem with regex 2024-12-15 22:10:10 +01:00
AlexDev_
a14c8eb2ea Fixed problem with placeholder replacements 2024-12-15 21:44:31 +01:00
AlexDev_
d47ee75d5b Added a delay on join 2024-12-13 23:19:48 +01:00
AlexDev_
e17d36deb5 Added more information about multi line strings 2024-12-12 16:38:13 +01:00
AlexDev_
6796f4402f Removed server displaynames section from docs 2024-12-04 20:36:48 +01:00
6 changed files with 51 additions and 32 deletions

View File

@ -46,4 +46,35 @@ is equivalent to
```yaml
foo: "bar 1\nbar 2\nbar 3\n"
```
```
## List of multi lines strings
> **Note:** The examples above are generic examples on how yaml works in multi line. If you want to use multi line in headers & footers you need to provide a list of multi line strings like in the example below.
```yaml
headers:
- |
<rainbow:!2>Running Velocitab by William278 & AlexDev_</rainbow>
<gray>Second line of the first element</gray>
<yellow>Third line of the first element</yellow>
- |
<rainbow:!4>Running Velocitab by William278 & AlexDev_</rainbow>
<gray>Second line of the second element</gray>
<yellow>Third line of the second element</yellow>
footers:
- <gray>There are currently %players_online%/%max_players_online% players online</gray>
- |
<gray> Test 1 </gray>
<yellow> Test 2 </yellow>
```
In this example the header will switch between the 2 elements, but it will always display all the 3 lines.
The footer in this example will switch between 2 elements, the first one is just a simple string, the second element will display 2 lines since it's a multi line string
<figure style="text-align: center;">
<img src="https://i.imgur.com/YKu1RWi.gif" />
<figcaption>Example of a header and footer with multi line strings</figcaption>
</figure>

View File

@ -40,20 +40,6 @@ Placeholders can be included in the header, footer and player name format of the
You can find a list of common primary language subtags [here](https://en.wikipedia.org/wiki/IETF_language_tag#List_of_common_primary_language_subtags).
### Customising server display names
You can make use of the `server_display_names` feature in `config.yml` to customise how server display name appear when using the `%server%` placeholder. In the below example, if a user is connected to a server with the name "`very-long-server-`name" and the player name format for the group that server belongs to includes a `%server%` placeholder, the placeholder would be replaced with "`VSLN`" instead of the full server name.
<details>
<summary>Server display names (config.yml)</summary>
```yaml
# Define custom names to be shown in the TAB list for specific server names.
# If no custom display name is provided for a server, its original name will be used.
server_display_names:
very-long-server-name: VLSN
```
</details>
## PlaceholderAPI support
To use PlaceholderAPI placeholders in Velocitab, install the [PAPIProxyBridge](https://modrinth.com/plugin/papiproxybridge) library plugin on your Velocity proxy and all Minecraft spigot servers on your network, and ensure the PAPI hook option is enabled in your Velocitab [[Config File]]. You can then include PAPI placeholders in your formats as you would any of the default placeholders.

View File

@ -106,7 +106,8 @@ public enum Placeholder {
.orElse(getPlaceholderFallback(plugin, "%luckperms_primary_group_name%"))),
ROLE_DISPLAY_NAME((plugin, player) -> player.getRole().getDisplayName()
.orElse(getPlaceholderFallback(plugin, "%luckperms_primary_group_name%"))),
ROLE_WEIGHT((plugin, player) -> player.getRoleWeightString()),
ROLE_WEIGHT((plugin, player) -> player.getRoleWeightString()
.orElse(getPlaceholderFallback(plugin, "%luckperms_meta_weight%"))),
SERVER_GROUP((plugin, player) -> player.getGroup().name()),
SERVER_GROUP_INDEX((plugin, player) -> Integer.toString(player.getServerGroupPosition(plugin))),
DEBUG_TEAM_NAME((plugin, player) -> plugin.getFormatter().escape(player.getLastTeamName().orElse(""))),
@ -117,7 +118,7 @@ public enum Placeholder {
private final static Pattern VELOCITAB_PATTERN = Pattern.compile("<velocitab_.*?>");
private final static Pattern TEST = Pattern.compile("<.*?>");
private final static Pattern CONDITION_REPLACER = Pattern.compile("<velocitab_rel_condition:[^:]*:");
private final static Pattern PLACEHOLDER_PATTERN = Pattern.compile("%.*?%");
private final static Pattern PLACEHOLDER_PATTERN = Pattern.compile("%.*?%", Pattern.DOTALL);
private final static String DELIMITER = ":::";
private final static Map<String, String> SYMBOL_SUBSTITUTES = Map.of(
"<", "*LESS*",
@ -285,7 +286,7 @@ public enum Placeholder {
final Pair<String, Map<String, String>> replaced = replaceInternal(format, plugin, player);
if (!PLACEHOLDER_PATTERN.matcher(replaced.first()).find()) {
return CompletableFuture.completedFuture(replaced.first());
return CompletableFuture.completedFuture(applyPlaceholderReplacements(format, player, replaced.second()));
}
final List<String> placeholders = extractPlaceholders(replaced.first());
@ -296,7 +297,8 @@ public enum Placeholder {
return Map.of();
})
)
.orElse(CompletableFuture.completedFuture(Maps.newHashMap())).exceptionally(e -> {
.orElse(CompletableFuture.completedFuture(Maps.newHashMap()))
.exceptionally(e -> {
plugin.log(Level.ERROR, "An error occurred whilst parsing placeholders: " + e.getMessage());
return Map.of();
})

View File

@ -30,7 +30,7 @@ import java.util.Optional;
@RequiredArgsConstructor
public class Role implements Comparable<Role> {
public static final int DEFAULT_WEIGHT = 0;
public static final int DEFAULT_WEIGHT = -1;
public static final Role DEFAULT_ROLE = new Role(DEFAULT_WEIGHT, null, null, null, null);
@Getter
private final int weight;
@ -65,8 +65,11 @@ public class Role implements Comparable<Role> {
}
@NotNull
protected String getWeightString() {
return Integer.toString(weight);
protected Optional<String> getWeightString() {
if (weight == -1) {
return Optional.empty();
}
return Optional.of(Integer.toString(weight));
}
@Override

View File

@ -96,7 +96,7 @@ public final class TabPlayer implements Comparable<TabPlayer> {
}
@NotNull
public String getRoleWeightString() {
public Optional<String> getRoleWeightString() {
return getRole().getWeightString();
}
@ -263,7 +263,7 @@ public final class TabPlayer implements Comparable<TabPlayer> {
@Override
public int compareTo(@NotNull TabPlayer o) {
final int roleDifference = role.compareTo(o.role);
if (roleDifference == 0) {
if (roleDifference <= 0) {
return player.getUsername().compareTo(o.player.getUsername());
}
return roleDifference;

View File

@ -146,15 +146,12 @@ public class TabListListener {
final Group group = groupOptional.get();
plugin.getScoreboardManager().resetCache(joined, group);
if (justQuit.contains(joined.getUniqueId())) {
plugin.getServer().getScheduler().buildTask(plugin,
() -> tabList.joinPlayer(joined, group))
.delay(250, TimeUnit.MILLISECONDS)
.schedule();
return;
}
tabList.joinPlayer(joined, group);
final int delay = justQuit.contains(joined.getUniqueId()) ? 100 : 250;
plugin.getServer().getScheduler().buildTask(plugin,
() -> tabList.joinPlayer(joined, group))
.delay(delay, TimeUnit.MILLISECONDS)
.schedule();
}
@SuppressWarnings("deprecation")