Ненужный вызов события FillBucketEvent

Версия Minecraft
1.7.10
90
1
Здравствуйте. При установке блока  жидкости из моего мода ведром методом setBlock (при использовании события PlayerInteractEvent) сразу после установки жидкости вызывается событие FillBucketEvent и жидкость возвращается обратно в ведро. Как можно блокировать моментальный вызов события FillBucketEvent, если в данном случае(при установке блока жидкости) оно совершенно не нужно. Я только придумал чтоб по времени просчитывать, чтоб пару моментов проходило.. Но должен же быть правильный способ

@SubscribeEvent
   public void onBucketFill(FillBucketEvent event) {
           if (!event.world.isRemote) {
               World world = event.world;
               MovingObjectPosition pos = event.target;
               Block block = world.getBlock(pos.blockX, pos.blockY, pos.blockZ);
               int meta = world.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ);
                   
               if (block == TestMod.fluidBlock && meta == 0) {
                   world.setBlockToAir(pos.blockX, pos.blockY, pos.blockZ);
                   event.result = new ItemStack(ItemLoader.freshWaterBucket, 1, 0);
                   event.setResult(Event.Result.ALLOW);
               }
           }
   }
 
Liahim написал(а):
Ну, в 1.10 это делается через event.setResult(результат)...
Если действие завершено, то майн не будет каждый тик повторять его, пока ты не отпустишь кнопку мыши.

А что туда передать, в аргументы? Есть вот Event.Result.ALLOW, Event.Result.DEFAULT,Event.Result.DENY, или что то другое?
 
А ты регал вот так?
FluidContainerRegistry.registerFluidContainer(new FluidContainerData(new FluidStack(UnknowWater, FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(BRItems.UnknowWaterBucket), new ItemStack(Items.bucket)));
 
BlesseNtumble написал(а):
А ты регал вот так?
 FluidContainerRegistry.registerFluidContainer(new FluidContainerData(new FluidStack(UnknowWater, FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(BRItems.UnknowWaterBucket), new ItemStack(Items.bucket)));

Ну я вот так зарегал FluidContainerRegistry.registerFluidContainer(testFluid,new ItemStack(ItemLoader.freshWaterBucket),
       new ItemStack(Items.bucket));


Но ни первый ни второй вариант этой проблемы не решают. нужно как то заставить игру не слушать событие FillBucketEvent, пока пкм не отпущена после установки жидкости.
 
Liahim написал(а):
Покажи хоть свой PlayerInteractEvent

вот
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void useItem(PlayerInteractEvent event) {

   int x=0;
   int y=0;
   int z=0;
   boolean fullInventory=true;
   try{
       if(!event.world.isRemote){
           if(event.action== PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK){
           System.out.println(event.entityPlayer.getCurrentEquippedItem());

           // if (event.entityPlayer.getCurrentEquippedItem().getItem() != null) {
               if(event.world.getBlock(event.x,event.y,event.z).equals(BuildCraftFactory.tankBlock)){
                   //  ((BlockTank)event.world.getBlock(event.x,event.y,event.z)).
                   System.out.println("tank use");
               }else{
           if (event.entityPlayer.getCurrentEquippedItem().getItem().equals(ItemLoader.freshWaterBucket)) {
               System.out.println(event.world.getBlock(event.x, event.y, event.z));
               if (event.face != -1) {
                   switch (event.face) {
                       case 0: {
                           x = event.x;
                           y = event.y - 1;
                           z = event.z;
                           break;
                       }
                       case 1: {
                           x = event.x;
                           y = event.y + 1;
                           z = event.z;
                           break;
                       }
                       case 2: {
                           x = event.x;
                           y = event.y;
                           z = event.z - 1;
                           break;
                       }
                       case 3: {
                           x = event.x;
                           y = event.y;
                           z = event.z + 1;
                           break;
                       }
                       case 4: {
                           x = event.x - 1;
                           y = event.y;
                           z = event.z;
                           break;
                       }
                       case 5: {
                           x = event.x + 1;
                           y = event.y;
                           z = event.z;
                           break;
                       }
                   }
                   int meta = event.world.getBlockMetadata(x, y, z);
                   if (event.world.getBlock(x, y, z).equals(Blocks.air)||(event.world.getBlock(x, y, z).equals(TestMod.fluidBlock)&&meta!=0)) {
                     if(!event.entityPlayer.capabilities.isCreativeMode){
                         int currentItem=event.entityPlayer.inventory.currentItem;
                         Item i=event.entityPlayer.getCurrentEquippedItem().getItem();

                        

                         --event.entityPlayer.inventory.mainInventory[currentItem].stackSize;
                        

                         event.entityPlayer.inventory.setInventorySlotContents(currentItem, new ItemStack(Items.bucket));


                         event.world.setBlock(x,y,z,TestMod.fluidBlock);
                       
                         BlockTestFluid.placedTimeStart();
                       
                     }
                   }

               }
           }

           }

           }
       }
   }catch (NullPointerException e){

   }
 
AlexSocol написал(а):
Какой красивый код... onItemUse для неудачников? Посмотри как сделана та же зажигалка.
Плюс, не надо регистрировать свой айтем как аналог  ведра, тогда и эвента не будет.

Так айтем должен работать как ведро же. Устанавливать жидкость при нажатии. То что код некрасивый, знаю, но он тестовый, когда в нем все будет работать как нужно, я его перепишу и он будет красивым. И ведро кстати заполненное не из моего мода, я аддон пилю к моду, в котором это ведро есть. Поэтому код  самого ведра не могу изменить заполненного.
 
Назад
Сверху