Одинаковые предметы

Версия Minecraft
1.7.10
681
20
319
У меня есть 2 предмета в инвентаре которые мне выдают player.heal(4) по таймеру
1. Как сделать так что бы если в инвентаре 2 одинаковых предмета, один из них не работал
2. Или такой же предмет нельзя положить в инвентарь
 
1,007
36
206
1) проверяй, есть ли ещё такой же предмет в инвентаре и не давай эффект(тогда отключатся все, но можешь записывать в нбт какому предмету давать эффект)
2) отменяй эвент подбора или выкидывай его, если нашел второй.
 
7,099
324
1,510
Как сделать так что бы если в инвентаре 2 одинаковых предмета, один из них не работал
Вынеси эту логику в обработчик события TickEvent.PlayerTick. В нем не учитывай количество предметов, просто проверяй факт их присутствия
~~~
отменяй эвент подбора или выкидывай его, если нашел второй
Так ведь есть другие способы получить предмет.
Взять из сундука. Другой игрок дал через какую-то систему обмена.
 
681
20
319
1) отменяй эвент подбора или выкидывай его, если нашел второй.
2)Так ведь есть другие способы получить предмет.
Взять из сундука. Другой игрок дал через какую-то систему обмена.
Вот как раз и другие способы получение предмета у меня есть, и тут проблема
 
7,099
324
1,510
3,005
192
592
У тебя работает так?
Положил предмет
Запустится таймер
?
Если да - тогда просто проверяй, запущен ли таймер или нет.
Когда предмет убирается, тогда проверяй инвентарь на наличие предметов и если они остались, то не останавливай таймер.


А вообще, если посмотреть с другой стороны, ЗАЧЕМ два одинаковых предмета?
Если из-за текстуры - то это тупо.
Других вариантов я не вижу.
 
7,099
324
1,510
3,005
192
592
7,099
324
1,510
Вынеси эту логику в обработчик события TickEvent.PlayerTick. В нем не учитывай количество предметов, просто проверяй факт их присутствия
Чем тебе не нравится это решение?
 
929
30
66
Всё работает..
Java:
@SubscribeEvent
   public void onHeal(TickEvent.PlayerTickEvent event) {
       if(!event.player.worldObj.isRemote) {
           if(MinecraftServer.getServer().getTickCounter() % 100 == 0) {
               if(event.player.inventory.hasItem(Items.apple)) {
                   event.player.heal(1F);
               }
           }
       }
   }

Убедись, что ты через FML шину регаешь свой класс где ловишь событие
FMLCommonHandler.instance().bus().register(new твой класс());
 
Сверху