diff --git a/build-data/paper.at b/build-data/paper.at index cd262bbbf9..d84006cd15 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -512,6 +512,7 @@ public net.minecraft.world.flag.FeatureFlagRegistry names public net.minecraft.world.food.FoodData exhaustionLevel public net.minecraft.world.food.FoodData foodLevel public net.minecraft.world.food.FoodData saturationLevel +public net.minecraft.world.inventory.AbstractContainerMenu menuType public net.minecraft.world.inventory.AbstractContainerMenu quickcraftSlots public net.minecraft.world.inventory.AbstractContainerMenu quickcraftStatus public net.minecraft.world.inventory.AbstractContainerMenu quickcraftType diff --git a/paper-api/src/main/java/org/bukkit/inventory/InventoryView.java b/paper-api/src/main/java/org/bukkit/inventory/InventoryView.java index 46f5f50171..5c5906421d 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/InventoryView.java +++ b/paper-api/src/main/java/org/bukkit/inventory/InventoryView.java @@ -2,6 +2,7 @@ package org.bukkit.inventory; import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.InventoryType; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -321,4 +322,16 @@ public interface InventoryView { */ @Deprecated(since = "1.21.1") // Paper public void setTitle(@NotNull String title); + + /** + * Gets the menu type of the inventory view if applicable. + *

+ * Some inventory types do not support a menu type. In such cases, this method + * returns null. This typically applies to inventories belonging to entities + * like players or animals (e.g., a horse). + * + * @return the menu type of the inventory view or null if not applicable + */ + @ApiStatus.Experimental + @Nullable MenuType getMenuType(); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java index 1ce328bed5..c00ddfe414 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java @@ -95,6 +95,11 @@ public class CraftContainer extends AbstractContainerMenu { this.title = title; } + @Override + public MenuType getMenuType() { + return CraftMenuType.minecraftToBukkit(getNotchInventoryType(inventory)); + } + }, player, id); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java index e9fd57b9e1..5039d87d7f 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java @@ -94,6 +94,12 @@ public class CraftInventoryView menuType = container.menuType; + return menuType != null ? CraftMenuType.minecraftToBukkit(menuType) : null; + } + public boolean isInTop(int rawSlot) { return rawSlot < this.viewing.getSize(); }