- 63
- 3
- 4
Есть контейнер с 4мя слотами. Если предмет берется рукой то данный фильтр работает.
Суть: Контейнер из 4х слотов. Итемы с 4мя суб-ид. id слота должен быть = суб-ид итема => и только тогда предмет попадёт в слот.
А вот с переносом с шифтом уже сложнее. Так как я видимо не беру вещь в руку, то и проверка не срабатывает.
Класс Контейнера:
Java:
@Override
public boolean isItemValid(ItemStack is) {
return is != null && is.getItem() == AddedItemsBlocks.canister && is.getItemDamage() == getSlotIndex()+1;
}
Суть: Контейнер из 4х слотов. Итемы с 4мя суб-ид. id слота должен быть = суб-ид итема => и только тогда предмет попадёт в слот.
А вот с переносом с шифтом уже сложнее. Так как я видимо не беру вещь в руку, то и проверка не срабатывает.
Класс Контейнера:
Java:
package frederic.extraaccessories.inventory;
import frederic.extraaccessories.items.ItemHeartAmulet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerHeartAmulet extends Container {
private InventoryItemStorage inv;
private int numRows;
public ContainerHeartAmulet(EntityPlayer player, InventoryItemStorage inventoryItemStorage) {
inv = inventoryItemStorage;
inv.openInventory();
numRows = inv.getSizeInventory() / 4;
int i = (numRows - 4) * 4;
int j;
int k;
int num = 0;
int num0 = 0;
for (int id = 0; id < 4; ++id) {
addSlotToContainer(new StorageSlot(inv, id, 53 + (id / 1) * 18, 23 + (id / 4) * 1));
}
int slotIn = player.inventory.currentItem;
int slotCounter = 0;
for (j = 0; j < 9; ++j, ++slotCounter) {
addSlotToContainer(slotCounter == slotIn ? new SlotNoTakeStorage(player.inventory, j, 8 + j * 18, 154 + i)
: new Slot(player.inventory, j, 8 + j * 18, 154 + i));
}
for (j = 0; j < 3; ++j) {
for (k = 0; k < 9; ++k, ++slotCounter) {
addSlotToContainer(slotCounter == slotIn
? new SlotNoTakeStorage(player.inventory, k + j * 9 + 9, 8 + k * 18, 96 + j * 18 + i)
: new Slot(player.inventory, k + j * 9 + 9, 8 + k * 18, 96 + j * 18 + i));
}
}
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return inv.isUseableByPlayer(player);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slot_i) {
ItemStack is = null;
Slot slot = (Slot)inventorySlots.get(slot_i);
if (slot != null && slot.getHasStack()) {
ItemStack is1 = slot.getStack();
is = is1.copy();
if (is1.getItem() instanceof ItemHeartAmulet)
return null;
if (slot_i < inv.getSizeInventory())
{
if (!this.mergeItemStack(is1, inv.getSizeInventory(), inventorySlots.size(), true))
return null;
}
else
{
if (!this.mergeItemStack(is1, 0, inv.getSizeInventory(), false))
return null;
}
if (is1.stackSize <= 0)
slot.putStack(null);
else
slot.onSlotChanged();
slot.onPickupFromSlot(player, is1);
}
return is;
}
@Override
public ItemStack slotClick(int slot, int button, int modifier, EntityPlayer player) {
if (modifier == 2)
return null;
//if (modifier == 1) return null;
return super.slotClick(slot, button, modifier, player);
}
@Override
public void onContainerClosed(EntityPlayer player) {
super.onContainerClosed(player);
inv.closeInventory();
}
public void update(EntityPlayer player) {
if (inv != null)
inv.update(player);
}
}