public class CustomContainer extends Container {
private final IInventory inventory;
private final List<Slot> dynamicSlots; // Лист(список) для динамических слотов
public CustomContainer(IInventory playerInventory, IInventory customInventory) {
this.inventory = customInventory;
this.dynamicSlots = new ArrayList<>();
// Стат слот
for (int i = 0; i < customInventory.getSizeInventory(); i++) {
this.addSlotToContainer(new Slot(customInventory, i, 8 + i * 18, 18));
}
// Стат слот
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
}
}
// Добавляем динамические слоты
this.updateDynamicSlots();
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return true;
}
@Override
public void detectAndSendChanges() {
super.detectAndSendChanges();
// логика для обновления
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
return ItemStack.EMPTY;
}
// Метод для обновления динамических слотов
public void updateDynamicSlots() {
// Чистим динамические слоты(подобно как и с кнопками)
for (Slot slot : this.dynamicSlots) {
this.inventorySlots.remove(slot);
}
this.dynamicSlots.clear();
// Метка для обновления
// аналогично и с использованием IEEP
boolean conditionMet = false;
for (int i = 0; i < this.inventory.getSizeInventory(); i++) {
ItemStack stack = this.inventory.getStackInSlot(i);
if (!stack.isEmpty() && stack.getItem() == Items.GOLDEN_APPLE) {
conditionMet = true;
break;
}
}
// Если метка true, то добавляем слот
if (conditionMet) {
Slot newSlot = new Slot(this.inventory, this.inventory.getSizeInventory(), 8, 36);
this.addSlotToContainer(newSlot);
this.dynamicSlots.add(newSlot);
}
// Вызываем detectAndSendChanges, чтобы обновить GUI
this.detectAndSendChanges();
}
}