RABBIT = getItemType("rabbit");
diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/ItemMeta.java b/paper-api/src/main/java/org/bukkit/inventory/meta/ItemMeta.java
index a3515201dc..69d6de6e96 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/meta/ItemMeta.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/meta/ItemMeta.java
@@ -17,6 +17,7 @@ import org.bukkit.inventory.ItemFactory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemRarity;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.components.CustomModelDataComponent;
import org.bukkit.inventory.meta.components.EquippableComponent;
import org.bukkit.inventory.meta.components.FoodComponent;
import org.bukkit.inventory.meta.components.JukeboxPlayableComponent;
@@ -176,6 +177,21 @@ public interface ItemMeta extends Cloneable, ConfigurationSerializable, Persiste
*/
int getCustomModelData();
+ /**
+ * Gets the custom model data set on this item, or creates an empty custom
+ * model data instance.
+ *
+ * The returned component is a snapshot of its current state and does not
+ * reflect a live view of what is on an item. After changing any value on
+ * this component, it must be set with
+ * {@link #setCustomModelDataComponent(CustomModelDataComponent)} to apply
+ * the changes.
+ *
+ * @return component
+ */
+ @NotNull
+ CustomModelDataComponent getCustomModelDataComponent();
+
/**
* Sets the custom model data.
*
@@ -186,6 +202,13 @@ public interface ItemMeta extends Cloneable, ConfigurationSerializable, Persiste
*/
void setCustomModelData(@Nullable Integer data);
+ /**
+ * Sets the custom model data component.
+ *
+ * @param customModelData new component
+ */
+ void setCustomModelDataComponent(@Nullable CustomModelDataComponent customModelData);
+
/**
* Gets if the enchantable component is set.
*
diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/components/CustomModelDataComponent.java b/paper-api/src/main/java/org/bukkit/inventory/meta/components/CustomModelDataComponent.java
new file mode 100644
index 0000000000..885e87607f
--- /dev/null
+++ b/paper-api/src/main/java/org/bukkit/inventory/meta/components/CustomModelDataComponent.java
@@ -0,0 +1,74 @@
+package org.bukkit.inventory.meta.components;
+
+import java.util.List;
+import org.bukkit.Color;
+import org.bukkit.configuration.serialization.ConfigurationSerializable;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Represents a component which adds custom model data.
+ */
+@ApiStatus.Experimental
+public interface CustomModelDataComponent extends ConfigurationSerializable {
+
+ /**
+ * Gets a list of the custom floats.
+ *
+ * @return unmodifiable list
+ */
+ @NotNull
+ List getFloats();
+
+ /**
+ * Sets a list of the custom floats.
+ *
+ * @param floats new list
+ */
+ void setFloats(@NotNull List floats);
+
+ /**
+ * Gets a list of the custom flags.
+ *
+ * @return unmodifiable list
+ */
+ @NotNull
+ List getFlags();
+
+ /**
+ * Sets a list of the custom flags.
+ *
+ * @param flags new list
+ */
+ void setFlags(@NotNull List flags);
+
+ /**
+ * Gets a list of the custom strings.
+ *
+ * @return unmodifiable list
+ */
+ @NotNull
+ List getStrings();
+
+ /**
+ * Sets a list of the custom strings.
+ *
+ * @param strings new list
+ */
+ void setStrings(@NotNull List strings);
+
+ /**
+ * Gets a list of the custom colors.
+ *
+ * @return unmodifiable list
+ */
+ @NotNull
+ List getColors();
+
+ /**
+ * Sets a list of the custom colors.
+ *
+ * @param colors new list
+ */
+ void setColors(@NotNull List colors);
+}
diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
index 5fc9aaac8b..ebfd6f5523 100644
--- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
+++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java
@@ -52,6 +52,10 @@ public interface TrimMaterial extends Keyed, Translatable {
* {@link Material#AMETHYST_SHARD}.
*/
public static final TrimMaterial AMETHYST = getTrimMaterial("amethyst");
+ /**
+ * {@link Material#RESIN_BRICK}.
+ */
+ public static final TrimMaterial RESIN = getTrimMaterial("resin");
@NotNull
private static TrimMaterial getTrimMaterial(@NotNull String key) {