Предмет перемещается из инвентаря в контейнер и наоборот только через шифт, если перекладывать мышкой, то он пропадает на сервере, но визуально остается. Код контейнера:
Код IInventory:
Самое странное то, что через шифт все работает.
container:
public class ContainerAdvancedItems extends Container {
private InventoryAdvancedItems inv;
public ContainerAdvancedItems(IInventory playerinv)
{
this.inv = new InventoryAdvancedItems();
this.addSlotToContainer(new Slot(inv , 0, 146, 18));
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 9; ++j)
{
this.addSlotToContainer(new Slot(playerinv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18 + 36));
}
}
for (int k = 0; k < 9; ++k)
{
this.addSlotToContainer(new Slot(playerinv, k, 8 + k * 18, 142 + 36));
}
}
@Override
public boolean canInteractWith(EntityPlayer entityplayer) {
return inv.isUseableByPlayer(entityplayer);
}
@Nullable
public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
{
ItemStack itemstack = null;
Slot slot = (Slot)this.inventorySlots.get(par2);
if (slot != null && slot.getHasStack())
{
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
if (par2 == 0)
{
if (!this.mergeItemStack(itemstack1, 1, 37, true))
{
return null;
}
}
else
{
if (((Slot)this.inventorySlots.get(0)).getHasStack() || !((Slot)this.inventorySlots.get(0)).isItemValid(itemstack1))
{
return null;
}
if (itemstack1.hasTagCompound() && itemstack1.stackSize == 1)
{
((Slot)this.inventorySlots.get(0)).putStack(itemstack1.copy());
itemstack1.stackSize = 0;
}
else if (itemstack1.stackSize >= 1)
{
((Slot)this.inventorySlots.get(0)).putStack(new ItemStack(itemstack1.itemID, 1, itemstack1.getItemDamage()));
--itemstack1.stackSize;
}
}
if (itemstack1.stackSize == 0)
{
slot.putStack((ItemStack)null);
}
else
{
slot.onSlotChanged();
}
if (itemstack1.stackSize == itemstack.stackSize)
{
return null;
}
slot.onPickupFromSlot(par1EntityPlayer, itemstack1);
}
return itemstack;
}
}
IInventory:
public class InventoryAdvancedItems implements IInventory {
public ItemStack item;
private String username;
public InventoryAdvancedItems() {
}
@Override
public int getSizeInventory() {
return 1;
}
@Override
public ItemStack getStackInSlot(int i) {
return item;
}
@Override
public ItemStack decrStackSize(int i, int j) {
item.stackSize -= j;
return item;
}
@Override
public ItemStack getStackInSlotOnClosing(int i) {
return item;
}
@Override
public void setInventorySlotContents(int i, ItemStack itemstack) {
item = itemstack;
}
@Override
public String getInvName() {
return "advancedItemsInv";
}
@Override
public boolean isInvNameLocalized() {
return false;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public void onInventoryChanged() {
}
@Override
public boolean isUseableByPlayer(EntityPlayer entityplayer) {
return FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().isPlayerOpped(entityplayer.username);
}
@Override
public void openChest() {
}
@Override
public void closeChest() {
}
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack) {
return true;
}