From 4151f752f1022587a73d6da8bf75c67ce60e5c97 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/0011-Paper-command.patch | 19 ++++++++++++++++--- patches/server/0842-Don-t-tick-markers.patch | 4 ++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/patches/server/0011-Paper-command.patch b/patches/server/0011-Paper-command.patch index ed72dedb84..20e2de5bee 100644 --- a/patches/server/0011-Paper-command.patch +++ b/patches/server/0011-Paper-command.patch @@ -287,10 +287,10 @@ index 0000000000000000000000000000000000000000..6ff5d42a866d2752c73a766815aa190b +} diff --git a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..9e51b3d1217ad6dc5c0c11d2febac7144e5721af +index 0000000000000000000000000000000000000000..ff99336e0b8131ae161cfa5c4fc83c6905e3dbc8 --- /dev/null +++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java -@@ -0,0 +1,145 @@ +@@ -0,0 +1,158 @@ +package io.papermc.paper.command.subcommands; + +import com.google.common.collect.Maps; @@ -302,6 +302,10 @@ index 0000000000000000000000000000000000000000..9e51b3d1217ad6dc5c0c11d2febac714 +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..9e51b3d1217ad6dc5c0c11d2febac714 +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..9e51b3d1217ad6dc5c0c11d2febac714 +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..9e51b3d1217ad6dc5c0c11d2febac714 + 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())) diff --git a/patches/server/0842-Don-t-tick-markers.patch b/patches/server/0842-Don-t-tick-markers.patch index 32054a3421..eab9b6f78d 100644 --- a/patches/server/0842-Don-t-tick-markers.patch +++ b/patches/server/0842-Don-t-tick-markers.patch @@ -9,10 +9,10 @@ list is only used in the tick and tickPassenger methods, so we can safely not ad markers to it. diff --git a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java -index 9e51b3d1217ad6dc5c0c11d2febac7144e5721af..a38a0c11c9e12aeff73d792368e1a69a856376d4 100644 +index ec421bb7a9d7de58688c0710a282b488ca836cf5..b500cc9b7e035ed90eaaab1277eba42488e329dd 100644 --- a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java +++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java -@@ -103,7 +103,7 @@ public final class EntityCommand implements PaperSubcommand { +@@ -109,7 +109,7 @@ public final class EntityCommand implements PaperSubcommand { ChunkPos chunk = e.chunkPosition(); info.left++; info.right.put(chunk, info.right.getOrDefault(chunk, 0) + 1);