Убрать эффект

Версия Minecraft
1.12.2
62
1
0
Хала Амигос (форумчане)

Делаю проверку на айтем в слоте, в случае положительного ответа - эффект, в случае отрицательного - убрать эффект. (найс предложение сочЕнил)
Короче, факт в том, что если забрать со стола айтем и переложить в другой слот, эффект убирается, а если нажать на q навестись на айтем, то предмет выпадает, но эффект остаётся.


Java:
public class SlotOne extends Slot {
    private final EntityPlayer thePlayer;
    private int removeCount;
    
    public SlotOne(EntityPlayer player, IInventory inventoryIn, int slotIndex, int xPosition, int yPosition) {
        super(inventoryIn, slotIndex, xPosition, yPosition);
        this.thePlayer = player;
    }
      
    public boolean isItemValid(ItemStack stack) {
         if (stack.getItem() == ItemsRegister.ring) return true;
         return false;
    }
    
    public ItemStack onTake(EntityPlayer player, ItemStack stack){
        
        this.onCrafting(stack);
        super.onTake(player, stack);
        return stack;
    }

    protected void onCrafting(ItemStack stack, int amount){
        
        this.removeCount += amount;
        this.onCrafting(stack);
    }

    protected void onCrafting(ItemStack stack){
        
        stack.onCrafting(this.thePlayer.world, this.thePlayer, this.removeCount);
        this.removeCount = 0;   
    }
      
    public void putStack(ItemStack itemStack) {
        this.inventory.setInventorySlotContents(this.getSlotIndex(), itemStack);
        this.onSlotChanged();
        
        if (!this.thePlayer.world.isRemote)
        if (this.getSlotIndex() == 0 && this.getStack() != null && this.getStack().getItem() == ItemsRegister.ring) {     
            thePlayer.addPotionEffect(new PotionEffect(MobEffects.SPEED, 99999999, 2)); 
        } else if (this.getSlotIndex() == 0 && (this.getStack() == null || this.getStack().getItem() != ItemsRegister.ring)) {           
            thePlayer.removePotionEffect(MobEffects.SPEED);
        }
    }

    public void onPickupFromSlot(ItemStack stack) {
        this.onSlotChanged();
            
         if (!this.thePlayer.world.isRemote)
         if (this.getSlotIndex() == 0 && (this.getStack() == null || this.getStack().getItem() != ItemsRegister.ring)) {
             thePlayer.removePotionEffect(MobEffects.SPEED);
         }
    }
}

Где туплю?
Заранее спасибо всем.
 
7,099
324
1,510
В своем ItemStachHandler, который юзаешь в качестве инвентаря, переопредели onContentsChanged и делать фичи изменения слотов на нем
 
Сверху