All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.craftbukkit.inventory.CraftInventoryCrafting Maven / Gradle / Ivy

package org.bukkit.craftbukkit.inventory;

import net.minecraft.server.IInventory;
import net.minecraft.server.IRecipe;
import net.minecraft.server.InventoryCrafting;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.Recipe;
import org.bukkit.util.Java15Compat;

public class CraftInventoryCrafting extends CraftInventory implements CraftingInventory {
  private final IInventory resultInventory;

  public CraftInventoryCrafting(InventoryCrafting inventory, IInventory resultInventory) {
    super(inventory);
    this.resultInventory = resultInventory;
  }

  public IInventory getResultInventory() {
    return resultInventory;
  }

  public IInventory getMatrixInventory() {
    return inventory;
  }

  @Override
  public int getSize() {
    return getResultInventory().getSize() + getMatrixInventory().getSize();
  }

  @Override
  public ItemStack[] getContents() {
    ItemStack[] items = new ItemStack[getSize()];
    net.minecraft.server.ItemStack[] mcResultItems = getResultInventory().getContents();

    int i = 0;
    for (i = 0; i < mcResultItems.length; i++) {
      items[i] = CraftItemStack.asCraftMirror(mcResultItems[i]);
    }

    net.minecraft.server.ItemStack[] mcItems = getMatrixInventory().getContents();

    for (int j = 0; j < mcItems.length; j++) {
      items[i + j] = CraftItemStack.asCraftMirror(mcItems[j]);
    }

    return items;
  }

  @Override
  public void setContents(ItemStack[] items) {
    int resultLen = getResultInventory().getContents().length;
    int len = getMatrixInventory().getContents().length + resultLen;
    if (len > items.length) {
      throw new IllegalArgumentException("Invalid inventory size; expected " + len + " or less");
    }
    setContents(items[0], Java15Compat.Arrays_copyOfRange(items, 1, items.length));
  }

  public void setContents(ItemStack result, ItemStack[] contents) {
    setResult(result);
    setMatrix(contents);
  }

  @Override
  public CraftItemStack getItem(int index) {
    if (index < getResultInventory().getSize()) {
      net.minecraft.server.ItemStack item = getResultInventory().getItem(index);
      return item == null ? null : CraftItemStack.asCraftMirror(item);
    } else {
      net.minecraft.server.ItemStack item = getMatrixInventory().getItem(index - getResultInventory().getSize());
      return item == null ? null : CraftItemStack.asCraftMirror(item);
    }
  }

  @Override
  public void setItem(int index, ItemStack item) {
    if (index < getResultInventory().getSize()) {
      getResultInventory().setItem(index, (item == null ? null : CraftItemStack.asNMSCopy(item)));
    } else {
      getMatrixInventory().setItem((index - getResultInventory().getSize()), (item == null ? null : CraftItemStack.asNMSCopy(item)));
    }
  }

  public ItemStack[] getMatrix() {
    ItemStack[] items = new ItemStack[getSize()];
    net.minecraft.server.ItemStack[] matrix = getMatrixInventory().getContents();

    for (int i = 0; i < matrix.length; i++) {
      items[i] = CraftItemStack.asCraftMirror(matrix[i]);
    }

    return items;
  }

  public void setMatrix(ItemStack[] contents) {
    if (getMatrixInventory().getContents().length > contents.length) {
      throw new IllegalArgumentException("Invalid inventory size; expected " + getMatrixInventory().getContents().length + " or less");
    }

    net.minecraft.server.ItemStack[] mcItems = getMatrixInventory().getContents();

    for (int i = 0; i < mcItems.length; i++) {
      if (i < contents.length) {
        ItemStack item = contents[i];
        if (item == null || item.getTypeId() <= 0) {
          mcItems[i] = null;
        } else {
          mcItems[i] = CraftItemStack.asNMSCopy(item);
        }
      } else {
        mcItems[i] = null;
      }
    }
  }

  public ItemStack getResult() {
    net.minecraft.server.ItemStack item = getResultInventory().getItem(0);
    if (item != null) return CraftItemStack.asCraftMirror(item);
    return null;
  }

  public void setResult(ItemStack item) {
    net.minecraft.server.ItemStack[] contents = getResultInventory().getContents();
    if (item == null || item.getTypeId() <= 0) {
      contents[0] = null;
    } else {
      contents[0] = CraftItemStack.asNMSCopy(item);
    }
  }

  public Recipe getRecipe() {
    IRecipe recipe = ((InventoryCrafting) getInventory()).currentRecipe;
    return recipe == null ? null : recipe.toBukkitRecipe();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy