public class CustomSlot extends Slot {
private final EntityPlayer player;
public CustomSlot(EntityPlayer player, IInventory inventory, int slotIndex, int xPos, int yPos) {
super(inventory, slotIndex, xPos, yPos);
this.player = player;
}
//При доставании из слота.
@Override
public void onPickupFromSlot(EntityPlayer player, ItemStack itemStack) {
this.onSlotChanged();
if (!this.player.worldObj.isRemote)
if (this.getSlotIndex() == 0 /*индекс твоего слота*/ && (this.getStack() == null || this.getStack().getItem() != Items.chainmail_helmet)) {...
public class CustomSlot extends Slot {
private final EntityPlayer player;
public CustomSlot(EntityPlayer player, IInventory inventory, int slotIndex, int xPos, int yPos) {
super(inventory, slotIndex, xPos, yPos);
this.player = player;
}
//При доставании из слота.
@Override
public void onPickupFromSlot(EntityPlayer player, ItemStack itemStack) {
this.onSlotChanged();
if (!this.player.worldObj.isRemote)
if (this.getSlotIndex() == 0 /*индекс твоего слота*/ && (this.getStack() == null || this.getStack().getItem() != Items.chainmail_helmet)) {
//Если после клика в слоте другой предмет - удаление эффекта.
player.removePotionEffect(Potion.nightVision.id);
}
}
//При добавлении в слот.
@Override
public void putStack(ItemStack itemStack) {
this.inventory.setInventorySlotContents(this.getSlotIndex(), itemStack);
this.onSlotChanged();
if (!this.player.worldObj.isRemote)
if (this.getSlotIndex() == 0 /* индекс твоего слота */&& this.getStack() != null && this.getStack().getItem() == Items.chainmail_helmet) {
//Если после клика в слоте нужный предмет - добавление эффекта
this.player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 24000));
}
else if (this.getSlotIndex() == 0 && (this.getStack() == null || this.getStack().getItem() != Items.chainmail_helmet)) {
//Если после клика в слоте другой предмет - удаление эффекта
this.player.removePotionEffect(Potion.nightVision.id);
}
}
}
this.addSlotToContainer(new CustomSlot(player, inventory, index, xPos, yPos));
this.addSlotToContainer(new SlotPNV(inventoryCustom, 1, 26, 8));//26 8
Это всего лишь имя аргумента, оно может быть любым и тебе важно понять какой объект оно представляет. В данном случае это интерфейс IInventory, я назвал переменную inventory, а ты inventoryCustom, но разницы нет никакой.Твоя вставил,нет inventory
В putStack() добавлямый стак может быть null, добавь проверку this.getStack() != null перед проверкой предмета в слоте при добавлении в оба условия.Всё работает,но когда снимаю обратно предмет, то краш происходит
public boolean isItemValid(ItemStack stack) {
return stack.getItem() instanceof pnv;
}
А можно ещё как-то сделать чтобы когда одеваешь на голове была текстура шлема допустим(пнв)Отредактировал оригинальное сообщение, в котором скидывал класс слота - теперь всё работает как надо.