/* * This file is part of SpoutcraftPlugin. * * Copyright (c) 2011 SpoutcraftDev <http://spoutcraft.org//> * SpoutcraftPlugin is licensed under the GNU Lesser General Public License. * * SpoutcraftPlugin is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SpoutcraftPlugin is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.getspout.spout.inventory; import java.util.Arrays; import net.minecraft.server.v1_6_R3.IInventory; import net.minecraft.server.v1_6_R3.InventoryCrafting; import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; import org.getspout.spoutapi.inventory.CraftingInventory; public class SpoutCraftingInventory extends SpoutCraftInventory implements CraftingInventory { protected IInventory result; public SpoutCraftingInventory(InventoryCrafting inventory, IInventory result) { super(inventory); this.result = result; } public InventoryCrafting getMatrixHandle() { return (InventoryCrafting)getInventory(); } public IInventory getResultHandle() { return this.result; } @Override public int getSize() { return this.result.getSize() + this.inventory.getSize(); } @Override public void setContents(ItemStack[] items) { int resultLen = this.result.getContents().length; int len = this.inventory.getContents().length + resultLen; if (len != items.length) { throw new IllegalArgumentException("Invalid inventory size; expected " + len); } setContents(items[0], Arrays.copyOfRange(items, 1, items.length)); } @Override public CraftItemStack[] getContents() { CraftItemStack[] items = new CraftItemStack[getSize()]; net.minecraft.server.v1_6_R3.ItemStack[] mcResultItems = this.result.getContents(); int i = 0; for (i = 0; i < mcResultItems.length; i++ ) { items[i] = CraftItemStack.asCraftMirror(mcResultItems[i]); } net.minecraft.server.v1_6_R3.ItemStack[] mcItems = this.inventory.getContents(); for (int j = 0; j < mcItems.length; j++) { items[i + j] = CraftItemStack.asCraftMirror(mcItems[j]); } return items; } public void setContents(ItemStack result, ItemStack[] contents) { setResult(result); setMatrix(contents); } @Override public CraftItemStack getItem(int index) { if (index == 0) { if (this.result.getItem(index) != null) { return CraftItemStack.asCraftMirror(this.result.getItem(index)); } return CraftItemStack.asCraftCopy(new ItemStack(0,1,(short)0)); } else if (this.inventory.getItem(index - this.result.getSize()) != null) { return CraftItemStack.asCraftMirror(this.inventory.getItem(index - this.result.getSize())); } return CraftItemStack.asCraftCopy(new ItemStack(0,1,(short)0)); } @Override public void setItem(int index, ItemStack item) { if (item != null && item.getTypeId() == 0) { item = null; } if (index == 0) { this.result.setItem(index, (item == null ? null : CraftItemStack.asNMSCopy(item))); } else { this.inventory.setItem((index - this.result.getSize()), (item == null ? null : CraftItemStack.asNMSCopy(item))); } } @Override public CraftItemStack[] getMatrix() { CraftItemStack[] items = new CraftItemStack[getSize()]; //net.minecraft.server.ItemStack[] matrix = this.inventory.getContents(); for (int i = 0; i < getSize(); i++ ) { items[i] = CraftItemStack.asCraftMirror(this.inventory.getItem(i)); } return items; } @Override public CraftItemStack getResult() { net.minecraft.server.v1_6_R3.ItemStack item = this.result.getItem(0); return CraftItemStack.asCraftMirror(item); } @Override public void setMatrix(ItemStack[] contents) { if (this.inventory.getContents().length != contents.length) { throw new IllegalArgumentException("Invalid inventory size; expected " + this.inventory.getContents().length); } net.minecraft.server.v1_6_R3.ItemStack[] mcItems = this.inventory.getContents(); for (int i = 0; i < contents.length; i++ ) { ItemStack item = contents[i]; if (item == null || item.getTypeId() <= 0) { mcItems[i] = null; } else { mcItems[i] = CraftItemStack.asNMSCopy(item); } } } @Override public void setResult(ItemStack item) { net.minecraft.server.v1_6_R3.ItemStack[] contents = this.result.getContents(); if (item == null || item.getTypeId() <= 0) { contents[0] = null; } else { contents[0] = CraftItemStack.asNMSCopy(item); } } }