mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 11:57:29 +00:00
175 lines
3.7 KiB
Java
175 lines
3.7 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;
|
|
}
|
|
}
|