Class InventoryUtils

java.lang.Object
org.geysermc.geyser.util.InventoryUtils

public class InventoryUtils extends Object
  • Field Details

    • LAST_RECIPE_NET_ID

      public static int LAST_RECIPE_NET_ID
      Stores the last used recipe network ID. Since 1.16.200 (and for server-authoritative inventories), each recipe needs a unique network ID (or else in .200 the client crashes).
    • REFRESH_ITEM

      public static final org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack REFRESH_ITEM
    • MAGIC_VIRTUAL_INVENTORY_HACK

      public static final long MAGIC_VIRTUAL_INVENTORY_HACK
      An arbitrary, negative long used to delay the opening of virtual inventories until the client is likely ready for it. The BedrockNetworkStackLatencyTranslator will then call openPendingInventory(GeyserSession), which would finish opening the inventory.
      See Also:
  • Constructor Details

    • InventoryUtils

      public InventoryUtils()
  • Method Details

    • openInventory

      public static void openInventory(GeyserSession session, Inventory inventory)
      The main entrypoint to open an inventory. It will mark inventories as pending when the client isn't ready to open the new inventory yet.
      Parameters:
      session - the geyser session
      inventory - the new inventory to open
    • openPendingInventory

      public static void openPendingInventory(GeyserSession session)
      Called when the Bedrock client is ready to open a pending inventory. Due to the nature of possible changes in the delayed time, this method also re-checks for changes that might have occurred in the time. For example, a queued virtual inventory might be "outdated", so we wouldn't open it.
    • displayInventory

      public static void displayInventory(GeyserSession session, Inventory inventory)
      Prepares and displays the current inventory. If necessary, it will queue the opening of virtual inventories.
      Parameters:
      inventory - the inventory to display
    • openAndUpdateInventory

      public static void openAndUpdateInventory(GeyserSession session, Inventory inventory)
      Opens and updates an inventory, and resets no longer used inventory variables.
    • getInventoryTranslator

      public static @NonNull InventoryTranslator getInventoryTranslator(GeyserSession session)
      Returns the current inventory translator.
    • closeInventory

      public static void closeInventory(GeyserSession session, int javaId, boolean confirm)
      Closes the inventory that matches the java id.
      Parameters:
      session - the session to close the inventory for
      javaId - the id of the inventory to close
      confirm - whether to wait for the session to process the close before opening a new inventory.
    • getInventory

      public static @Nullable Inventory getInventory(GeyserSession session, int javaId)
    • sendJavaContainerClose

      public static void sendJavaContainerClose(GeyserSession session, Inventory inventory)
    • findAvailableWorldSpace

      public static @Nullable org.cloudburstmc.math.vector.Vector3i findAvailableWorldSpace(GeyserSession session)
      Finds a usable block space in the world to place a fake inventory block, and returns the position.
    • updateCursor

      public static void updateCursor(GeyserSession session)
    • canStack

      public static boolean canStack(GeyserItemStack item1, GeyserItemStack item2)
    • isEmpty

      @Contract("null -> true") public static boolean isEmpty(@Nullable org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack itemStack)
      Checks to see if an item stack represents air or has no count.
    • createUnusableSpaceBlock

      public static IntFunction<org.cloudburstmc.protocol.bedrock.data.inventory.ItemData> createUnusableSpaceBlock(String description)
      Returns a barrier block with custom name and lore to explain why part of the inventory is unusable.
      Parameters:
      description - the description
      Returns:
      the unusable space block
    • getUpgradeTemplate

      public static IntFunction<org.cloudburstmc.protocol.bedrock.data.inventory.ItemData> getUpgradeTemplate()
    • getTotemOfUndying

      public static IntFunction<org.cloudburstmc.protocol.bedrock.data.inventory.ItemData> getTotemOfUndying()
    • getClickForHotbarSwap

      public static @Nullable Click getClickForHotbarSwap(int slot)
    • acceptsAsInput

      public static boolean acceptsAsInput(GeyserSession session, org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay slotDisplay, GeyserItemStack itemStack)
      Returns if the provided item stack would be accepted by the slot display.
    • getValidRecipe

      public static @Nullable GeyserRecipe getValidRecipe(GeyserSession session, @Nullable org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack output, IntFunction<GeyserItemStack> inventoryGetter, int gridDimensions, int firstRow, int height, int firstCol, int width)
      Test all known recipes to find a valid match
      Parameters:
      output - if not null, the recipe has to output this item
    • debugInventory

      public static String debugInventory(@Nullable Inventory inventory)