Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ protected void loadSelf(SkriptAddon addon) {
ExprOnScreenKickMessage::register,
ExprPlayerListHeaderFooter::register,
ExprPlayerListName::register,
ExprPlayerListPriority::register,
ExprQuitMessage::register
);
if (Skript.classExists("io.papermc.paper.event.player.PlayerPickBlockEvent")) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package org.skriptlang.skript.bukkit.entity.player.elements.expressions;

import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Example;
import ch.njol.skript.doc.Keywords;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.expressions.base.SimplePropertyExpression;
import ch.njol.util.Math2;
import ch.njol.util.coll.CollectionUtils;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.registration.SyntaxRegistry;

@Name("Player List Priority")
@Description("""
The priority of the player in the player list in the tab menu.
Used to sort players on the tab list. Lowest priority is at the bottom of tab and highest priority is at the top.
If 2 players have same priority then they will be sorted A-Z (but still be above those with lower priority).
""")
@Example("""
on join:
player has permission "group.mod"
set the player's tab list priority to 5
""")
@Since("INSERT VERSION")
@Keywords({"tablist", "tab list"})
public class ExprPlayerListPriority extends SimplePropertyExpression<Player, Integer> {

public static void register(SyntaxRegistry syntaxRegistry) {
syntaxRegistry.register(SyntaxRegistry.EXPRESSION, infoBuilder(ExprPlayerListPriority.class, Integer.class,
"(player|tab)[ ]list priority", "players", false)
Comment thread
Absolutionism marked this conversation as resolved.
.supplier(ExprPlayerListPriority::new)
.build());
}

@Override
public Integer convert(Player player) {
return player.getPlayerListOrder();
}

@Override
public Class<?> @Nullable [] acceptChange(ChangeMode mode) {
return switch (mode) {
case ADD, REMOVE, SET, RESET -> CollectionUtils.array(Integer.class);
default -> null;
};
}

@Override
public void change(Event event, Object @Nullable [] delta, ChangeMode mode) {
if (delta == null && mode != ChangeMode.RESET) return;
Integer amount = mode == ChangeMode.RESET ? 0 : (Integer) delta[0];
switch (mode) {
case ADD -> {
for (Player player : getExpr().getArray(event)) {
player.setPlayerListOrder((int) Math.max(0, Math2.addClamped(player.getPlayerListOrder(), amount)));
}
}
case REMOVE -> {
for (Player player : getExpr().getArray(event)) {
player.setPlayerListOrder(Math.max(0,player.getPlayerListOrder() - amount));
}
}
case SET -> {
amount = Math.max(0, amount);
for (Player player : getExpr().getArray(event)) {
player.setPlayerListOrder(amount);
}
}
case RESET -> {
for (Player player : getExpr().getArray(event)) {
player.setPlayerListOrder(0);
}
}
}
}

@Override
public Class<Integer> getReturnType() {
return Integer.class;
}

@Override
protected String getPropertyName() {
return "player list priority";
}

}
Comment thread
AnOwlBe marked this conversation as resolved.