From 835b9559134bb6e05cc61a917c7a4c0ebe00ffab Mon Sep 17 00:00:00 2001 From: Glicz <67753196+GliczDev@users.noreply.github.com> Date: Thu, 1 May 2025 03:43:51 +0200 Subject: [PATCH] Add a method on InventoryView to get the MenuType (#12193) Since there is a new (better) way to create views for players using MenuType, it would be nice to also be able to get it back from InventoryView after creating. --- build-data/paper.at | 1 + .../java/org/bukkit/inventory/InventoryView.java | 13 +++++++++++++ .../craftbukkit/inventory/CraftContainer.java | 5 +++++ .../craftbukkit/inventory/CraftInventoryView.java | 6 ++++++ 4 files changed, 25 insertions(+) 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(); }