
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