aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2024-06-21 19:38:57 -0700
committerOwen1212055 <[email protected]>2024-11-18 14:50:38 -0500
commit92055b6da5d3c59bc17a509fdd3f2f8c2b14a757 (patch)
treea79749826e4938f7f9d49523d940a1cdc82582df
parentc92fa203dc2a438a028ea423598b0a338f4626d3 (diff)
downloadPaper-92055b6da5d3c59bc17a509fdd3f2f8c2b14a757.tar.gz
Paper-92055b6da5d3c59bc17a509fdd3f2f8c2b14a757.zip
change package
-rw-r--r--patches/api/0480-WIP-DataComponent-API.patch511
-rw-r--r--patches/server/1026-WIP-DataComponent-API.patch534
2 files changed, 500 insertions, 545 deletions
diff --git a/patches/api/0480-WIP-DataComponent-API.patch b/patches/api/0480-WIP-DataComponent-API.patch
index b651650697..c3f1397a6d 100644
--- a/patches/api/0480-WIP-DataComponent-API.patch
+++ b/patches/api/0480-WIP-DataComponent-API.patch
@@ -75,13 +75,13 @@ index 0000000000000000000000000000000000000000..abd1985275d59bc2377eb386a7f06c13
+ }
+
+}
-diff --git a/src/main/java/io/papermc/paper/component/ComponentBuilder.java b/src/main/java/io/papermc/paper/component/ComponentBuilder.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/ComponentBuilder.java b/src/main/java/io/papermc/paper/datacomponent/ComponentBuilder.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3f5e6f7c6fb44898e8bfdb87c8d2569086025cba
+index 0000000000000000000000000000000000000000..6eb69eb0f220a3a5e63d8315802b4966dceda839
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/ComponentBuilder.java
++++ b/src/main/java/io/papermc/paper/datacomponent/ComponentBuilder.java
@@ -0,0 +1,22 @@
-+package io.papermc.paper.component;
++package io.papermc.paper.datacomponent;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -103,13 +103,13 @@ index 0000000000000000000000000000000000000000..3f5e6f7c6fb44898e8bfdb87c8d25690
+ @Contract(value = "-> new", pure = true)
+ @NonNull C build();
+}
-diff --git a/src/main/java/io/papermc/paper/component/DataComponentType.java b/src/main/java/io/papermc/paper/component/DataComponentType.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/DataComponentType.java b/src/main/java/io/papermc/paper/datacomponent/DataComponentType.java
new file mode 100644
-index 0000000000000000000000000000000000000000..50d15b4e0ed5cd17fdc95476ee4650ef918af62c
+index 0000000000000000000000000000000000000000..3152cc9cf29e7fd21b25f4c7a2b3d0b5bbf49d87
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/DataComponentType.java
++++ b/src/main/java/io/papermc/paper/datacomponent/DataComponentType.java
@@ -0,0 +1,27 @@
-+package io.papermc.paper.component;
++package io.papermc.paper.datacomponent;
+
+import org.bukkit.Keyed;
+import org.jetbrains.annotations.ApiStatus;
@@ -136,45 +136,45 @@ index 0000000000000000000000000000000000000000..50d15b4e0ed5cd17fdc95476ee4650ef
+
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/DataComponentTypes.java b/src/main/java/io/papermc/paper/component/DataComponentTypes.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java b/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0d64edd242cd4a77cc1b6b8989544aad6641b5f5
+index 0000000000000000000000000000000000000000..0660abc2a184a2684b4a6817590b67b38022b19f
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/DataComponentTypes.java
-@@ -0,0 +1,313 @@
-+package io.papermc.paper.component;
-+
-+import com.destroystokyo.paper.MaterialSetTag;
-+import io.papermc.paper.component.item.BannerPatternLayers;
-+import io.papermc.paper.component.item.BlockItemDataProperties;
-+import io.papermc.paper.component.item.BundleContents;
-+import io.papermc.paper.component.item.ChargedProjectiles;
-+import io.papermc.paper.component.item.CustomModelData;
-+import io.papermc.paper.component.item.DyedItemColor;
-+import io.papermc.paper.component.item.Fireworks;
-+import io.papermc.paper.component.item.FoodProperties;
-+import io.papermc.paper.component.item.ItemAdventurePredicate;
-+import io.papermc.paper.component.item.ItemArmorTrim;
-+import io.papermc.paper.component.item.ItemAttributeModifiers;
-+import io.papermc.paper.component.item.ItemContainerContents;
-+import io.papermc.paper.component.item.ItemEnchantments;
-+import io.papermc.paper.component.item.ItemLore;
-+import io.papermc.paper.component.item.JukeboxPlayable;
-+import io.papermc.paper.component.item.LockCode;
-+import io.papermc.paper.component.item.LodestoneTracker;
-+import io.papermc.paper.component.item.MapDecorations;
-+import io.papermc.paper.component.item.MapID;
-+import io.papermc.paper.component.item.MapItemColor;
-+import io.papermc.paper.component.item.MapPostProcessing;
-+import io.papermc.paper.component.item.PotDecorations;
-+import io.papermc.paper.component.item.PotionContents;
-+import io.papermc.paper.component.item.ResolvableProfile;
-+import io.papermc.paper.component.item.SeededContainerLoot;
-+import io.papermc.paper.component.item.SuspiciousStewEffects;
-+import io.papermc.paper.component.item.Tool;
-+import io.papermc.paper.component.item.Unbreakable;
-+import io.papermc.paper.component.item.WritableBookContent;
-+import io.papermc.paper.component.item.WrittenBookContent;
++++ b/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java
+@@ -0,0 +1,316 @@
++package io.papermc.paper.datacomponent;
++
++import io.papermc.paper.datacomponent.item.BannerPatternLayers;
++import io.papermc.paper.datacomponent.item.BlockItemDataProperties;
++import io.papermc.paper.datacomponent.item.BundleContents;
++import io.papermc.paper.datacomponent.item.ChargedProjectiles;
++import io.papermc.paper.datacomponent.item.CustomModelData;
++import io.papermc.paper.datacomponent.item.DyedItemColor;
++import io.papermc.paper.datacomponent.item.Fireworks;
++import io.papermc.paper.datacomponent.item.FoodProperties;
++import io.papermc.paper.datacomponent.item.ItemAdventurePredicate;
++import io.papermc.paper.datacomponent.item.ItemArmorTrim;
++import io.papermc.paper.datacomponent.item.ItemAttributeModifiers;
++import io.papermc.paper.datacomponent.item.ItemContainerContents;
++import io.papermc.paper.datacomponent.item.ItemEnchantments;
++import io.papermc.paper.datacomponent.item.ItemLore;
++import io.papermc.paper.datacomponent.item.JukeboxPlayable;
++import io.papermc.paper.datacomponent.item.LockCode;
++import io.papermc.paper.datacomponent.item.LodestoneTracker;
++import io.papermc.paper.datacomponent.item.MapDecorations;
++import io.papermc.paper.datacomponent.item.MapID;
++import io.papermc.paper.datacomponent.item.MapItemColor;
++import io.papermc.paper.datacomponent.item.MapPostProcessing;
++import io.papermc.paper.datacomponent.item.PotDecorations;
++import io.papermc.paper.datacomponent.item.PotionContents;
++import io.papermc.paper.datacomponent.item.ResolvableProfile;
++import io.papermc.paper.datacomponent.item.SeededContainerLoot;
++import io.papermc.paper.datacomponent.item.SuspiciousStewEffects;
++import io.papermc.paper.datacomponent.item.Tool;
++import io.papermc.paper.datacomponent.item.Unbreakable;
++import io.papermc.paper.datacomponent.item.WritableBookContent;
++import io.papermc.paper.datacomponent.item.WrittenBookContent;
++import java.util.List;
+import net.kyori.adventure.key.Key;
+import net.kyori.adventure.text.Component;
+import org.bukkit.DyeColor;
@@ -186,10 +186,13 @@ index 0000000000000000000000000000000000000000..0d64edd242cd4a77cc1b6b8989544aad
+import org.checkerframework.checker.index.qual.NonNegative;
+import org.checkerframework.checker.index.qual.Positive;
+import org.checkerframework.common.value.qual.IntRange;
-+import java.util.List;
+
+import static java.util.Objects.requireNonNull;
+
++/**
++ * All the different types of data that {@link org.bukkit.inventory.ItemStack ItemStacks}
++ * and {@link org.bukkit.inventory.ItemType ItemTypes} can have.
++ */
+public final class DataComponentTypes {
+
+ // public static final DataComponentType.Valued<BinaryTagHolder> CUSTOM_DATA = valued("custom_data");
@@ -455,15 +458,15 @@ index 0000000000000000000000000000000000000000..0d64edd242cd4a77cc1b6b8989544aad
+ private DataComponentTypes() {
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/BannerPatternLayers.java b/src/main/java/io/papermc/paper/component/item/BannerPatternLayers.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/BannerPatternLayers.java b/src/main/java/io/papermc/paper/datacomponent/item/BannerPatternLayers.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3d1c94278eeaffcc68d1d83b7bc548d72fd8e757
+index 0000000000000000000000000000000000000000..c628b5aed20c4d8781e0ad19fdbc4a926fcfc0fa
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/BannerPatternLayers.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/BannerPatternLayers.java
@@ -0,0 +1,42 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.Arrays;
+import java.util.List;
+import org.bukkit.block.banner.Pattern;
@@ -503,15 +506,15 @@ index 0000000000000000000000000000000000000000..3d1c94278eeaffcc68d1d83b7bc548d7
+ @NonNull Builder addAll(@NonNull List<@NonNull Pattern> patterns);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/BlockItemDataProperties.java b/src/main/java/io/papermc/paper/component/item/BlockItemDataProperties.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/BlockItemDataProperties.java b/src/main/java/io/papermc/paper/datacomponent/item/BlockItemDataProperties.java
new file mode 100644
-index 0000000000000000000000000000000000000000..1c4859bcabcc2a4a2e3b52253a984960970bc3d9
+index 0000000000000000000000000000000000000000..270f98e95b1d0322a42bad52d492fa0018f43bc1
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/BlockItemDataProperties.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/BlockItemDataProperties.java
@@ -0,0 +1,28 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import org.bukkit.Material;
+import org.bukkit.block.data.BlockData;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -537,15 +540,15 @@ index 0000000000000000000000000000000000000000..1c4859bcabcc2a4a2e3b52253a984960
+ // building this requires BlockProperty API, so an empty builder for now (essentially read-only)
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/BundleContents.java b/src/main/java/io/papermc/paper/component/item/BundleContents.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/BundleContents.java b/src/main/java/io/papermc/paper/datacomponent/item/BundleContents.java
new file mode 100644
-index 0000000000000000000000000000000000000000..e9efe98121d45890824d624a8cf66d3342ae84a3
+index 0000000000000000000000000000000000000000..e3443702bfad57aa1a66331060f33b2e406ca153
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/BundleContents.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/BundleContents.java
@@ -0,0 +1,59 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.Arrays;
+import java.util.List;
+import org.bukkit.inventory.ItemStack;
@@ -602,15 +605,15 @@ index 0000000000000000000000000000000000000000..e9efe98121d45890824d624a8cf66d33
+ @NonNull Builder addAll(@NonNull List<@NonNull ItemStack> stacks);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ChargedProjectiles.java b/src/main/java/io/papermc/paper/component/item/ChargedProjectiles.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ChargedProjectiles.java b/src/main/java/io/papermc/paper/datacomponent/item/ChargedProjectiles.java
new file mode 100644
-index 0000000000000000000000000000000000000000..13e7303189c38c79b4b0726841a2fd6fd8e720a6
+index 0000000000000000000000000000000000000000..505f93dec42585072f518b4484fdee176e941f50
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ChargedProjectiles.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ChargedProjectiles.java
@@ -0,0 +1,59 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.Arrays;
+import java.util.List;
+import org.bukkit.inventory.ItemStack;
@@ -667,13 +670,13 @@ index 0000000000000000000000000000000000000000..13e7303189c38c79b4b0726841a2fd6f
+ @NonNull Builder addAll(@NonNull List<@NonNull ItemStack> itemStacks);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ComponentTypesBridge.java b/src/main/java/io/papermc/paper/component/item/ComponentTypesBridge.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ComponentTypesBridge.java b/src/main/java/io/papermc/paper/datacomponent/item/ComponentTypesBridge.java
new file mode 100644
-index 0000000000000000000000000000000000000000..59db78f559404777ba6e711a0b2c267d750ec6c8
+index 0000000000000000000000000000000000000000..a1c78fae5327ef9f9398e00a0b20b5171333bba7
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ComponentTypesBridge.java
-@@ -0,0 +1,87 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ComponentTypesBridge.java
+@@ -0,0 +1,88 @@
++package io.papermc.paper.datacomponent.item;
+
+import io.papermc.paper.registry.set.RegistryKeySet;
+import io.papermc.paper.util.Filtered;
@@ -685,6 +688,7 @@ index 0000000000000000000000000000000000000000..59db78f559404777ba6e711a0b2c267d
+import org.bukkit.inventory.meta.trim.ArmorTrim;
+import org.bukkit.map.MapCursor;
+import org.bukkit.potion.PotionEffect;
++import org.checkerframework.checker.nullness.qual.Nullable;
+import org.jetbrains.annotations.ApiStatus;
+
@@ -756,17 +760,17 @@ index 0000000000000000000000000000000000000000..59db78f559404777ba6e711a0b2c267d
+
+ Tool.Builder tool();
+
-+ Tool.Rule rule(RegistryKeySet<BlockType> blockTypes, Float speed, TriState correctForDrops);
++ Tool.Rule rule(RegistryKeySet<BlockType> blockTypes, @Nullable Float speed, TriState correctForDrops);
+
+ ItemAdventurePredicate.Builder itemAdventurePredicate();
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/CustomModelData.java b/src/main/java/io/papermc/paper/component/item/CustomModelData.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/CustomModelData.java b/src/main/java/io/papermc/paper/datacomponent/item/CustomModelData.java
new file mode 100644
-index 0000000000000000000000000000000000000000..d8919127e181573ef5afe857cbc777a6a45b140a
+index 0000000000000000000000000000000000000000..e93f962fc51c0f260719fccad7ccdadc114bfc31
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/CustomModelData.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/CustomModelData.java
@@ -0,0 +1,27 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -793,15 +797,15 @@ index 0000000000000000000000000000000000000000..d8919127e181573ef5afe857cbc777a6
+ @NonNull CustomModelData build();
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/DyedItemColor.java b/src/main/java/io/papermc/paper/component/item/DyedItemColor.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/DyedItemColor.java b/src/main/java/io/papermc/paper/datacomponent/item/DyedItemColor.java
new file mode 100644
-index 0000000000000000000000000000000000000000..ade9b048dd56f397278717fefc10a3c369603d30
+index 0000000000000000000000000000000000000000..ee9983f45d4457935381fac9bf44455a59661e6d
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/DyedItemColor.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/DyedItemColor.java
@@ -0,0 +1,43 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import org.bukkit.Color;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -842,15 +846,15 @@ index 0000000000000000000000000000000000000000..ade9b048dd56f397278717fefc10a3c3
+ @NonNull Builder color(@NonNull Color color);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/Fireworks.java b/src/main/java/io/papermc/paper/component/item/Fireworks.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/Fireworks.java b/src/main/java/io/papermc/paper/datacomponent/item/Fireworks.java
new file mode 100644
-index 0000000000000000000000000000000000000000..720ba84a3f7c426e6bb533e47ce4546725cc7136
+index 0000000000000000000000000000000000000000..6b3bbe5038f4b2527485eec3848fb0b4bcd640a5
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/Fireworks.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/Fireworks.java
@@ -0,0 +1,68 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.List;
+import org.bukkit.FireworkEffect;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -916,15 +920,15 @@ index 0000000000000000000000000000000000000000..720ba84a3f7c426e6bb533e47ce45467
+ @NonNull Builder addAll(@NonNull List<@NonNull FireworkEffect> effects);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/FoodProperties.java b/src/main/java/io/papermc/paper/component/item/FoodProperties.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/FoodProperties.java b/src/main/java/io/papermc/paper/datacomponent/item/FoodProperties.java
new file mode 100644
-index 0000000000000000000000000000000000000000..18acee6c417e477770535e9c85a8efdf3700696d
+index 0000000000000000000000000000000000000000..f431e1d6fbf5c1d9dbd59f513cf2ba4af4e2786f
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/FoodProperties.java
-@@ -0,0 +1,109 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/FoodProperties.java
+@@ -0,0 +1,108 @@
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.List;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.potion.PotionEffect;
@@ -933,7 +937,6 @@ index 0000000000000000000000000000000000000000..18acee6c417e477770535e9c85a8efdf
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.Nullable;
-+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
+
@@ -1031,19 +1034,17 @@ index 0000000000000000000000000000000000000000..18acee6c417e477770535e9c85a8efdf
+ @NonNull Builder addAllEffects(@NonNull List<@NonNull PossibleEffect> effects);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ItemAdventurePredicate.java b/src/main/java/io/papermc/paper/component/item/ItemAdventurePredicate.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ItemAdventurePredicate.java b/src/main/java/io/papermc/paper/datacomponent/item/ItemAdventurePredicate.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3a16423dc37c6a56d86c1f07518c601ef6fbcbbc
+index 0000000000000000000000000000000000000000..be1042bc02a41b837eeedfe4877dcf2106db05f5
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ItemAdventurePredicate.java
-@@ -0,0 +1,42 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ItemAdventurePredicate.java
+@@ -0,0 +1,40 @@
++package io.papermc.paper.datacomponent.item;
+
+import io.papermc.paper.block.BlockPredicate;
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.List;
-+import org.bukkit.attribute.Attribute;
-+import org.bukkit.attribute.AttributeModifier;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Contract;
@@ -1079,15 +1080,15 @@ index 0000000000000000000000000000000000000000..3a16423dc37c6a56d86c1f07518c601e
+ @NonNull Builder addPredicate(@NonNull BlockPredicate predicate);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ItemArmorTrim.java b/src/main/java/io/papermc/paper/component/item/ItemArmorTrim.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ItemArmorTrim.java b/src/main/java/io/papermc/paper/datacomponent/item/ItemArmorTrim.java
new file mode 100644
-index 0000000000000000000000000000000000000000..5a288237162c75fb0e969b894b719ba09a0c4a02
+index 0000000000000000000000000000000000000000..8c806c19cf294a08078c6a5b89107d16528b02f5
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ItemArmorTrim.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ItemArmorTrim.java
@@ -0,0 +1,43 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import org.bukkit.inventory.meta.trim.ArmorTrim;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -1128,15 +1129,15 @@ index 0000000000000000000000000000000000000000..5a288237162c75fb0e969b894b719ba0
+ @NonNull Builder armorTrim(@NonNull ArmorTrim armorTrim);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ItemAttributeModifiers.java b/src/main/java/io/papermc/paper/component/item/ItemAttributeModifiers.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ItemAttributeModifiers.java b/src/main/java/io/papermc/paper/datacomponent/item/ItemAttributeModifiers.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3faf44b7864119f8bd14cfb835d91d29b6d48bbf
+index 0000000000000000000000000000000000000000..2fdb6e02235ea28c63bb0b3b6edeecef98a1b996
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ItemAttributeModifiers.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ItemAttributeModifiers.java
@@ -0,0 +1,55 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.List;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeModifier;
@@ -1189,15 +1190,15 @@ index 0000000000000000000000000000000000000000..3faf44b7864119f8bd14cfb835d91d29
+ @NonNull Builder addModifier(@NonNull Attribute attribute, @NonNull AttributeModifier attributeModifier);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ItemContainerContents.java b/src/main/java/io/papermc/paper/component/item/ItemContainerContents.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ItemContainerContents.java b/src/main/java/io/papermc/paper/datacomponent/item/ItemContainerContents.java
new file mode 100644
-index 0000000000000000000000000000000000000000..41c91487c3e60c744dba7cf0be86adce97bf5e4d
+index 0000000000000000000000000000000000000000..a748ef9a97a3aa1bba794470cc7c2a8ca58e7ecf
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ItemContainerContents.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ItemContainerContents.java
@@ -0,0 +1,42 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.Arrays;
+import java.util.List;
+import org.bukkit.inventory.ItemStack;
@@ -1237,15 +1238,15 @@ index 0000000000000000000000000000000000000000..41c91487c3e60c744dba7cf0be86adce
+ @NonNull Builder addAll(@NonNull List<@NonNull ItemStack> itemStacks);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ItemEnchantments.java b/src/main/java/io/papermc/paper/component/item/ItemEnchantments.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ItemEnchantments.java b/src/main/java/io/papermc/paper/datacomponent/item/ItemEnchantments.java
new file mode 100644
-index 0000000000000000000000000000000000000000..bc4773e8cac7a06dd92923486aa58615d6c0eb41
+index 0000000000000000000000000000000000000000..1ac01e0937c33c2588af383ec18f50190c852060
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ItemEnchantments.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ItemEnchantments.java
@@ -0,0 +1,55 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.Map;
+import org.bukkit.enchantments.Enchantment;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -1298,15 +1299,15 @@ index 0000000000000000000000000000000000000000..bc4773e8cac7a06dd92923486aa58615
+ @NonNull Builder addAll(@NonNull Map<@NonNull Enchantment, @NonNull @IntRange(from = 0, to = 255) Integer> enchantments);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ItemLore.java b/src/main/java/io/papermc/paper/component/item/ItemLore.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ItemLore.java b/src/main/java/io/papermc/paper/datacomponent/item/ItemLore.java
new file mode 100644
-index 0000000000000000000000000000000000000000..35ae4f276be7edfd293a1ba3b4bebb99972f3e0d
+index 0000000000000000000000000000000000000000..655ca9fedbf4e5c12ec2016c5779e47431a459e1
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ItemLore.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ItemLore.java
@@ -0,0 +1,69 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.List;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.ComponentLike;
@@ -1373,23 +1374,19 @@ index 0000000000000000000000000000000000000000..35ae4f276be7edfd293a1ba3b4bebb99
+ @NonNull Builder addAllLines(@NonNull List<@NonNull ? extends ComponentLike> lines);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/JukeboxPlayable.java b/src/main/java/io/papermc/paper/component/item/JukeboxPlayable.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/JukeboxPlayable.java b/src/main/java/io/papermc/paper/datacomponent/item/JukeboxPlayable.java
new file mode 100644
-index 0000000000000000000000000000000000000000..d039388819d241a8ffeadab5d806387b61a0f9db
+index 0000000000000000000000000000000000000000..27121491d961fac5f2492ba2fb786682164e9791
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/JukeboxPlayable.java
-@@ -0,0 +1,30 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/JukeboxPlayable.java
+@@ -0,0 +1,26 @@
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import org.bukkit.JukeboxSong;
-+import org.bukkit.attribute.Attribute;
-+import org.bukkit.attribute.AttributeModifier;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Contract;
-+import org.jetbrains.annotations.Unmodifiable;
-+import java.util.List;
+
+public interface JukeboxPlayable extends ShownInTooltip<JukeboxPlayable> {
+
@@ -1409,13 +1406,13 @@ index 0000000000000000000000000000000000000000..d039388819d241a8ffeadab5d806387b
+ Builder jukeboxSong(@NonNull JukeboxSong song);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/LockCode.java b/src/main/java/io/papermc/paper/component/item/LockCode.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/LockCode.java b/src/main/java/io/papermc/paper/datacomponent/item/LockCode.java
new file mode 100644
-index 0000000000000000000000000000000000000000..dfcd12fe3fed01ff93bce6eca732bd6f1f4cf5fd
+index 0000000000000000000000000000000000000000..cf6a2e8e6640deeae05283b3cb5755a417d01484
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/LockCode.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/LockCode.java
@@ -0,0 +1,27 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -1442,15 +1439,15 @@ index 0000000000000000000000000000000000000000..dfcd12fe3fed01ff93bce6eca732bd6f
+ @NonNull LockCode build();
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/LodestoneTracker.java b/src/main/java/io/papermc/paper/component/item/LodestoneTracker.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/LodestoneTracker.java b/src/main/java/io/papermc/paper/datacomponent/item/LodestoneTracker.java
new file mode 100644
-index 0000000000000000000000000000000000000000..316e3e0894c0d5cc0a7b304a815803f90eb2c766
+index 0000000000000000000000000000000000000000..3b99f6b9cfeba3fdb37aaea92c7f6de19c222373
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/LodestoneTracker.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/LodestoneTracker.java
@@ -0,0 +1,59 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import org.bukkit.Location;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.checker.nullness.qual.Nullable;
@@ -1507,15 +1504,15 @@ index 0000000000000000000000000000000000000000..316e3e0894c0d5cc0a7b304a815803f9
+ @NonNull Builder tracked(boolean tracked);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/MapDecorations.java b/src/main/java/io/papermc/paper/component/item/MapDecorations.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/MapDecorations.java b/src/main/java/io/papermc/paper/datacomponent/item/MapDecorations.java
new file mode 100644
-index 0000000000000000000000000000000000000000..589be7348bfef06fe628696d56748a9d44fca177
+index 0000000000000000000000000000000000000000..da18b602778bf4c6fc536988d89f77d4585da454
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/MapDecorations.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/MapDecorations.java
@@ -0,0 +1,98 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.Map;
+import org.bukkit.map.MapCursor;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -1611,13 +1608,13 @@ index 0000000000000000000000000000000000000000..589be7348bfef06fe628696d56748a9d
+ MapDecorations.@NonNull Builder putAll(@NonNull Map<@NonNull String, @NonNull DecorationEntry> entries);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/MapID.java b/src/main/java/io/papermc/paper/component/item/MapID.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/MapID.java b/src/main/java/io/papermc/paper/datacomponent/item/MapID.java
new file mode 100644
-index 0000000000000000000000000000000000000000..d4a8ff6c9f82b35bf339f4cfa171a95c74327c7e
+index 0000000000000000000000000000000000000000..17cf58c3577a9d352686b4fcb08e7da629b8af94
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/MapID.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/MapID.java
@@ -0,0 +1,39 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -1656,13 +1653,13 @@ index 0000000000000000000000000000000000000000..d4a8ff6c9f82b35bf339f4cfa171a95c
+ @NonNull MapID build();
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/MapItemColor.java b/src/main/java/io/papermc/paper/component/item/MapItemColor.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/MapItemColor.java b/src/main/java/io/papermc/paper/datacomponent/item/MapItemColor.java
new file mode 100644
-index 0000000000000000000000000000000000000000..fdcf1f092fe52d9f111b47651a5f7eba6d28692d
+index 0000000000000000000000000000000000000000..0f4186034ecb6ad1effa681870d24005f0ebe677
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/MapItemColor.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/MapItemColor.java
@@ -0,0 +1,39 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.bukkit.Color;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -1701,27 +1698,27 @@ index 0000000000000000000000000000000000000000..fdcf1f092fe52d9f111b47651a5f7eba
+ @NonNull MapItemColor build();
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/MapPostProcessing.java b/src/main/java/io/papermc/paper/component/item/MapPostProcessing.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/MapPostProcessing.java b/src/main/java/io/papermc/paper/datacomponent/item/MapPostProcessing.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0b26ee6870600557b82a6ea37e2789dcb5e267c8
+index 0000000000000000000000000000000000000000..acdede37bf2625698e9a6c0521e7e98a5fd9c377
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/MapPostProcessing.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/MapPostProcessing.java
@@ -0,0 +1,6 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+public enum MapPostProcessing {
+ LOCK,
+ SCALE
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PotDecorations.java b/src/main/java/io/papermc/paper/component/item/PotDecorations.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PotDecorations.java b/src/main/java/io/papermc/paper/datacomponent/item/PotDecorations.java
new file mode 100644
-index 0000000000000000000000000000000000000000..fb2f3d705102cf67c847b2b2d38cc239c89b6716
+index 0000000000000000000000000000000000000000..abd94c0c900f7c2bf936e0c5c28ec92847db39ec
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PotDecorations.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PotDecorations.java
@@ -0,0 +1,50 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import org.bukkit.Material;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.checker.nullness.qual.Nullable;
@@ -1769,15 +1766,15 @@ index 0000000000000000000000000000000000000000..fb2f3d705102cf67c847b2b2d38cc239
+ Builder front(@Nullable Material font);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PotionContents.java b/src/main/java/io/papermc/paper/component/item/PotionContents.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PotionContents.java b/src/main/java/io/papermc/paper/datacomponent/item/PotionContents.java
new file mode 100644
-index 0000000000000000000000000000000000000000..d25430f52d95f90875f4052b39e652282275c8e7
+index 0000000000000000000000000000000000000000..321f317248834713361985fad47180fc045d1c82
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PotionContents.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PotionContents.java
@@ -0,0 +1,85 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.List;
+import org.bukkit.Color;
+import org.bukkit.potion.PotionEffect;
@@ -1860,17 +1857,17 @@ index 0000000000000000000000000000000000000000..d25430f52d95f90875f4052b39e65228
+ @NonNull Builder addAll(@NonNull List<@NonNull PotionEffect> potionEffects);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ResolvableProfile.java b/src/main/java/io/papermc/paper/component/item/ResolvableProfile.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ResolvableProfile.java b/src/main/java/io/papermc/paper/datacomponent/item/ResolvableProfile.java
new file mode 100644
-index 0000000000000000000000000000000000000000..89c4314048cfb277026c9f5e9a7c05494b3f4c02
+index 0000000000000000000000000000000000000000..10cb1af6c976659f80839ce46cdddcc89ed20681
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ResolvableProfile.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ResolvableProfile.java
@@ -0,0 +1,51 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.destroystokyo.paper.profile.PlayerProfile;
+import com.destroystokyo.paper.profile.ProfileProperty;
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
@@ -1917,15 +1914,15 @@ index 0000000000000000000000000000000000000000..89c4314048cfb277026c9f5e9a7c0549
+ @NonNull Builder addAllProperties(@NonNull List<@NonNull ProfileProperty> properties);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/SeededContainerLoot.java b/src/main/java/io/papermc/paper/component/item/SeededContainerLoot.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/SeededContainerLoot.java b/src/main/java/io/papermc/paper/datacomponent/item/SeededContainerLoot.java
new file mode 100644
-index 0000000000000000000000000000000000000000..4eb82c2611aa217c7053efc994b4b794a76e5e7c
+index 0000000000000000000000000000000000000000..c857d9127aa0030b7f4f620242cbd9ba54dae015
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/SeededContainerLoot.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/SeededContainerLoot.java
@@ -0,0 +1,37 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import net.kyori.adventure.key.Key;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -1960,13 +1957,13 @@ index 0000000000000000000000000000000000000000..4eb82c2611aa217c7053efc994b4b794
+ @NonNull Builder seed(long seed);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ShownInTooltip.java b/src/main/java/io/papermc/paper/component/item/ShownInTooltip.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ShownInTooltip.java b/src/main/java/io/papermc/paper/datacomponent/item/ShownInTooltip.java
new file mode 100644
-index 0000000000000000000000000000000000000000..75c4ede2e9a2913a2bd542935b0bcaba454ad749
+index 0000000000000000000000000000000000000000..1e39fc6779e324030fb2890a4568376ffe3e5fab
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ShownInTooltip.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ShownInTooltip.java
@@ -0,0 +1,21 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
@@ -1987,15 +1984,15 @@ index 0000000000000000000000000000000000000000..75c4ede2e9a2913a2bd542935b0bcaba
+ @NonNull B showInTooltip(boolean showInTooltip);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/SuspiciousStewEffects.java b/src/main/java/io/papermc/paper/component/item/SuspiciousStewEffects.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/SuspiciousStewEffects.java b/src/main/java/io/papermc/paper/datacomponent/item/SuspiciousStewEffects.java
new file mode 100644
-index 0000000000000000000000000000000000000000..84e1c430acb5f488dc6835c1269586873dae5026
+index 0000000000000000000000000000000000000000..b3055cd0b4446b5100ac85312a1cfbce4c8e6714
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/SuspiciousStewEffects.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/SuspiciousStewEffects.java
@@ -0,0 +1,59 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import io.papermc.paper.potion.SuspiciousEffectEntry;
+import java.util.Arrays;
+import java.util.List;
@@ -2052,28 +2049,24 @@ index 0000000000000000000000000000000000000000..84e1c430acb5f488dc6835c126958687
+ @NonNull Builder addAll(@NonNull List<@NonNull SuspiciousEffectEntry> entries);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/Tool.java b/src/main/java/io/papermc/paper/component/item/Tool.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/Tool.java b/src/main/java/io/papermc/paper/datacomponent/item/Tool.java
new file mode 100644
-index 0000000000000000000000000000000000000000..848cf03f35e2fe07373d8281082c1d8d633ad3f7
+index 0000000000000000000000000000000000000000..d5ab454e3012e310ca48a69fba3bd5e895c68fce
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/Tool.java
-@@ -0,0 +1,128 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/Tool.java
+@@ -0,0 +1,122 @@
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import java.util.List;
-+import java.util.Optional;
+import io.papermc.paper.registry.set.RegistryKeySet;
+import net.kyori.adventure.util.TriState;
+import org.bukkit.block.BlockType;
-+import org.bukkit.inventory.ItemStack;
-+import org.bukkit.potion.PotionEffect;
+import org.checkerframework.checker.index.qual.NonNegative;
+import org.checkerframework.checker.nullness.qual.NonNull;
++import org.checkerframework.checker.nullness.qual.Nullable;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Contract;
-+import org.jetbrains.annotations.NotNull;
-+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
+
+/**
@@ -2111,11 +2104,11 @@ index 0000000000000000000000000000000000000000..848cf03f35e2fe07373d8281082c1d8d
+ @ApiStatus.NonExtendable
+ interface Rule {
+
-+ static @NonNull Rule of(final @NonNull RegistryKeySet<BlockType> blockTypes, final @Nullable Float speed, final @NotNull TriState correctForDrops) {
++ static @NonNull Rule of(final @NonNull RegistryKeySet<BlockType> blockTypes, final @Nullable Float speed, final @NonNull TriState correctForDrops) {
+ return ComponentTypesBridge.bridge().rule(blockTypes, speed, correctForDrops);
+ }
+
-+ static @NonNull Rule minesAndDrops(final @NonNull RegistryKeySet<BlockType> blocks, float speed) {
++ static @NonNull Rule minesAndDrops(final @NonNull RegistryKeySet<BlockType> blocks, final float speed) {
+ return of(blocks, speed, TriState.TRUE);
+ }
+
@@ -2123,7 +2116,7 @@ index 0000000000000000000000000000000000000000..848cf03f35e2fe07373d8281082c1d8d
+ return of(tag, null, TriState.FALSE);
+ }
+
-+ static @NonNull Rule overrideSpeed(final @NonNull RegistryKeySet<BlockType> tag, float speed) {
++ static @NonNull Rule overrideSpeed(final @NonNull RegistryKeySet<BlockType> tag, final float speed) {
+ return of(tag, speed, TriState.NOT_SET);
+ }
+
@@ -2139,15 +2132,13 @@ index 0000000000000000000000000000000000000000..848cf03f35e2fe07373d8281082c1d8d
+ * {@code true} will cause the block to mine at its most efficient speed, and drop items if the targeted block requires that.
+ * @return speed override
+ */
-+ @Nullable
-+ Float speed();
++ @Nullable Float speed();
+
+ /**
+ * Overrides whether this tool is considered 'correct' if present and matched.
+ * @return
+ */
-+ @NotNull
-+ TriState correctForDrops();
++ @NonNull TriState correctForDrops();
+ }
+
+ @ApiStatus.NonExtendable
@@ -2159,7 +2150,7 @@ index 0000000000000000000000000000000000000000..848cf03f35e2fe07373d8281082c1d8d
+ * @return self
+ */
+ @Contract(value = "_ -> this", mutates = "this")
-+ @NonNull Builder damagePerBlock(@NonNull int damage);
++ @NonNull Builder damagePerBlock(int damage);
+
+ /**
+ * Controls mining speed to use if no rules match and don't override mining speed.
@@ -2186,15 +2177,15 @@ index 0000000000000000000000000000000000000000..848cf03f35e2fe07373d8281082c1d8d
+ @NonNull Builder addRules(@NonNull List<@NonNull Rule> rules);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/Unbreakable.java b/src/main/java/io/papermc/paper/component/item/Unbreakable.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/Unbreakable.java b/src/main/java/io/papermc/paper/datacomponent/item/Unbreakable.java
new file mode 100644
-index 0000000000000000000000000000000000000000..bae28273ffa8017fecb24328f21b6a4622326273
+index 0000000000000000000000000000000000000000..ecd1130152d0bac324cfd1feeb38b86e9e9a5893
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/Unbreakable.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/Unbreakable.java
@@ -0,0 +1,27 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Contract;
@@ -2219,15 +2210,15 @@ index 0000000000000000000000000000000000000000..bae28273ffa8017fecb24328f21b6a46
+ interface Builder extends ShownInTooltip.Builder<Builder>, ComponentBuilder<Unbreakable> {
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/WritableBookContent.java b/src/main/java/io/papermc/paper/component/item/WritableBookContent.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/WritableBookContent.java b/src/main/java/io/papermc/paper/datacomponent/item/WritableBookContent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..368662920dda88a35d61c9f98d41e4a84626999d
+index 0000000000000000000000000000000000000000..5e4909f44f902058cd41560c3efccef5049b2402
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/WritableBookContent.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/WritableBookContent.java
@@ -0,0 +1,62 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import io.papermc.paper.util.Filtered;
+import java.util.Collection;
+import java.util.List;
@@ -2287,15 +2278,15 @@ index 0000000000000000000000000000000000000000..368662920dda88a35d61c9f98d41e4a8
+ @NonNull Builder addPagesFiltered(@NonNull Collection<@NonNull Filtered<@NonNull String>> pages);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/WrittenBookContent.java b/src/main/java/io/papermc/paper/component/item/WrittenBookContent.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/WrittenBookContent.java b/src/main/java/io/papermc/paper/datacomponent/item/WrittenBookContent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..f33aa2d9528b96df98b40cd9d0b052cfcebe20de
+index 0000000000000000000000000000000000000000..de4927fa96ed799d2c80f47958dc5c4baa508ce4
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/WrittenBookContent.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/WrittenBookContent.java
@@ -0,0 +1,92 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
-+import io.papermc.paper.component.ComponentBuilder;
++import io.papermc.paper.datacomponent.ComponentBuilder;
+import io.papermc.paper.util.Filtered;
+import java.util.Collection;
+import java.util.List;
@@ -2385,25 +2376,25 @@ index 0000000000000000000000000000000000000000..f33aa2d9528b96df98b40cd9d0b052cf
+ @NonNull Builder addPagesFiltered(@NonNull Collection<@NonNull Filtered<@NonNull ? extends ComponentLike>> pages);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/package-info.java b/src/main/java/io/papermc/paper/component/package-info.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/package-info.java b/src/main/java/io/papermc/paper/datacomponent/package-info.java
new file mode 100644
-index 0000000000000000000000000000000000000000..37c9e2b084fe4c82242ae64569bb76beb6a88c09
+index 0000000000000000000000000000000000000000..3ddd1f787e97c22eee3e32bb2a9660a8e300d7f9
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/package-info.java
++++ b/src/main/java/io/papermc/paper/datacomponent/package-info.java
@@ -0,0 +1,5 @@
+@DefaultQualifier(NonNull.class)
-+package io.papermc.paper.component;
++package io.papermc.paper.datacomponent;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
diff --git a/src/main/java/io/papermc/paper/registry/RegistryKey.java b/src/main/java/io/papermc/paper/registry/RegistryKey.java
-index 2945dde566682f977e84fde5d473a6c69be24df1..f212fa95d1fdfee7f8465ffa06b68ba2045c8f14 100644
+index 2945dde566682f977e84fde5d473a6c69be24df1..6ab6e9d3a1fcb5fcb370e507164da70012e61e88 100644
--- a/src/main/java/io/papermc/paper/registry/RegistryKey.java
+++ b/src/main/java/io/papermc/paper/registry/RegistryKey.java
@@ -1,5 +1,6 @@
package io.papermc.paper.registry;
-+import io.papermc.paper.component.DataComponentType;
++import io.papermc.paper.datacomponent.DataComponentType;
import net.kyori.adventure.key.Keyed;
import org.bukkit.Art;
import org.bukkit.Fluid;
@@ -2450,7 +2441,7 @@ index 0000000000000000000000000000000000000000..5c8cdf46bc12501e1f284b4760c48e79
+ @Nullable T filtered();
+}
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index 54704da43cf9c429f3914f0580246dde99aa93c0..a30cd6e6a72dc299a6a1cd26dc9dcd8af0d0c18e 100644
+index 54704da43cf9c429f3914f0580246dde99aa93c0..7f566e1b6de89923cc1eca079b00c10afc2ae981 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
@@ -130,7 +130,7 @@ import org.jetbrains.annotations.Nullable;
@@ -2490,10 +2481,10 @@ index 54704da43cf9c429f3914f0580246dde99aa93c0..a30cd6e6a72dc299a6a1cd26dc9dcd8a
+ * @param dataComponentType the data component type
+ * @return the default value or null if there is none
+ * @param <T> the value type
-+ * @see #hasDefaultData(io.papermc.paper.component.DataComponentType) for DataComponentType.NonValued
++ * @see #hasDefaultData(io.papermc.paper.datacomponent.DataComponentType) for DataComponentType.NonValued
+ * @throws IllegalArgumentException if {@link #isItem()} is false
+ */
-+ public @Nullable <T> T getDefaultData(final io.papermc.paper.component.DataComponentType.@NotNull Valued<T> dataComponentType) {
++ public @Nullable <T> T getDefaultData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<T> dataComponentType) {
+ Preconditions.checkArgument(this.asItemType() != null);
+ return this.asItemType().getDefaultData(dataComponentType);
+ }
@@ -2505,7 +2496,7 @@ index 54704da43cf9c429f3914f0580246dde99aa93c0..a30cd6e6a72dc299a6a1cd26dc9dcd8a
+ * @return true if there is a default value
+ * @throws IllegalArgumentException if {@link #isItem()} is false
+ */
-+ public boolean hasDefaultData(final io.papermc.paper.component.@NotNull DataComponentType dataComponentType) {
++ public boolean hasDefaultData(final io.papermc.paper.datacomponent.@NotNull DataComponentType dataComponentType) {
+ Preconditions.checkArgument(this.asItemType() != null);
+ return this.asItemType().hasDefaultData(dataComponentType);
+ }
@@ -2516,14 +2507,14 @@ index 54704da43cf9c429f3914f0580246dde99aa93c0..a30cd6e6a72dc299a6a1cd26dc9dcd8a
+ * @return an immutable set of data component types
+ * @throws IllegalArgumentException if {@link #isItem()} is false
+ */
-+ public [email protected] @NotNull Set<io.papermc.paper.component.DataComponentType> getDefaultDataTypes() {
++ public [email protected] @NotNull Set<io.papermc.paper.datacomponent.DataComponentType> getDefaultDataTypes() {
+ Preconditions.checkArgument(this.asItemType() != null);
+ return this.asItemType().getDefaultDataTypes();
+ }
+ // Paper end - data component API
}
diff --git a/src/main/java/org/bukkit/Registry.java b/src/main/java/org/bukkit/Registry.java
-index 9725580b6458e5d37fbc6059869604f9883bd6d1..0e4f8505d47c55c52571e217265d7deeed645b8b 100644
+index 9725580b6458e5d37fbc6059869604f9883bd6d1..966bbc686280a1b7f479a2ff755e477662f4bcd2 100644
--- a/src/main/java/org/bukkit/Registry.java
+++ b/src/main/java/org/bukkit/Registry.java
@@ -348,6 +348,8 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
@@ -2531,12 +2522,12 @@ index 9725580b6458e5d37fbc6059869604f9883bd6d1..0e4f8505d47c55c52571e217265d7dee
}
};
+
-+ Registry<io.papermc.paper.component.DataComponentType> DATA_COMPONENT_TYPE = io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(io.papermc.paper.registry.RegistryKey.DATA_COMPONENT_TYPE); // Paper
++ Registry<io.papermc.paper.datacomponent.DataComponentType> DATA_COMPONENT_TYPE = io.papermc.paper.registry.RegistryAccess.registryAccess().getRegistry(io.papermc.paper.registry.RegistryKey.DATA_COMPONENT_TYPE); // Paper
// Paper end - potion effect type registry
/**
* Get the object by its key.
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5fd898a72 100644
+index f603b5b6ba80af919f415322583a8345a5b1358a..26cb1e31a8169283f11b5a7af8a4fd52754095ae 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -1031,4 +1031,123 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
@@ -2551,10 +2542,10 @@ index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5
+ * @param type the data component type
+ * @return the value for the data component type, or null if not set or marked as removed
+ * @param <T> the value type
-+ * @see #hasData(io.papermc.paper.component.DataComponentType) for DataComponentType.NonValued
++ * @see #hasData(io.papermc.paper.datacomponent.DataComponentType) for DataComponentType.NonValued
+ */
+ @org.jetbrains.annotations.Contract(pure = true)
-+ public <T> @Nullable T getData(final io.papermc.paper.component.DataComponentType.@NotNull Valued<T> type) {
++ public <T> @Nullable T getData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<T> type) {
+ return this.craftDelegate.getData(type);
+ }
+
@@ -2569,7 +2560,7 @@ index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5
+ */
+ @Utility
+ @org.jetbrains.annotations.Contract(value = "_, !null -> !null", pure = true)
-+ public <T> @Nullable T getDataOrDefault(final io.papermc.paper.component.DataComponentType.@NotNull Valued<? extends T> type, final @Nullable T fallback) {
++ public <T> @Nullable T getDataOrDefault(final io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<? extends T> type, final @Nullable T fallback) {
+ final T object = this.getData(type);
+ return object != null ? object : fallback;
+ }
@@ -2581,7 +2572,7 @@ index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5
+ * @return true if set, false otherwise
+ */
+ @org.jetbrains.annotations.Contract(pure = true)
-+ public boolean hasData(final io.papermc.paper.component.@NotNull DataComponentType type) {
++ public boolean hasData(final io.papermc.paper.datacomponent.@NotNull DataComponentType type) {
+ return this.craftDelegate.hasData(type);
+ }
+
@@ -2591,36 +2582,36 @@ index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5
+ * @return an immutable set of data component types
+ */
+ @org.jetbrains.annotations.Contract("-> new")
-+ public [email protected] Set<io.papermc.paper.component.@NotNull DataComponentType> getDataTypes() {
++ public [email protected] Set<io.papermc.paper.datacomponent.@NotNull DataComponentType> getDataTypes() {
+ return this.craftDelegate.getDataTypes();
+ }
+
+ /**
+ * Sets the value of the data component type for this itemstack. To
+ * reset the value to the default for the {@link #getType() item type}, use
-+ * {@link #resetData(io.papermc.paper.component.DataComponentType)}. To mark the data component type
-+ * as removed, use {@link #unsetData(io.papermc.paper.component.DataComponentType)}
++ * {@link #resetData(io.papermc.paper.datacomponent.DataComponentType)}. To mark the data component type
++ * as removed, use {@link #unsetData(io.papermc.paper.datacomponent.DataComponentType)}
+ *
+ * @param type component type
+ * @param valueBuilder value builder
+ * @param <T> value type
+ */
+ @Utility
-+ public <T> void setData(final io.papermc.paper.component.DataComponentType.@NotNull Valued<T> type, final io.papermc.paper.component.@NotNull ComponentBuilder<T> valueBuilder) {
++ public <T> void setData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<T> type, final io.papermc.paper.datacomponent.@NotNull ComponentBuilder<T> valueBuilder) {
+ this.setData(type, valueBuilder.build());
+ }
+
+ /**
+ * Sets the value of the data component type for this itemstack. To
+ * reset the value to the default for the {@link #getType() item type}, use
-+ * {@link #resetData(io.papermc.paper.component.DataComponentType)}. To mark the data component type
-+ * as removed, use {@link #unsetData(io.papermc.paper.component.DataComponentType)}
++ * {@link #resetData(io.papermc.paper.datacomponent.DataComponentType)}. To mark the data component type
++ * as removed, use {@link #unsetData(io.papermc.paper.datacomponent.DataComponentType)}
+ *
+ * @param type component type
+ * @param value value to set
+ * @param <T> value type
+ */
-+ public <T> void setData(final io.papermc.paper.component.DataComponentType.@NotNull Valued<T> type, final @NotNull T value) {
++ public <T> void setData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<T> type, final @NotNull T value) {
+ this.craftDelegate.setData(type, value);
+ }
+
@@ -2629,7 +2620,7 @@ index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5
+ *
+ * @param type type
+ */
-+ public void setData(final io.papermc.paper.component.DataComponentType.@NotNull NonValued type) {
++ public void setData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull NonValued type) {
+ this.craftDelegate.setData(type);
+ }
+
@@ -2638,16 +2629,16 @@ index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5
+ *
+ * @param type data component type
+ */
-+ public void unsetData(final io.papermc.paper.component.@NotNull DataComponentType type) {
++ public void unsetData(final io.papermc.paper.datacomponent.@NotNull DataComponentType type) {
+ this.craftDelegate.unsetData(type);
+ }
+
+ /**
+ * Resets the value of this component to be the default
-+ * value for the item type from {@link Material#getDefaultData(io.papermc.paper.component.DataComponentType.Valued)}
++ * value for the item type from {@link Material#getDefaultData(io.papermc.paper.datacomponent.DataComponentType.Valued)}
+ * @param type data component type to reset
+ */
-+ public void resetData(final io.papermc.paper.component.@NotNull DataComponentType type) {
++ public void resetData(final io.papermc.paper.datacomponent.@NotNull DataComponentType type) {
+ this.craftDelegate.resetData(type);
+ }
+
@@ -2658,13 +2649,13 @@ index f603b5b6ba80af919f415322583a8345a5b1358a..577fa629f8bf0fb3b90689ce391155e5
+ * @param type the data component type
+ * @return true if the data type is overridden
+ */
-+ public boolean isOverridden(final io.papermc.paper.component.@NotNull DataComponentType type) {
++ public boolean isOverridden(final io.papermc.paper.datacomponent.@NotNull DataComponentType type) {
+ return this.craftDelegate.isOverridden(type);
+ }
+ // Paper end - data component API
}
diff --git a/src/main/java/org/bukkit/inventory/ItemType.java b/src/main/java/org/bukkit/inventory/ItemType.java
-index 6bc1853ada3ea38bc36cb31fbb5ce246347fe5d4..a985de6eeeee2b4a856dbcfb403cfe128235dd24 100644
+index 6bc1853ada3ea38bc36cb31fbb5ce246347fe5d4..a5d2ba61678bb55ee6ff44026f58e15fa7f1e466 100644
--- a/src/main/java/org/bukkit/inventory/ItemType.java
+++ b/src/main/java/org/bukkit/inventory/ItemType.java
@@ -2326,4 +2326,31 @@ public interface ItemType extends Keyed, Translatable, net.kyori.adventure.trans
@@ -2679,9 +2670,9 @@ index 6bc1853ada3ea38bc36cb31fbb5ce246347fe5d4..a985de6eeeee2b4a856dbcfb403cfe12
+ * @param dataComponentType the data component type
+ * @return the default value or null if there is none
+ * @param <T> the value type
-+ * @see #hasDefaultData(io.papermc.paper.component.DataComponentType) for DataComponentType.NonValued
++ * @see #hasDefaultData(io.papermc.paper.datacomponent.DataComponentType) for DataComponentType.NonValued
+ */
-+ @Nullable <T> T getDefaultData(io.papermc.paper.component.DataComponentType.@NotNull Valued<T> dataComponentType);
++ @Nullable <T> T getDefaultData(io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<T> dataComponentType);
+
+ /**
+ * Checks if the data component type has a default value for this ItemType.
@@ -2689,13 +2680,13 @@ index 6bc1853ada3ea38bc36cb31fbb5ce246347fe5d4..a985de6eeeee2b4a856dbcfb403cfe12
+ * @param dataComponentType the data component type
+ * @return true if there is a default value
+ */
-+ boolean hasDefaultData(io.papermc.paper.component.@NotNull DataComponentType dataComponentType);
++ boolean hasDefaultData(io.papermc.paper.datacomponent.@NotNull DataComponentType dataComponentType);
+
+ /**
+ * Gets the default data component types for this ItemType.
+ *
+ * @return an immutable set of data component types
+ */
-+ [email protected] @NotNull Set<io.papermc.paper.component.DataComponentType> getDefaultDataTypes();
++ [email protected] @NotNull Set<io.papermc.paper.datacomponent.DataComponentType> getDefaultDataTypes();
+ // Paper end - data component API
}
diff --git a/patches/server/1026-WIP-DataComponent-API.patch b/patches/server/1026-WIP-DataComponent-API.patch
index 21dfe4207b..970b57a1e5 100644
--- a/patches/server/1026-WIP-DataComponent-API.patch
+++ b/patches/server/1026-WIP-DataComponent-API.patch
@@ -7,13 +7,13 @@ Subject: [PATCH] WIP DataComponent API
public net/minecraft/world/item/component/ItemContainerContents MAX_SIZE
public net/minecraft/world/item/component/ItemContainerContents items
-diff --git a/src/main/java/io/papermc/paper/component/ComponentAdapter.java b/src/main/java/io/papermc/paper/component/ComponentAdapter.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/ComponentAdapter.java b/src/main/java/io/papermc/paper/datacomponent/ComponentAdapter.java
new file mode 100644
-index 0000000000000000000000000000000000000000..e538819c873a324c58bcd8e73f89510ed77b7a00
+index 0000000000000000000000000000000000000000..2e6860c991b7484996897c3432d85f6df8cb1022
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/ComponentAdapter.java
++++ b/src/main/java/io/papermc/paper/datacomponent/ComponentAdapter.java
@@ -0,0 +1,25 @@
-+package io.papermc.paper.component;
++package io.papermc.paper.datacomponent;
+
+import java.util.function.Function;
+import net.minecraft.core.component.DataComponentType;
@@ -38,45 +38,45 @@ index 0000000000000000000000000000000000000000..e538819c873a324c58bcd8e73f89510e
+ return this.vanillaToApi.apply(value);
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/ComponentAdapters.java b/src/main/java/io/papermc/paper/component/ComponentAdapters.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/ComponentAdapters.java b/src/main/java/io/papermc/paper/datacomponent/ComponentAdapters.java
new file mode 100644
-index 0000000000000000000000000000000000000000..b01c5169e5677ff5b18e2e90be4f2018ad5928cc
+index 0000000000000000000000000000000000000000..7aa48de3f2c02f8d4f775b23f563d6c4d47d5b64
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/ComponentAdapters.java
++++ b/src/main/java/io/papermc/paper/datacomponent/ComponentAdapters.java
@@ -0,0 +1,185 @@
-+package io.papermc.paper.component;
++package io.papermc.paper.datacomponent;
+
+import com.mojang.brigadier.exceptions.CommandSyntaxException;
+import io.papermc.paper.adventure.PaperAdventure;
-+import io.papermc.paper.component.item.PaperBannerPatternLayers;
-+import io.papermc.paper.component.item.PaperBlockItemDataProperties;
-+import io.papermc.paper.component.item.PaperBundleContents;
-+import io.papermc.paper.component.item.PaperChargedProjectiles;
-+import io.papermc.paper.component.item.PaperCustomModelData;
-+import io.papermc.paper.component.item.PaperDyedItemColor;
-+import io.papermc.paper.component.item.PaperFireworks;
-+import io.papermc.paper.component.item.PaperFoodProperties;
-+import io.papermc.paper.component.item.PaperItemAdventurePredicate;
-+import io.papermc.paper.component.item.PaperItemArmorTrim;
-+import io.papermc.paper.component.item.PaperItemAttributeModifiers;
-+import io.papermc.paper.component.item.PaperItemContainerContents;
-+import io.papermc.paper.component.item.PaperItemEnchantments;
-+import io.papermc.paper.component.item.PaperItemLore;
-+import io.papermc.paper.component.item.PaperItemTool;
-+import io.papermc.paper.component.item.PaperJukeboxPlayable;
-+import io.papermc.paper.component.item.PaperLockCode;
-+import io.papermc.paper.component.item.PaperLodestoneTracker;
-+import io.papermc.paper.component.item.PaperMapDecorations;
-+import io.papermc.paper.component.item.PaperMapID;
-+import io.papermc.paper.component.item.PaperMapItemColor;
-+import io.papermc.paper.component.item.PaperPotDecorations;
-+import io.papermc.paper.component.item.PaperPotionContents;
-+import io.papermc.paper.component.item.PaperResolvableProfile;
-+import io.papermc.paper.component.item.PaperSeededContainerLoot;
-+import io.papermc.paper.component.item.PaperSuspiciousStewEffects;
-+import io.papermc.paper.component.item.PaperUnbreakable;
-+import io.papermc.paper.component.item.PaperWritableBookContent;
-+import io.papermc.paper.component.item.PaperWrittenBookContent;
++import io.papermc.paper.datacomponent.item.PaperBannerPatternLayers;
++import io.papermc.paper.datacomponent.item.PaperBlockItemDataProperties;
++import io.papermc.paper.datacomponent.item.PaperBundleContents;
++import io.papermc.paper.datacomponent.item.PaperChargedProjectiles;
++import io.papermc.paper.datacomponent.item.PaperCustomModelData;
++import io.papermc.paper.datacomponent.item.PaperDyedItemColor;
++import io.papermc.paper.datacomponent.item.PaperFireworks;
++import io.papermc.paper.datacomponent.item.PaperFoodProperties;
++import io.papermc.paper.datacomponent.item.PaperItemAdventurePredicate;
++import io.papermc.paper.datacomponent.item.PaperItemArmorTrim;
++import io.papermc.paper.datacomponent.item.PaperItemAttributeModifiers;
++import io.papermc.paper.datacomponent.item.PaperItemContainerContents;
++import io.papermc.paper.datacomponent.item.PaperItemEnchantments;
++import io.papermc.paper.datacomponent.item.PaperItemLore;
++import io.papermc.paper.datacomponent.item.PaperItemTool;
++import io.papermc.paper.datacomponent.item.PaperJukeboxPlayable;
++import io.papermc.paper.datacomponent.item.PaperLockCode;
++import io.papermc.paper.datacomponent.item.PaperLodestoneTracker;
++import io.papermc.paper.datacomponent.item.PaperMapDecorations;
++import io.papermc.paper.datacomponent.item.PaperMapID;
++import io.papermc.paper.datacomponent.item.PaperMapItemColor;
++import io.papermc.paper.datacomponent.item.PaperPotDecorations;
++import io.papermc.paper.datacomponent.item.PaperPotionContents;
++import io.papermc.paper.datacomponent.item.PaperResolvableProfile;
++import io.papermc.paper.datacomponent.item.PaperSeededContainerLoot;
++import io.papermc.paper.datacomponent.item.PaperSuspiciousStewEffects;
++import io.papermc.paper.datacomponent.item.PaperUnbreakable;
++import io.papermc.paper.datacomponent.item.PaperWritableBookContent;
++import io.papermc.paper.datacomponent.item.PaperWrittenBookContent;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
@@ -153,7 +153,7 @@ index 0000000000000000000000000000000000000000..b01c5169e5677ff5b18e2e90be4f2018
+ register(DataComponents.MAP_COLOR, PaperMapItemColor::new);
+ register(DataComponents.MAP_ID, PaperMapID::new);
+ register(DataComponents.MAP_DECORATIONS, PaperMapDecorations::new);
-+ register(DataComponents.MAP_POST_PROCESSING, nms -> io.papermc.paper.component.item.MapPostProcessing.valueOf(nms.name()), api -> MapPostProcessing.valueOf(api.name()));
++ register(DataComponents.MAP_POST_PROCESSING, nms -> io.papermc.paper.datacomponent.item.MapPostProcessing.valueOf(nms.name()), api -> MapPostProcessing.valueOf(api.name()));
+ register(DataComponents.CHARGED_PROJECTILES, PaperChargedProjectiles::new);
+ register(DataComponents.BUNDLE_CONTENTS, PaperBundleContents::new);
+ register(DataComponents.POTION_CONTENTS, PaperPotionContents::new);
@@ -229,13 +229,13 @@ index 0000000000000000000000000000000000000000..b01c5169e5677ff5b18e2e90be4f2018
+ ADAPTERS.put(key, new ComponentAdapter<>(type, apiToVanilla, vanillaToApi));
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/PaperComponentType.java b/src/main/java/io/papermc/paper/component/PaperComponentType.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/PaperComponentType.java b/src/main/java/io/papermc/paper/datacomponent/PaperComponentType.java
new file mode 100644
-index 0000000000000000000000000000000000000000..5639559368e6866e9b0afa6688f3b12cde4254f8
+index 0000000000000000000000000000000000000000..b5db510f1e641bba6d6a70c920921a774dc411a0
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/PaperComponentType.java
++++ b/src/main/java/io/papermc/paper/datacomponent/PaperComponentType.java
@@ -0,0 +1,118 @@
-+package io.papermc.paper.component;
++package io.papermc.paper.datacomponent;
+
+import java.util.Collections;
+import java.util.Set;
@@ -353,13 +353,13 @@ index 0000000000000000000000000000000000000000..5639559368e6866e9b0afa6688f3b12c
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ComponentTypesBridgesImpl.java b/src/main/java/io/papermc/paper/component/item/ComponentTypesBridgesImpl.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ComponentTypesBridgesImpl.java b/src/main/java/io/papermc/paper/datacomponent/item/ComponentTypesBridgesImpl.java
new file mode 100644
-index 0000000000000000000000000000000000000000..071df718283271df1a148e9ad4654da70e58d4c0
+index 0000000000000000000000000000000000000000..ba148b249d0e29debca93bc146caabf3016a1d57
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ComponentTypesBridgesImpl.java
-@@ -0,0 +1,173 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ComponentTypesBridgesImpl.java
+@@ -0,0 +1,177 @@
++package io.papermc.paper.datacomponent.item;
+
+import io.papermc.paper.registry.set.RegistryKeySet;
+import io.papermc.paper.util.Filtered;
@@ -369,7 +369,11 @@ index 0000000000000000000000000000000000000000..071df718283271df1a148e9ad4654da7
+import org.bukkit.inventory.meta.trim.ArmorTrim;
+import org.bukkit.map.MapCursor;
+import org.bukkit.potion.PotionEffect;
++import org.checkerframework.checker.nullness.qual.NonNull;
++import org.checkerframework.checker.nullness.qual.Nullable;
++import org.checkerframework.framework.qual.DefaultQualifier;
+
++@DefaultQualifier(NonNull.class)
+public final class ComponentTypesBridgesImpl implements ComponentTypesBridge {
+
+ @Override
@@ -478,7 +482,7 @@ index 0000000000000000000000000000000000000000..071df718283271df1a148e9ad4654da7
+ }
+
+ @Override
-+ public Tool.Rule rule(final RegistryKeySet<BlockType> blockTypes, final Float speed, final TriState correctForDrops) {
++ public Tool.Rule rule(final RegistryKeySet<BlockType> blockTypes, final @Nullable Float speed, final TriState correctForDrops) {
+ return new PaperItemTool.PaperRule(blockTypes, speed, correctForDrops);
+ }
+
@@ -532,13 +536,13 @@ index 0000000000000000000000000000000000000000..071df718283271df1a148e9ad4654da7
+ return new PaperLockCode.BuilderImpl();
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/ComponentUtils.java b/src/main/java/io/papermc/paper/component/item/ComponentUtils.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/ComponentUtils.java b/src/main/java/io/papermc/paper/datacomponent/item/ComponentUtils.java
new file mode 100644
-index 0000000000000000000000000000000000000000..fdb9b248ae51419ac98a1321e9c96e0de3337d58
+index 0000000000000000000000000000000000000000..d91a8b1e903ebb01b7da7e4d0150af5cc9ef68e4
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/ComponentUtils.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/ComponentUtils.java
@@ -0,0 +1,38 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
@@ -576,13 +580,13 @@ index 0000000000000000000000000000000000000000..fdb9b248ae51419ac98a1321e9c96e0d
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperBannerPatternLayers.java b/src/main/java/io/papermc/paper/component/item/PaperBannerPatternLayers.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperBannerPatternLayers.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperBannerPatternLayers.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3077a38a5b33b155ea23ebf163c5c4c425d6c8b8
+index 0000000000000000000000000000000000000000..a624e3fe2721ef55399b2d4bccf6ddf3917c756b
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperBannerPatternLayers.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperBannerPatternLayers.java
@@ -0,0 +1,62 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import java.util.List;
+import java.util.Optional;
@@ -595,7 +599,7 @@ index 0000000000000000000000000000000000000000..3077a38a5b33b155ea23ebf163c5c4c4
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperBannerPatternLayers(
@@ -644,13 +648,13 @@ index 0000000000000000000000000000000000000000..3077a38a5b33b155ea23ebf163c5c4c4
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperBlockItemDataProperties.java b/src/main/java/io/papermc/paper/component/item/PaperBlockItemDataProperties.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperBlockItemDataProperties.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperBlockItemDataProperties.java
new file mode 100644
-index 0000000000000000000000000000000000000000..ec156e305c4aebf2972082f6bde2390be8544269
+index 0000000000000000000000000000000000000000..09335d46724831478fe396905a0f8d21a971a3f4
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperBlockItemDataProperties.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperBlockItemDataProperties.java
@@ -0,0 +1,55 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import java.util.HashMap;
@@ -705,13 +709,13 @@ index 0000000000000000000000000000000000000000..ec156e305c4aebf2972082f6bde2390b
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperBundleContents.java b/src/main/java/io/papermc/paper/component/item/PaperBundleContents.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperBundleContents.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperBundleContents.java
new file mode 100644
-index 0000000000000000000000000000000000000000..fbd9a0a1eb447d1a5ab0e898d9dc80b61acde6be
+index 0000000000000000000000000000000000000000..ff2f4400ce971c6934672267c02e99a3d16500d7
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperBundleContents.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperBundleContents.java
@@ -0,0 +1,52 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import java.util.ArrayList;
+import java.util.List;
@@ -721,7 +725,7 @@ index 0000000000000000000000000000000000000000..fbd9a0a1eb447d1a5ab0e898d9dc80b6
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperBundleContents(
@@ -763,13 +767,13 @@ index 0000000000000000000000000000000000000000..fbd9a0a1eb447d1a5ab0e898d9dc80b6
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperChargedProjectiles.java b/src/main/java/io/papermc/paper/component/item/PaperChargedProjectiles.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperChargedProjectiles.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperChargedProjectiles.java
new file mode 100644
-index 0000000000000000000000000000000000000000..862eb057c156117b5856cd9bc453a6e378c972e6
+index 0000000000000000000000000000000000000000..4e05a8a3609f50d1e33c7babee6be5b6bc27237a
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperChargedProjectiles.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperChargedProjectiles.java
@@ -0,0 +1,51 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import java.util.ArrayList;
+import java.util.List;
@@ -779,7 +783,7 @@ index 0000000000000000000000000000000000000000..862eb057c156117b5856cd9bc453a6e3
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperChargedProjectiles(
@@ -820,13 +824,13 @@ index 0000000000000000000000000000000000000000..862eb057c156117b5856cd9bc453a6e3
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperCustomModelData.java b/src/main/java/io/papermc/paper/component/item/PaperCustomModelData.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperCustomModelData.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperCustomModelData.java
new file mode 100644
-index 0000000000000000000000000000000000000000..b7a1233997d7192c5fd5a8c2e43fe235e1f1fa96
+index 0000000000000000000000000000000000000000..88f9697d3beda288c3e02b571753c1244f7c5e58
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperCustomModelData.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperCustomModelData.java
@@ -0,0 +1,37 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.bukkit.craftbukkit.util.Handleable;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -863,13 +867,13 @@ index 0000000000000000000000000000000000000000..b7a1233997d7192c5fd5a8c2e43fe235
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperDyedItemColor.java b/src/main/java/io/papermc/paper/component/item/PaperDyedItemColor.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperDyedItemColor.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperDyedItemColor.java
new file mode 100644
-index 0000000000000000000000000000000000000000..c5b60a6c93baed9f132e1ab9d5b3c7d7da386819
+index 0000000000000000000000000000000000000000..da22c58bcbf3e03686961f5a5127edeff700a545
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperDyedItemColor.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperDyedItemColor.java
@@ -0,0 +1,55 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.bukkit.Color;
+import org.bukkit.craftbukkit.util.Handleable;
@@ -924,13 +928,13 @@ index 0000000000000000000000000000000000000000..c5b60a6c93baed9f132e1ab9d5b3c7d7
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperFireworks.java b/src/main/java/io/papermc/paper/component/item/PaperFireworks.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperFireworks.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperFireworks.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0b3e574f9b5c05d97fbbbe66579844ec14ed2798
+index 0000000000000000000000000000000000000000..9671617b9cf3c0e97b1b200d1f44b85a3c17a38b
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperFireworks.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperFireworks.java
@@ -0,0 +1,79 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
@@ -942,8 +946,8 @@ index 0000000000000000000000000000000000000000..0b3e574f9b5c05d97fbbbe66579844ec
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.addAndConvert;
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.addAndConvert;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperFireworks(
@@ -1009,13 +1013,13 @@ index 0000000000000000000000000000000000000000..0b3e574f9b5c05d97fbbbe66579844ec
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperFoodProperties.java b/src/main/java/io/papermc/paper/component/item/PaperFoodProperties.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperFoodProperties.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperFoodProperties.java
new file mode 100644
-index 0000000000000000000000000000000000000000..faff33e3dc42cd52130c4896d939ae5386db3035
+index 0000000000000000000000000000000000000000..17e40b72146afcc7eb79a536855d22244b3bb899
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperFoodProperties.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperFoodProperties.java
@@ -0,0 +1,146 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
@@ -1031,8 +1035,8 @@ index 0000000000000000000000000000000000000000..faff33e3dc42cd52130c4896d939ae53
+import org.checkerframework.framework.qual.DefaultQualifier;
+import org.jetbrains.annotations.Nullable;
+
-+import static io.papermc.paper.component.item.ComponentUtils.addAndConvert;
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.addAndConvert;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperFoodProperties(
@@ -1161,41 +1165,29 @@ index 0000000000000000000000000000000000000000..faff33e3dc42cd52130c4896d939ae53
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperItemAdventurePredicate.java b/src/main/java/io/papermc/paper/component/item/PaperItemAdventurePredicate.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperItemAdventurePredicate.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemAdventurePredicate.java
new file mode 100644
-index 0000000000000000000000000000000000000000..c0604b3d12e5299e602075cbdfa5a630b0ea52e6
+index 0000000000000000000000000000000000000000..cde2b0abffbd717984c57e649a91842c30b5360d
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperItemAdventurePredicate.java
-@@ -0,0 +1,90 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemAdventurePredicate.java
+@@ -0,0 +1,78 @@
++package io.papermc.paper.datacomponent.item;
+
-+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
-+import java.util.function.Function;
+import io.papermc.paper.block.BlockPredicate;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.paper.registry.set.PaperRegistrySets;
-+import io.papermc.paper.registry.set.RegistryKeySet;
-+import net.minecraft.core.HolderSet;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.core.registries.Registries;
-+import net.minecraft.world.item.AdventureModePredicate;
-+import net.minecraft.world.level.block.Block;
-+import org.bukkit.attribute.Attribute;
-+import org.bukkit.attribute.AttributeModifier;
-+import org.bukkit.block.BlockType;
-+import org.bukkit.craftbukkit.CraftEquipmentSlot;
-+import org.bukkit.craftbukkit.attribute.CraftAttribute;
-+import org.bukkit.craftbukkit.attribute.CraftAttributeInstance;
+import org.bukkit.craftbukkit.util.Handleable;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+import org.jetbrains.annotations.Unmodifiable;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperItemAdventurePredicate(
@@ -1257,13 +1249,13 @@ index 0000000000000000000000000000000000000000..c0604b3d12e5299e602075cbdfa5a630
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperItemArmorTrim.java b/src/main/java/io/papermc/paper/component/item/PaperItemArmorTrim.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperItemArmorTrim.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemArmorTrim.java
new file mode 100644
-index 0000000000000000000000000000000000000000..8d2f20225101a1134b9d89a03f2f1a704bd4d51f
+index 0000000000000000000000000000000000000000..d96be0ea89094d080ab81722d36af99a4be7808f
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperItemArmorTrim.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemArmorTrim.java
@@ -0,0 +1,68 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.bukkit.craftbukkit.inventory.trim.CraftTrimMaterial;
+import org.bukkit.craftbukkit.inventory.trim.CraftTrimPattern;
@@ -1331,13 +1323,13 @@ index 0000000000000000000000000000000000000000..8d2f20225101a1134b9d89a03f2f1a70
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperItemAttributeModifiers.java b/src/main/java/io/papermc/paper/component/item/PaperItemAttributeModifiers.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperItemAttributeModifiers.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemAttributeModifiers.java
new file mode 100644
-index 0000000000000000000000000000000000000000..e5cf4c3d6dbfc70feebb328aa006e18c33e09418
+index 0000000000000000000000000000000000000000..ea0c8b76a577a4be9588154f8192257a7bc2b1ed
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperItemAttributeModifiers.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemAttributeModifiers.java
@@ -0,0 +1,91 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
@@ -1351,7 +1343,7 @@ index 0000000000000000000000000000000000000000..e5cf4c3d6dbfc70feebb328aa006e18c
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperItemAttributeModifiers(
@@ -1428,13 +1420,13 @@ index 0000000000000000000000000000000000000000..e5cf4c3d6dbfc70feebb328aa006e18c
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperItemContainerContents.java b/src/main/java/io/papermc/paper/component/item/PaperItemContainerContents.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperItemContainerContents.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemContainerContents.java
new file mode 100644
-index 0000000000000000000000000000000000000000..cb198c1d7194562ffc4e74047250b53f6e41b034
+index 0000000000000000000000000000000000000000..eb86427206b7f5d38c40bfe26358dc6a051ac87f
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperItemContainerContents.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemContainerContents.java
@@ -0,0 +1,63 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
@@ -1445,8 +1437,8 @@ index 0000000000000000000000000000000000000000..cb198c1d7194562ffc4e74047250b53f
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.addAndConvert;
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.addAndConvert;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperItemContainerContents(
@@ -1497,13 +1489,13 @@ index 0000000000000000000000000000000000000000..cb198c1d7194562ffc4e74047250b53f
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperItemEnchantments.java b/src/main/java/io/papermc/paper/component/item/PaperItemEnchantments.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperItemEnchantments.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemEnchantments.java
new file mode 100644
-index 0000000000000000000000000000000000000000..2e6e7c82362bb209b198a38e186b3bcfaa41b952
+index 0000000000000000000000000000000000000000..bbf1524f95f8672dff239f17303e858bdc8fd5b3
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperItemEnchantments.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemEnchantments.java
@@ -0,0 +1,92 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import java.util.Collections;
@@ -1595,13 +1587,13 @@ index 0000000000000000000000000000000000000000..2e6e7c82362bb209b198a38e186b3bcf
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperItemLore.java b/src/main/java/io/papermc/paper/component/item/PaperItemLore.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperItemLore.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemLore.java
new file mode 100644
-index 0000000000000000000000000000000000000000..66c18c734d25fa4184f62146cdb849536137f16b
+index 0000000000000000000000000000000000000000..a7374010c21d87a225805d2c7dce2c5d04cc2e19
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperItemLore.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemLore.java
@@ -0,0 +1,85 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.adventure.PaperAdventure;
@@ -1614,7 +1606,7 @@ index 0000000000000000000000000000000000000000..66c18c734d25fa4184f62146cdb84953
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperItemLore(
@@ -1686,40 +1678,31 @@ index 0000000000000000000000000000000000000000..66c18c734d25fa4184f62146cdb84953
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperItemTool.java b/src/main/java/io/papermc/paper/component/item/PaperItemTool.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperItemTool.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemTool.java
new file mode 100644
-index 0000000000000000000000000000000000000000..67efd3e55c95567187319010d7ea825fb736e375
+index 0000000000000000000000000000000000000000..f6338542768b4f5c29919bc69d825a9cc18d7989
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperItemTool.java
-@@ -0,0 +1,107 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperItemTool.java
+@@ -0,0 +1,98 @@
++package io.papermc.paper.datacomponent.item;
+
-+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
-+import io.papermc.paper.registry.PaperRegistries;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.paper.registry.set.PaperRegistrySets;
+import io.papermc.paper.registry.set.RegistryKeySet;
+import net.kyori.adventure.util.TriState;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.core.registries.Registries;
-+import net.minecraft.server.MinecraftServer;
-+import org.bukkit.attribute.Attribute;
-+import org.bukkit.attribute.AttributeModifier;
+import org.bukkit.block.BlockType;
-+import org.bukkit.craftbukkit.CraftEquipmentSlot;
-+import org.bukkit.craftbukkit.attribute.CraftAttribute;
-+import org.bukkit.craftbukkit.attribute.CraftAttributeInstance;
+import org.bukkit.craftbukkit.util.Handleable;
+import org.checkerframework.checker.nullness.qual.NonNull;
-+import org.checkerframework.checker.units.qual.N;
+import org.checkerframework.framework.qual.DefaultQualifier;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperItemTool(
@@ -1799,30 +1782,22 @@ index 0000000000000000000000000000000000000000..67efd3e55c95567187319010d7ea825f
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperJukeboxPlayable.java b/src/main/java/io/papermc/paper/component/item/PaperJukeboxPlayable.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperJukeboxPlayable.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperJukeboxPlayable.java
new file mode 100644
-index 0000000000000000000000000000000000000000..b9970492ea094c94b7c323115189c09656f0b364
+index 0000000000000000000000000000000000000000..754532e7ecc86d4494af58658a4d96d2d5c64876
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperJukeboxPlayable.java
-@@ -0,0 +1,67 @@
-+package io.papermc.paper.component.item;
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperJukeboxPlayable.java
+@@ -0,0 +1,59 @@
++package io.papermc.paper.datacomponent.item;
+
-+import com.google.common.base.Preconditions;
-+import java.util.ArrayList;
-+import java.util.List;
+import net.minecraft.world.item.EitherHolder;
+import org.bukkit.JukeboxSong;
-+import org.bukkit.attribute.Attribute;
-+import org.bukkit.attribute.AttributeModifier;
-+import org.bukkit.craftbukkit.CraftEquipmentSlot;
+import org.bukkit.craftbukkit.CraftJukeboxSong;
-+import org.bukkit.craftbukkit.attribute.CraftAttribute;
-+import org.bukkit.craftbukkit.attribute.CraftAttributeInstance;
+import org.bukkit.craftbukkit.util.Handleable;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperJukeboxPlayable(
@@ -1872,13 +1847,13 @@ index 0000000000000000000000000000000000000000..b9970492ea094c94b7c323115189c096
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperLockCode.java b/src/main/java/io/papermc/paper/component/item/PaperLockCode.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperLockCode.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperLockCode.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0e6320385a3eaea265bd3ffd2a9ee8310b18599d
+index 0000000000000000000000000000000000000000..07c87bef8903014a955ca61bd797f16310468716
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperLockCode.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperLockCode.java
@@ -0,0 +1,37 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.bukkit.craftbukkit.util.Handleable;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -1915,13 +1890,13 @@ index 0000000000000000000000000000000000000000..0e6320385a3eaea265bd3ffd2a9ee831
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperLodestoneTracker.java b/src/main/java/io/papermc/paper/component/item/PaperLodestoneTracker.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperLodestoneTracker.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperLodestoneTracker.java
new file mode 100644
-index 0000000000000000000000000000000000000000..5611a001165a32f39a26ce171142420ed704430b
+index 0000000000000000000000000000000000000000..27605ab59141e0b995d83eaafc4b83056fe3eb61
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperLodestoneTracker.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperLodestoneTracker.java
@@ -0,0 +1,56 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import java.util.Optional;
+import net.minecraft.core.GlobalPos;
@@ -1977,13 +1952,13 @@ index 0000000000000000000000000000000000000000..5611a001165a32f39a26ce171142420e
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperMapDecorations.java b/src/main/java/io/papermc/paper/component/item/PaperMapDecorations.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperMapDecorations.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperMapDecorations.java
new file mode 100644
-index 0000000000000000000000000000000000000000..99193e35b31259687d350e29c968c8a58397b8e4
+index 0000000000000000000000000000000000000000..90610ea3860e764f9e634bb81f952c1621269d1d
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperMapDecorations.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperMapDecorations.java
@@ -0,0 +1,90 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import java.util.HashMap;
+import java.util.Map;
@@ -2073,13 +2048,13 @@ index 0000000000000000000000000000000000000000..99193e35b31259687d350e29c968c8a5
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperMapID.java b/src/main/java/io/papermc/paper/component/item/PaperMapID.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperMapID.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperMapID.java
new file mode 100644
-index 0000000000000000000000000000000000000000..451e08627a041509e959396e9ce84acd944c17bf
+index 0000000000000000000000000000000000000000..e74819d2e8c3819419d5ddbe686fddf3cb030dd4
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperMapID.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperMapID.java
@@ -0,0 +1,38 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import net.minecraft.world.level.saveddata.maps.MapId;
+import org.bukkit.craftbukkit.util.Handleable;
@@ -2117,13 +2092,13 @@ index 0000000000000000000000000000000000000000..451e08627a041509e959396e9ce84acd
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperMapItemColor.java b/src/main/java/io/papermc/paper/component/item/PaperMapItemColor.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperMapItemColor.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperMapItemColor.java
new file mode 100644
-index 0000000000000000000000000000000000000000..c4087ef46d8ec600a88d3c7c64e740c2721ab0d6
+index 0000000000000000000000000000000000000000..14656be5a23dac70460499a79f60b8f3b3d86f1f
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperMapItemColor.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperMapItemColor.java
@@ -0,0 +1,38 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.bukkit.Color;
+import org.bukkit.craftbukkit.util.Handleable;
@@ -2161,13 +2136,13 @@ index 0000000000000000000000000000000000000000..c4087ef46d8ec600a88d3c7c64e740c2
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperPotDecorations.java b/src/main/java/io/papermc/paper/component/item/PaperPotDecorations.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperPotDecorations.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperPotDecorations.java
new file mode 100644
-index 0000000000000000000000000000000000000000..8b468cc4e15ac1e3e379ba67dbeb681accdc7665
+index 0000000000000000000000000000000000000000..f79cc0bfd543c755a445e140c8ceacb302f53ada
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperPotDecorations.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperPotDecorations.java
@@ -0,0 +1,87 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import java.util.Optional;
@@ -2254,13 +2229,13 @@ index 0000000000000000000000000000000000000000..8b468cc4e15ac1e3e379ba67dbeb681a
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperPotionContents.java b/src/main/java/io/papermc/paper/component/item/PaperPotionContents.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperPotionContents.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperPotionContents.java
new file mode 100644
-index 0000000000000000000000000000000000000000..6c2769f8ba95598c19b87d6b1f8e2f35e4dce813
+index 0000000000000000000000000000000000000000..a18cbe16298ad944e1fff4f4c5576ae377f9a00f
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperPotionContents.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperPotionContents.java
@@ -0,0 +1,90 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import java.util.ArrayList;
+import java.util.List;
@@ -2276,7 +2251,7 @@ index 0000000000000000000000000000000000000000..6c2769f8ba95598c19b87d6b1f8e2f35
+import org.checkerframework.checker.nullness.qual.Nullable;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperPotionContents(
@@ -2350,13 +2325,13 @@ index 0000000000000000000000000000000000000000..6c2769f8ba95598c19b87d6b1f8e2f35
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperResolvableProfile.java b/src/main/java/io/papermc/paper/component/item/PaperResolvableProfile.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperResolvableProfile.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperResolvableProfile.java
new file mode 100644
-index 0000000000000000000000000000000000000000..aafad5e0e57cc782be8afcbf8b5d399c6f937867
+index 0000000000000000000000000000000000000000..11498b8e6cb2db2cfb67ac3fbd4217c681d79f11
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperResolvableProfile.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperResolvableProfile.java
@@ -0,0 +1,105 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.destroystokyo.paper.profile.CraftPlayerProfile;
+import com.destroystokyo.paper.profile.PlayerProfile;
@@ -2375,7 +2350,7 @@ index 0000000000000000000000000000000000000000..aafad5e0e57cc782be8afcbf8b5d399c
+import org.checkerframework.checker.nullness.qual.Nullable;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperResolvableProfile(
@@ -2461,13 +2436,13 @@ index 0000000000000000000000000000000000000000..aafad5e0e57cc782be8afcbf8b5d399c
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperSeededContainerLoot.java b/src/main/java/io/papermc/paper/component/item/PaperSeededContainerLoot.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperSeededContainerLoot.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperSeededContainerLoot.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0fab7c755799ba1af558c72758100577014fe146
+index 0000000000000000000000000000000000000000..c6a11cbe924926ec6d7ac1d69b5dacfb93b2769b
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperSeededContainerLoot.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperSeededContainerLoot.java
@@ -0,0 +1,61 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import io.papermc.paper.adventure.PaperAdventure;
+import net.kyori.adventure.key.Key;
@@ -2528,13 +2503,13 @@ index 0000000000000000000000000000000000000000..0fab7c755799ba1af558c72758100577
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperSuspiciousStewEffects.java b/src/main/java/io/papermc/paper/component/item/PaperSuspiciousStewEffects.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperSuspiciousStewEffects.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperSuspiciousStewEffects.java
new file mode 100644
-index 0000000000000000000000000000000000000000..a608014a15c1efea9b010314e013eb3c9a77c956
+index 0000000000000000000000000000000000000000..19827c8b88f9a9b882633c5aff0561df4cbf2f48
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperSuspiciousStewEffects.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperSuspiciousStewEffects.java
@@ -0,0 +1,59 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import io.papermc.paper.potion.SuspiciousEffectEntry;
+import java.util.ArrayList;
@@ -2544,7 +2519,7 @@ index 0000000000000000000000000000000000000000..a608014a15c1efea9b010314e013eb3c
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+import static io.papermc.paper.potion.SuspiciousEffectEntry.create;
+
+@DefaultQualifier(NonNull.class)
@@ -2593,13 +2568,13 @@ index 0000000000000000000000000000000000000000..a608014a15c1efea9b010314e013eb3c
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperUnbreakable.java b/src/main/java/io/papermc/paper/component/item/PaperUnbreakable.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperUnbreakable.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperUnbreakable.java
new file mode 100644
-index 0000000000000000000000000000000000000000..8be3187a6c624d4ba74d2a58bc64b1b0615a23f6
+index 0000000000000000000000000000000000000000..f95ceec3e154772f0af9e51eac99dcd77a1beab8
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperUnbreakable.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperUnbreakable.java
@@ -0,0 +1,42 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import org.bukkit.craftbukkit.util.Handleable;
+import org.checkerframework.checker.nullness.qual.NonNull;
@@ -2641,13 +2616,13 @@ index 0000000000000000000000000000000000000000..8be3187a6c624d4ba74d2a58bc64b1b0
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperWritableBookContent.java b/src/main/java/io/papermc/paper/component/item/PaperWritableBookContent.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperWritableBookContent.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperWritableBookContent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..a71d7cf78182926d0a3d66e93e9a36b191ff11df
+index 0000000000000000000000000000000000000000..5c8249525613bfb2ddca470f27947fbe7f8cac86
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperWritableBookContent.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperWritableBookContent.java
@@ -0,0 +1,107 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.util.Filtered;
@@ -2660,7 +2635,7 @@ index 0000000000000000000000000000000000000000..a71d7cf78182926d0a3d66e93e9a36b1
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
+
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+import static io.papermc.paper.util.Filtered.create;
+
+@DefaultQualifier(NonNull.class)
@@ -2754,13 +2729,13 @@ index 0000000000000000000000000000000000000000..a71d7cf78182926d0a3d66e93e9a36b1
+ }
+ }
+}
-diff --git a/src/main/java/io/papermc/paper/component/item/PaperWrittenBookContent.java b/src/main/java/io/papermc/paper/component/item/PaperWrittenBookContent.java
+diff --git a/src/main/java/io/papermc/paper/datacomponent/item/PaperWrittenBookContent.java b/src/main/java/io/papermc/paper/datacomponent/item/PaperWrittenBookContent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..42b3d2d576dba7c5d403061d2e102a32d3b177f4
+index 0000000000000000000000000000000000000000..4925f031e41d6b62e597fd1d558b38ec94956f4e
--- /dev/null
-+++ b/src/main/java/io/papermc/paper/component/item/PaperWrittenBookContent.java
++++ b/src/main/java/io/papermc/paper/datacomponent/item/PaperWrittenBookContent.java
@@ -0,0 +1,190 @@
-+package io.papermc.paper.component.item;
++package io.papermc.paper.datacomponent.item;
+
+import com.google.common.base.Preconditions;
+import io.papermc.paper.adventure.PaperAdventure;
@@ -2781,7 +2756,7 @@ index 0000000000000000000000000000000000000000..42b3d2d576dba7c5d403061d2e102a32
+
+import static io.papermc.paper.adventure.PaperAdventure.asAdventure;
+import static io.papermc.paper.adventure.PaperAdventure.asVanilla;
-+import static io.papermc.paper.component.item.ComponentUtils.transform;
++import static io.papermc.paper.datacomponent.item.ComponentUtils.transform;
+
+@DefaultQualifier(NonNull.class)
+public record PaperWrittenBookContent(
@@ -2951,15 +2926,15 @@ index 0000000000000000000000000000000000000000..42b3d2d576dba7c5d403061d2e102a32
+ }
+}
diff --git a/src/main/java/io/papermc/paper/registry/PaperRegistries.java b/src/main/java/io/papermc/paper/registry/PaperRegistries.java
-index 9c0972023bc9be20ba81bbc2e1d6688b615760c0..e7f5aea8c52615cb0644b52e527d0105745bf0f6 100644
+index 9c0972023bc9be20ba81bbc2e1d6688b615760c0..7eb43862789ec1b37b658727e0fc7a99c91d0129 100644
--- a/src/main/java/io/papermc/paper/registry/PaperRegistries.java
+++ b/src/main/java/io/papermc/paper/registry/PaperRegistries.java
@@ -3,6 +3,8 @@ package io.papermc.paper.registry;
import io.papermc.paper.adventure.PaperAdventure;
import io.papermc.paper.registry.data.PaperEnchantmentRegistryEntry;
import io.papermc.paper.registry.data.PaperGameEventRegistryEntry;
-+import io.papermc.paper.component.DataComponentType;
-+import io.papermc.paper.component.PaperComponentType;
++import io.papermc.paper.datacomponent.DataComponentType;
++import io.papermc.paper.datacomponent.PaperComponentType;
import io.papermc.paper.registry.entry.RegistryEntry;
import io.papermc.paper.registry.tag.TagKey;
import java.util.Collections;
@@ -2985,7 +2960,7 @@ index 8ac485d82c2d2b32f4d54e02c18c2cb2c3df4fa4..4f15ec26c7512a6f2b9c14e108d582d3
ItemEnchantments(Object2IntAVLTreeMap<Holder<Enchantment>> enchantments, boolean showInTooltip) { // Paper
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
-index 32a41c8b324aad67b9dcf74387aef299e6478a64..6521990ecae548dae34e1e1e6309d0548023e0e9 100644
+index 32a41c8b324aad67b9dcf74387aef299e6478a64..30cca598bdec443ffe4f8a38ae8c10c4b20d1027 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -192,7 +192,7 @@ public final class CraftItemStack extends ItemStack {
@@ -3030,48 +3005,48 @@ index 32a41c8b324aad67b9dcf74387aef299e6478a64..6521990ecae548dae34e1e1e6309d054
// Paper end - pdc
+ // Paper start - data component API
+ @Override
-+ public <T> T getData(final io.papermc.paper.component.DataComponentType.Valued<T> type) {
++ public <T> T getData(final io.papermc.paper.datacomponent.DataComponentType.Valued<T> type) {
+ if (this.isEmpty()) {
+ return null;
+ }
-+ return io.papermc.paper.component.PaperComponentType.convertDataComponentValue(this.handle.getComponents(), (io.papermc.paper.component.PaperComponentType.ValuedImpl<T, ?>) type);
++ return io.papermc.paper.datacomponent.PaperComponentType.convertDataComponentValue(this.handle.getComponents(), (io.papermc.paper.datacomponent.PaperComponentType.ValuedImpl<T, ?>) type);
+ }
+
+ @Override
-+ public boolean hasData(final io.papermc.paper.component.DataComponentType type) {
++ public boolean hasData(final io.papermc.paper.datacomponent.DataComponentType type) {
+ if (this.isEmpty()) {
+ return false;
+ }
-+ return this.handle.has(io.papermc.paper.component.PaperComponentType.bukkitToMinecraft(type));
++ return this.handle.has(io.papermc.paper.datacomponent.PaperComponentType.bukkitToMinecraft(type));
+ }
+
+ @Override
-+ public java.util.Set<io.papermc.paper.component.DataComponentType> getDataTypes() {
++ public java.util.Set<io.papermc.paper.datacomponent.DataComponentType> getDataTypes() {
+ if (this.isEmpty()) {
+ return java.util.Collections.emptySet();
+ }
-+ return io.papermc.paper.component.PaperComponentType.minecraftToBukkit(this.handle.getComponents().keySet());
++ return io.papermc.paper.datacomponent.PaperComponentType.minecraftToBukkit(this.handle.getComponents().keySet());
+ }
+
+ @Override
-+ public <T> void setData(final io.papermc.paper.component.DataComponentType.Valued<T> type, final T value) {
++ public <T> void setData(final io.papermc.paper.datacomponent.DataComponentType.Valued<T> type, final T value) {
+ Preconditions.checkArgument(value != null, "value cannot be null");
+ if (this.isEmpty()) {
+ return;
+ }
-+ this.setDataInternal((io.papermc.paper.component.PaperComponentType.ValuedImpl<T, ?>) type, value);
++ this.setDataInternal((io.papermc.paper.datacomponent.PaperComponentType.ValuedImpl<T, ?>) type, value);
+ }
+
+ @Override
-+ public void setData(final io.papermc.paper.component.DataComponentType.NonValued type) {
++ public void setData(final io.papermc.paper.datacomponent.DataComponentType.NonValued type) {
+ if (this.isEmpty()) {
+ return;
+ }
-+ this.setDataInternal((io.papermc.paper.component.PaperComponentType.NonValuedImpl<?, ?>) type, null);
++ this.setDataInternal((io.papermc.paper.datacomponent.PaperComponentType.NonValuedImpl<?, ?>) type, null);
+ }
+
-+ private <A, V> void setDataInternal(final io.papermc.paper.component.PaperComponentType<A, V> type, final A value) {
-+ final io.papermc.paper.component.ComponentAdapter<V, A> adapter = type.getAdapter();
++ private <A, V> void setDataInternal(final io.papermc.paper.datacomponent.PaperComponentType<A, V> type, final A value) {
++ final io.papermc.paper.datacomponent.ComponentAdapter<V, A> adapter = type.getAdapter();
+ if (adapter.isValued()) {
+ Preconditions.checkArgument(value != null, "value cannot be null");
+ this.handle.set(type.getHandle(), adapter.toVanilla(value));
@@ -3081,23 +3056,23 @@ index 32a41c8b324aad67b9dcf74387aef299e6478a64..6521990ecae548dae34e1e1e6309d054
+ }
+
+ @Override
-+ public void unsetData(final io.papermc.paper.component.DataComponentType type) {
++ public void unsetData(final io.papermc.paper.datacomponent.DataComponentType type) {
+ if (this.isEmpty()) {
+ return;
+ }
-+ this.handle.remove(io.papermc.paper.component.PaperComponentType.bukkitToMinecraft(type));
++ this.handle.remove(io.papermc.paper.datacomponent.PaperComponentType.bukkitToMinecraft(type));
+ }
+
+ @Override
-+ public void resetData(final io.papermc.paper.component.DataComponentType type) {
++ public void resetData(final io.papermc.paper.datacomponent.DataComponentType type) {
+ if (this.isEmpty()) {
+ return;
+ }
-+ this.resetData((io.papermc.paper.component.PaperComponentType<?, ?>) type);
++ this.resetData((io.papermc.paper.datacomponent.PaperComponentType<?, ?>) type);
+ }
+
-+ private <M> void resetData(final io.papermc.paper.component.PaperComponentType<?, M> type) {
-+ final net.minecraft.core.component.DataComponentType<M> nms = io.papermc.paper.component.PaperComponentType.bukkitToMinecraft(type);
++ private <M> void resetData(final io.papermc.paper.datacomponent.PaperComponentType<?, M> type) {
++ final net.minecraft.core.component.DataComponentType<M> nms = io.papermc.paper.datacomponent.PaperComponentType.bukkitToMinecraft(type);
+ final M nmsValue = this.handle.getItem().components().get(nms);
+ // if nmsValue is null, it will clear any set patch
+ // if nmsValue is not null, it will still clear any set patch because it will equal the default value
@@ -3105,18 +3080,18 @@ index 32a41c8b324aad67b9dcf74387aef299e6478a64..6521990ecae548dae34e1e1e6309d054
+ }
+
+ @Override
-+ public boolean isOverridden(final io.papermc.paper.component.DataComponentType type) {
++ public boolean isOverridden(final io.papermc.paper.datacomponent.DataComponentType type) {
+ if (this.isEmpty()) {
+ return false;
+ }
-+ final net.minecraft.core.component.DataComponentType<?> nms = io.papermc.paper.component.PaperComponentType.bukkitToMinecraft(type);
++ final net.minecraft.core.component.DataComponentType<?> nms = io.papermc.paper.datacomponent.PaperComponentType.bukkitToMinecraft(type);
+ // maybe a more efficient way is to expose the "patch" map in PatchedDataComponentMap and just check if the type exists as a key
+ return java.util.Objects.equals(this.handle.get(nms), this.handle.getPrototype().get(nms));
+ }
+ // Paper end - data component API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java
-index 07539ebfefa3352de5ee7a17f2724cf2c979f399..9f4ae52e2d2d33f8f22c2196c244ee2f8b4da32d 100644
+index 07539ebfefa3352de5ee7a17f2724cf2c979f399..29feba5baa188885d1e586681635fcace788b4c4 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java
@@ -263,4 +263,21 @@ public class CraftItemType<M extends ItemMeta> implements ItemType.Typed<M>, Han
@@ -3126,18 +3101,18 @@ index 07539ebfefa3352de5ee7a17f2724cf2c979f399..9f4ae52e2d2d33f8f22c2196c244ee2f
+
+ // Paper start - data component API
+ @Override
-+ public <T> T getDefaultData(final io.papermc.paper.component.DataComponentType.Valued<T> dataComponentType) {
-+ return io.papermc.paper.component.PaperComponentType.convertDataComponentValue(this.item.components(), ((io.papermc.paper.component.PaperComponentType.ValuedImpl<T, ?>) dataComponentType));
++ public <T> T getDefaultData(final io.papermc.paper.datacomponent.DataComponentType.Valued<T> dataComponentType) {
++ return io.papermc.paper.datacomponent.PaperComponentType.convertDataComponentValue(this.item.components(), ((io.papermc.paper.datacomponent.PaperComponentType.ValuedImpl<T, ?>) dataComponentType));
+ }
+
+ @Override
-+ public boolean hasDefaultData(final io.papermc.paper.component.DataComponentType dataComponentType) {
-+ return this.item.components().has(io.papermc.paper.component.PaperComponentType.bukkitToMinecraft(dataComponentType));
++ public boolean hasDefaultData(final io.papermc.paper.datacomponent.DataComponentType dataComponentType) {
++ return this.item.components().has(io.papermc.paper.datacomponent.PaperComponentType.bukkitToMinecraft(dataComponentType));
+ }
+
+ @Override
-+ public java.util.Set<io.papermc.paper.component.DataComponentType> getDefaultDataTypes() {
-+ return io.papermc.paper.component.PaperComponentType.minecraftToBukkit(this.item.components().keySet());
++ public java.util.Set<io.papermc.paper.datacomponent.DataComponentType> getDefaultDataTypes() {
++ return io.papermc.paper.datacomponent.PaperComponentType.minecraftToBukkit(this.item.components().keySet());
+ }
+ // Paper end - data component API
}
@@ -3205,57 +3180,49 @@ index 4d97024bb05ab815409fc25c5924903868cc3945..a1839baaef752f54efeebb982b160396
if (this.hasDisplayName()) {
itemTag.put(CraftMetaItem.NAME, this.displayName);
}
-diff --git a/src/main/resources/META-INF/services/io.papermc.paper.component.item.ComponentTypesBridge b/src/main/resources/META-INF/services/io.papermc.paper.component.item.ComponentTypesBridge
+diff --git a/src/main/resources/META-INF/services/io.papermc.paper.datacomponent.item.ComponentTypesBridge b/src/main/resources/META-INF/services/io.papermc.paper.datacomponent.item.ComponentTypesBridge
new file mode 100644
-index 0000000000000000000000000000000000000000..a2c02206254a18e089cb2b40eab5c59e08c1e8c8
+index 0000000000000000000000000000000000000000..1c1fcbbacc3881e088d64a7a840b3f3e31706c0f
--- /dev/null
-+++ b/src/main/resources/META-INF/services/io.papermc.paper.component.item.ComponentTypesBridge
++++ b/src/main/resources/META-INF/services/io.papermc.paper.datacomponent.item.ComponentTypesBridge
@@ -0,0 +1 @@
-+io.papermc.paper.component.item.ComponentTypesBridgesImpl
++io.papermc.paper.datacomponent.item.ComponentTypesBridgesImpl
diff --git a/src/test/java/io/papermc/paper/item/ItemStackDataComponentTest.java b/src/test/java/io/papermc/paper/item/ItemStackDataComponentTest.java
new file mode 100644
-index 0000000000000000000000000000000000000000..cb52cc252934561e7b47fbd4a26d10013e9e7e77
+index 0000000000000000000000000000000000000000..eab92494238fc6664ba7d551a2b9d8b33e59e188
--- /dev/null
+++ b/src/test/java/io/papermc/paper/item/ItemStackDataComponentTest.java
-@@ -0,0 +1,403 @@
+@@ -0,0 +1,392 @@
+package io.papermc.paper.item;
+
-+import ca.spottedleaf.concurrentutil.util.CollectionUtil;
-+import com.google.common.collect.HashMultiset;
+import com.google.common.collect.Iterators;
-+import com.google.common.collect.Lists;
-+import io.papermc.paper.block.BlockPredicate;
-+import io.papermc.paper.component.DataComponentType;
-+import io.papermc.paper.component.DataComponentTypes;
-+import io.papermc.paper.component.item.ChargedProjectiles;
-+import io.papermc.paper.component.item.CustomModelData;
-+import io.papermc.paper.component.item.DyedItemColor;
-+import io.papermc.paper.component.item.Fireworks;
-+import io.papermc.paper.component.item.FoodProperties;
-+import io.papermc.paper.component.item.ItemAdventurePredicate;
-+import io.papermc.paper.component.item.ItemArmorTrim;
-+import io.papermc.paper.component.item.ItemAttributeModifiers;
-+import io.papermc.paper.component.item.ItemEnchantments;
-+import io.papermc.paper.component.item.ItemLore;
-+import io.papermc.paper.component.item.MapID;
-+import io.papermc.paper.component.item.MapItemColor;
-+import io.papermc.paper.component.item.PotDecorations;
-+import io.papermc.paper.component.item.Tool;
-+import io.papermc.paper.component.item.Unbreakable;
++import io.papermc.paper.datacomponent.DataComponentType;
++import io.papermc.paper.datacomponent.DataComponentTypes;
++import io.papermc.paper.datacomponent.item.ChargedProjectiles;
++import io.papermc.paper.datacomponent.item.CustomModelData;
++import io.papermc.paper.datacomponent.item.DyedItemColor;
++import io.papermc.paper.datacomponent.item.Fireworks;
++import io.papermc.paper.datacomponent.item.FoodProperties;
++import io.papermc.paper.datacomponent.item.ItemArmorTrim;
++import io.papermc.paper.datacomponent.item.ItemAttributeModifiers;
++import io.papermc.paper.datacomponent.item.ItemEnchantments;
++import io.papermc.paper.datacomponent.item.ItemLore;
++import io.papermc.paper.datacomponent.item.MapID;
++import io.papermc.paper.datacomponent.item.MapItemColor;
++import io.papermc.paper.datacomponent.item.PotDecorations;
++import io.papermc.paper.datacomponent.item.Tool;
++import io.papermc.paper.datacomponent.item.Unbreakable;
+import io.papermc.paper.registry.RegistryAccess;
+import io.papermc.paper.registry.RegistryKey;
+import io.papermc.paper.registry.set.RegistrySet;
+import io.papermc.paper.registry.tag.TagKey;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.util.TriState;
-+import net.minecraft.world.item.enchantment.Enchantments;
-+import net.minecraft.world.level.saveddata.maps.MapId;
+import org.bukkit.Color;
+import org.bukkit.FireworkEffect;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.Registry;
-+import org.bukkit.Tag;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeModifier;
+import org.bukkit.block.BlockState;
@@ -3266,7 +3233,6 @@ index 0000000000000000000000000000000000000000..cb52cc252934561e7b47fbd4a26d1001
+import org.bukkit.inventory.ItemFlag;
+import org.bukkit.inventory.ItemRarity;
+import org.bukkit.inventory.ItemStack;
-+import org.bukkit.inventory.ItemType;
+import org.bukkit.inventory.meta.ArmorMeta;
+import org.bukkit.inventory.meta.BlockStateMeta;
+import org.bukkit.inventory.meta.CrossbowMeta;
@@ -3284,14 +3250,12 @@ index 0000000000000000000000000000000000000000..cb52cc252934561e7b47fbd4a26d1001
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
+import org.bukkit.support.AbstractTestingBase;
-+import org.codehaus.plexus.util.CollectionUtils;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import java.util.List;
+import java.util.Map;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
-+import java.util.stream.Collectors;
+
+class ItemStackDataComponentTest extends AbstractTestingBase {
+
@@ -3964,7 +3928,7 @@ index aabe3730fa582f442ee0544dd1a9f3123f719c68..a75fb4f856728610bec5ebd24eb9c283
this.downCastTest(name, provider.stack(), craftBlank);
craftBlank.setItemMeta(craftBlank.getItemMeta());
diff --git a/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java b/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java
-index a480944e1fc1b79b91be7e8d3e3799b9168cf5a0..2eb1cc0b796df3cfb2f40d4cbc3f8fbe740218a3 100644
+index a480944e1fc1b79b91be7e8d3e3799b9168cf5a0..7ae45920e02c1ada0a5d4d1f3512a0b8006ff18e 100644
--- a/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java
+++ b/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java
@@ -58,7 +58,7 @@ public class RegistriesArgumentProvider implements ArgumentsProvider {
@@ -3972,7 +3936,7 @@ index a480944e1fc1b79b91be7e8d3e3799b9168cf5a0..2eb1cc0b796df3cfb2f40d4cbc3f8fbe
register(RegistryKey.ITEM, ItemType.class, Registries.ITEM, CraftItemType.class, net.minecraft.world.item.Item.class, true);
register(RegistryKey.BLOCK, BlockType.class, Registries.BLOCK, CraftBlockType.class, net.minecraft.world.level.block.Block.class, true);
-
-+ register(RegistryKey.DATA_COMPONENT_TYPE, io.papermc.paper.component.DataComponentType.class, Registries.DATA_COMPONENT_TYPE, io.papermc.paper.component.PaperComponentType.class, net.minecraft.core.component.DataComponentType.class, false);
++ register(RegistryKey.DATA_COMPONENT_TYPE, io.papermc.paper.datacomponent.DataComponentType.class, Registries.DATA_COMPONENT_TYPE, io.papermc.paper.datacomponent.PaperComponentType.class, net.minecraft.core.component.DataComponentType.class, false);
}
private static void register(RegistryKey registryKey, Class bukkit, ResourceKey registry, Class craft, Class minecraft) { // Paper