diff --git a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java
index 64cfca1c603..a3b58b6b9d3 100644
--- a/src/main/java/ch/njol/skript/expressions/ExprHoverList.java
+++ b/src/main/java/ch/njol/skript/expressions/ExprHoverList.java
@@ -1,60 +1,40 @@
-/**
- * This file is part of Skript.
- *
- * Skript is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Skript is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Skript. If not, see .
- *
- * Copyright Peter Güttinger, SkriptLang team and contributors
- */
package ch.njol.skript.expressions;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event;
-import org.eclipse.jdt.annotation.Nullable;
-
-import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
-import com.destroystokyo.paper.profile.PlayerProfile;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
-import ch.njol.skript.doc.Description;
-import ch.njol.skript.doc.Events;
-import ch.njol.skript.doc.Examples;
-import ch.njol.skript.doc.Name;
-import ch.njol.skript.doc.RequiredPlugins;
-import ch.njol.skript.doc.Since;
+import ch.njol.skript.doc.*;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.ExpressionType;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
+import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
+import com.destroystokyo.paper.profile.PlayerProfile;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Event;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
@Name("Hover List")
-@Description({"The list when you hover on the player counts of the server in the server list.",
- "This can be changed using texts or players in a server list ping event only. " +
- "Adding players to the list means adding the name of the players.",
- "And note that, for example if there are 5 online players (includes fake online count) " +
- "in the server and the hover list is set to 3 values, Minecraft will show \"... and 2 more ...\" at end of the list."})
-@Examples({"on server list ping:",
+@Description({
+ "The list when you hover on the player counts of the server in the server list.",
+ "This can be changed using texts or players in a server list ping event only. " +
+ "Adding players to the list means adding the name of the players.",
+ "And note that, for example if there are 5 online players (includes fake online count) " +
+ "in the server and the hover list is set to 3 values, Minecraft will show \"... and 2 more ...\" at end of the list."
+})
+@Examples({
+ "on server list ping:",
"\tclear the hover list",
"\tadd \"&aWelcome to the &6Minecraft &aserver!\" to the hover list",
"\tadd \"\" to the hover list # A blank line",
- "\tadd \"&cThere are &6%online players count% &conline players!\" to the hover list"})
+ "\tadd \"&cThere are &6%online players count% &conline players!\" to the hover list"
+})
@Since("2.3")
@RequiredPlugins("Paper 1.12.2 or newer")
@Events("server list ping")
@@ -62,11 +42,12 @@ public class ExprHoverList extends SimpleExpression {
static {
Skript.registerExpression(ExprHoverList.class, String.class, ExpressionType.SIMPLE,
- "[the] [custom] [(player|server)] (hover|sample) ([message] list|message)",
- "[the] [custom] player [(hover|sample)] list");
+ "[the] [custom] [player|server] (hover|sample) ([message] list|message)",
+ "[the] [custom] player [hover|sample] list");
}
private static final boolean PAPER_EVENT_EXISTS = Skript.classExists("com.destroystokyo.paper.event.server.PaperServerListPingEvent");
+ private static final boolean HAS_NEW_LISTED_PLAYER_INFO = Skript.classExists("com.destroystokyo.paper.event.server.PaperServerListPingEvent$ListedPlayerInfo");
@Override
public boolean init(Expression>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
@@ -82,13 +63,19 @@ public boolean init(Expression>[] exprs, int matchedPattern, Kleenean isDelaye
@Override
@Nullable
- public String[] get(Event e) {
- if (!(e instanceof PaperServerListPingEvent))
+ public String[] get(Event event) {
+ if (!(event instanceof PaperServerListPingEvent))
return null;
- return ((PaperServerListPingEvent) e).getPlayerSample().stream()
+ if (HAS_NEW_LISTED_PLAYER_INFO) {
+ return ((PaperServerListPingEvent) event).getListedPlayers().stream()
+ .map(PaperServerListPingEvent.ListedPlayerInfo::name)
+ .toArray(String[]::new);
+ } else {
+ return ((PaperServerListPingEvent) event).getPlayerSample().stream()
.map(PlayerProfile::getName)
.toArray(String[]::new);
+ }
}
@Override
@@ -111,24 +98,56 @@ public Class>[] acceptChange(ChangeMode mode) {
@SuppressWarnings("null")
@Override
- public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
- if (!(e instanceof PaperServerListPingEvent))
+ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) {
+ if (!(event instanceof PaperServerListPingEvent))
return;
+ if (HAS_NEW_LISTED_PLAYER_INFO) {
+ List values = new ArrayList<>();
+ if (mode != ChangeMode.DELETE && mode != ChangeMode.RESET) {
+ for (Object object : delta) {
+ if (object instanceof Player) {
+ Player player = (Player) object;
+ values.add(new PaperServerListPingEvent.ListedPlayerInfo(player.getName(), player.getUniqueId()));
+ } else {
+ values.add(new PaperServerListPingEvent.ListedPlayerInfo((String) object, UUID.randomUUID()));
+ }
+ }
+ }
+
+ List sample = ((PaperServerListPingEvent) event).getListedPlayers();
+ switch (mode) {
+ case SET:
+ sample.clear();
+ // $FALL-THROUGH$
+ case ADD:
+ sample.addAll(values);
+ break;
+ case REMOVE:
+ sample.removeAll(values);
+ break;
+ case DELETE:
+ case RESET:
+ sample.clear();
+ break;
+ }
+ return;
+ }
+
List values = new ArrayList<>();
if (mode != ChangeMode.DELETE && mode != ChangeMode.RESET) {
- for (Object o : delta) {
- if (o instanceof Player) {
- Player player = ((Player) o);
+ for (Object object : delta) {
+ if (object instanceof Player) {
+ Player player = (Player) object;
values.add(Bukkit.createProfile(player.getUniqueId(), player.getName()));
} else {
- values.add(Bukkit.createProfile(UUID.randomUUID(), (String) o));
+ values.add(Bukkit.createProfile(UUID.randomUUID(), (String) object));
}
}
}
- List sample = ((PaperServerListPingEvent) e).getPlayerSample();
- switch (mode){
+ List sample = ((PaperServerListPingEvent) event).getPlayerSample();
+ switch (mode) {
case SET:
sample.clear();
sample.addAll(values);
@@ -142,6 +161,7 @@ public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
case DELETE:
case RESET:
sample.clear();
+ break;
}
}
@@ -160,4 +180,4 @@ public String toString(@Nullable Event e, boolean debug) {
return "the hover list";
}
-}
\ No newline at end of file
+}