From 7302df8cf743450ac55ec327ed83e70d66357dd6 Mon Sep 17 00:00:00 2001 From: Glare Date: Sat, 4 Mar 2023 15:35:07 -0600 Subject: [PATCH] /paper entity list QOL improvements (#8876) This PR implements a QOL feature to /paper entity list where it will allow a user to teleport to chunk. --- patches/server/Paper-command.patch | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/patches/server/Paper-command.patch b/patches/server/Paper-command.patch index f5e7afd76..53655b2fa 100644 --- a/patches/server/Paper-command.patch +++ b/patches/server/Paper-command.patch @@ -302,6 +302,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; ++ ++import net.kyori.adventure.text.Component; ++import net.kyori.adventure.text.event.ClickEvent; ++import net.kyori.adventure.text.event.HoverEvent; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerChunkCache; @@ -311,6 +315,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import org.apache.commons.lang3.tuple.MutablePair; +import org.apache.commons.lang3.tuple.Pair; +import org.bukkit.Bukkit; ++import org.bukkit.HeightMap; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.CraftWorld; @@ -320,6 +325,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import org.checkerframework.framework.qual.DefaultQualifier; + +import static net.kyori.adventure.text.Component.text; ++import static net.kyori.adventure.text.format.NamedTextColor.GREEN; +import static net.kyori.adventure.text.format.NamedTextColor.RED; + +@DefaultQualifier(NonNull.class) @@ -411,7 +417,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + sender.sendMessage("Entity: " + name + " Total Ticking: " + (info.getLeft() - nonTicking) + ", Total Non-Ticking: " + nonTicking); + info.getRight().entrySet().stream() + .sorted((a, b) -> !a.getValue().equals(b.getValue()) ? b.getValue() - a.getValue() : a.getKey().toString().compareTo(b.getKey().toString())) -+ .limit(10).forEach(e -> sender.sendMessage(" " + e.getValue() + ": " + e.getKey().x + ", " + e.getKey().z + (chunkProviderServer.isPositionTicking(e.getKey().toLong()) ? " (Ticking)" : " (Non-Ticking)"))); ++ .limit(10).forEach(e -> { ++ final int x = (e.getKey().x << 4) + 8; ++ final int z = (e.getKey().z << 4) + 8; ++ final Component message = text(" " + e.getValue() + ": " + e.getKey().x + ", " + e.getKey().z + (chunkProviderServer.isPositionTicking(e.getKey().toLong()) ? " (Ticking)" : " (Non-Ticking)")) ++ .hoverEvent(HoverEvent.showText(text("Click to teleport to chunk", GREEN))) ++ .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/minecraft:execute as @s in " + world.getWorld().getKey() + " run tp " + x + " " + (world.getWorld().getHighestBlockYAt(x, z, HeightMap.MOTION_BLOCKING) + 1) + " " + z)); ++ sender.sendMessage(message); ++ }); + } else { + List> info = list.entrySet().stream() + .filter(e -> names.contains(e.getKey()))