mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 06:07:27 +00:00
178 lines
4.3 KiB
Java
178 lines
4.3 KiB
Java
package noppes.npcs;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.IInventory;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
import java.util.HashMap;
|
|
|
|
public class NpcMiscInventory implements IInventory {
|
|
public HashMap<Integer, ItemStack> items = new HashMap<Integer, ItemStack>();
|
|
public int stackLimit = 64;
|
|
|
|
private int size;
|
|
|
|
public NpcMiscInventory(int size) {
|
|
this.size = size;
|
|
}
|
|
|
|
public NBTTagCompound getToNBT() {
|
|
NBTTagCompound nbttagcompound = new NBTTagCompound();
|
|
nbttagcompound.setTag("NpcMiscInv", NBTTags.nbtItemStackList(items));
|
|
return nbttagcompound;
|
|
}
|
|
|
|
public void setFromNBT(NBTTagCompound nbttagcompound) {
|
|
items = NBTTags.getItemStackList(nbttagcompound.getTagList("NpcMiscInv", 10));
|
|
}
|
|
|
|
@Override
|
|
public int getSizeInventory() {
|
|
return size;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getStackInSlot(int var1) {
|
|
return items.get(var1);
|
|
}
|
|
|
|
@Override
|
|
public ItemStack decrStackSize(int par1, int par2) {
|
|
if (items.get(par1) == null)
|
|
return null;
|
|
|
|
ItemStack var4 = null;
|
|
if (items.get(par1).stackSize <= par2) {
|
|
var4 = items.get(par1);
|
|
items.put(par1, null);
|
|
} else {
|
|
var4 = items.get(par1).splitStack(par2);
|
|
|
|
if (items.get(par1).stackSize == 0) {
|
|
items.put(par1, null);
|
|
}
|
|
}
|
|
|
|
return var4;
|
|
}
|
|
|
|
|
|
public boolean decrStackSize(ItemStack eating, int decrease) {
|
|
for (int slot : items.keySet()) {
|
|
ItemStack item = items.get(slot);
|
|
if (items != null && eating == item && item.stackSize >= decrease) {
|
|
item.splitStack(decrease);
|
|
if (item.stackSize <= 0)
|
|
items.put(slot, null);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getStackInSlotOnClosing(int var1) {
|
|
if (items.get(var1) != null) {
|
|
ItemStack var3 = items.get(var1);
|
|
items.put(var1, null);
|
|
return var3;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void setInventorySlotContents(int var1, ItemStack var2) {
|
|
if (var1 >= getSizeInventory())
|
|
return;
|
|
items.put(var1, var2);
|
|
}
|
|
|
|
@Override
|
|
public int getInventoryStackLimit() {
|
|
return stackLimit;
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean isUseableByPlayer(EntityPlayer var1) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean isItemValidForSlot(int i, ItemStack itemstack) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public String getInventoryName() {
|
|
return "Npc Misc Inventory";
|
|
}
|
|
|
|
@Override
|
|
public boolean hasCustomInventoryName() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void markDirty() {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void openInventory() {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void closeInventory() {
|
|
|
|
}
|
|
|
|
public boolean addItemStack(ItemStack item) {
|
|
ItemStack mergable;
|
|
boolean merged = false;
|
|
while ((mergable = getMergableItem(item)) != null && mergable.stackSize > 0) {
|
|
int size = mergable.getMaxStackSize() - mergable.stackSize;
|
|
if (size > item.stackSize) {
|
|
mergable.stackSize = mergable.getMaxStackSize();
|
|
item.stackSize -= size;
|
|
merged = true;
|
|
} else {
|
|
mergable.stackSize += item.stackSize;
|
|
item.stackSize = 0;
|
|
}
|
|
}
|
|
if (item.stackSize <= 0)
|
|
return true;
|
|
int slot = firstFreeSlot();
|
|
if (slot >= 0) {
|
|
items.put(slot, item.copy());
|
|
item.stackSize = 0;
|
|
return true;
|
|
}
|
|
return merged;
|
|
}
|
|
|
|
public ItemStack getMergableItem(ItemStack item) {
|
|
for (ItemStack is : items.values()) {
|
|
if (NoppesUtilPlayer.compareItems(item, is, false, false) && is.stackSize < is.getMaxStackSize()) {
|
|
return is;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public int firstFreeSlot() {
|
|
for (int i = 0; i < getSizeInventory(); i++) {
|
|
if (items.get(i) == null)
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public void setSize(int i) {
|
|
size = i;
|
|
}
|
|
}
|