2021-06-11 14:02:28 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Sun, 28 Jun 2020 19:27:20 -0400
|
|
|
|
Subject: [PATCH] Paper dumpitem command
|
|
|
|
|
|
|
|
Let's you quickly view the item in your hands NBT data
|
|
|
|
|
2022-07-09 01:01:42 +02:00
|
|
|
diff --git a/src/main/java/io/papermc/paper/command/PaperCommand.java b/src/main/java/io/papermc/paper/command/PaperCommand.java
|
2023-03-15 13:19:54 +01:00
|
|
|
index 1e9f191dc0f9d98f4404d2796f15b13912860b13..6d56c812262f7f109598ef4a941d0226b1eb638a 100644
|
2022-07-09 01:01:42 +02:00
|
|
|
--- a/src/main/java/io/papermc/paper/command/PaperCommand.java
|
|
|
|
+++ b/src/main/java/io/papermc/paper/command/PaperCommand.java
|
2023-03-15 13:19:54 +01:00
|
|
|
@@ -42,6 +42,7 @@ public final class PaperCommand extends Command {
|
2022-07-09 01:01:42 +02:00
|
|
|
commands.put(Set.of("fixlight"), new FixLightCommand());
|
2022-09-26 10:02:51 +02:00
|
|
|
commands.put(Set.of("debug", "chunkinfo", "holderinfo"), new ChunkDebugCommand());
|
2022-07-09 01:01:42 +02:00
|
|
|
commands.put(Set.of("syncloadinfo"), new SyncLoadInfoCommand());
|
|
|
|
+ commands.put(Set.of("dumpitem"), new DumpItemCommand());
|
2021-06-11 14:02:28 +02:00
|
|
|
|
2022-07-09 01:01:42 +02:00
|
|
|
return commands.entrySet().stream()
|
|
|
|
.flatMap(entry -> entry.getKey().stream().map(s -> Map.entry(s, entry.getValue())))
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/command/subcommands/DumpItemCommand.java b/src/main/java/io/papermc/paper/command/subcommands/DumpItemCommand.java
|
|
|
|
new file mode 100644
|
2022-12-08 00:49:41 +01:00
|
|
|
index 0000000000000000000000000000000000000000..5f0b0fe73a47e6a5ca8706f11e78b4b08e6ccd9a
|
2022-07-09 01:01:42 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/io/papermc/paper/command/subcommands/DumpItemCommand.java
|
|
|
|
@@ -0,0 +1,59 @@
|
|
|
|
+package io.papermc.paper.command.subcommands;
|
|
|
|
+
|
|
|
|
+import io.papermc.paper.adventure.PaperAdventure;
|
|
|
|
+import io.papermc.paper.command.PaperSubcommand;
|
|
|
|
+import java.util.Objects;
|
|
|
|
+import net.kyori.adventure.text.Component;
|
|
|
|
+import net.kyori.adventure.text.event.ClickEvent;
|
2022-12-08 00:49:41 +01:00
|
|
|
+import net.minecraft.core.registries.Registries;
|
2022-07-09 01:01:42 +02:00
|
|
|
+import net.minecraft.nbt.CompoundTag;
|
|
|
|
+import net.minecraft.world.item.ItemStack;
|
|
|
|
+import org.bukkit.Bukkit;
|
|
|
|
+import org.bukkit.command.CommandSender;
|
|
|
|
+import org.bukkit.craftbukkit.CraftWorld;
|
|
|
|
+import org.bukkit.craftbukkit.entity.CraftPlayer;
|
|
|
|
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
|
|
+import org.bukkit.entity.Player;
|
|
|
|
+import org.checkerframework.checker.nullness.qual.NonNull;
|
|
|
|
+import org.checkerframework.checker.nullness.qual.Nullable;
|
|
|
|
+import org.checkerframework.framework.qual.DefaultQualifier;
|
|
|
|
+
|
|
|
|
+import static net.kyori.adventure.text.Component.text;
|
|
|
|
+import static net.kyori.adventure.text.format.NamedTextColor.GRAY;
|
|
|
|
+import static net.kyori.adventure.text.format.NamedTextColor.YELLOW;
|
|
|
|
+import static net.kyori.adventure.text.format.TextDecoration.ITALIC;
|
|
|
|
+
|
|
|
|
+@DefaultQualifier(NonNull.class)
|
|
|
|
+public final class DumpItemCommand implements PaperSubcommand {
|
|
|
|
+ @Override
|
|
|
|
+ public boolean execute(final CommandSender sender, final String subCommand, final String[] args) {
|
|
|
|
+ this.doDumpItem(sender);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void doDumpItem(final CommandSender sender) {
|
2021-06-17 20:13:55 +02:00
|
|
|
+ if (!(sender instanceof Player)) {
|
|
|
|
+ sender.sendMessage("Only players can use this command");
|
|
|
|
+ return;
|
|
|
|
+ }
|
2022-07-09 01:01:42 +02:00
|
|
|
+ final ItemStack itemStack = CraftItemStack.asNMSCopy(((CraftPlayer) sender).getItemInHand());
|
|
|
|
+ final @Nullable CompoundTag tag = itemStack.getTag();
|
|
|
|
+ final @Nullable Component nbtComponent = tag == null ? null : PaperAdventure.asAdventure(net.minecraft.nbt.NbtUtils.toPrettyComponent(tag));
|
|
|
|
+ final String itemId = Objects.requireNonNull(((CraftWorld) ((CraftPlayer) sender).getWorld()).getHandle().registryAccess()
|
2022-12-08 00:49:41 +01:00
|
|
|
+ .registryOrThrow(Registries.ITEM).getKey(itemStack.getItem())).toString();
|
2022-07-09 01:01:42 +02:00
|
|
|
+ final Component message = text()
|
|
|
|
+ .append(text(itemId, YELLOW))
|
|
|
|
+ .apply(b -> {
|
|
|
|
+ if (nbtComponent != null) {
|
|
|
|
+ b.append(nbtComponent);
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ .build();
|
|
|
|
+ Bukkit.getConsoleSender().sendMessage(message);
|
|
|
|
+ sender.sendMessage(message);
|
|
|
|
+ sender.sendMessage(text().content(" Click to copy item to clipboard")
|
|
|
|
+ .color(GRAY)
|
|
|
|
+ .decorate(ITALIC)
|
|
|
|
+ .clickEvent(ClickEvent.copyToClipboard(tag == null ? itemId : (itemId + tag))));
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
2022-07-09 01:01:42 +02:00
|
|
|
+}
|