1.7.10 | Доведение до ума стрельбы. Доработка отдачи.

И снова здравствуйте. Посидев и подумав, я так и не смог нормально сообразить проверки на перезарядку, пустой магазин и т.д., что бы сделать нормальную отдачу. Нынешний код:
Код:
public class ItemWeapon extends ItemDayZ {

   private static boolean mouseHeld = false;
   private static boolean lastMouseHeld;
   public Item Magi;
   public int ReloadTimei;
   public int FireRatei;
   public int Damagei;
   public int Rangei;
   public boolean Autoi = false;
   private boolean Primary = false;
   public int cooldi = 0;
   public boolean canShooti = true;
   public boolean WantShooti = false;
   public int reloading = 0;
   
   float отдача;
   int урон;


   public ItemWeapon(String texture, Item Mag, int reloadTime, int firerate, int maxDmg, int maxRange, float f1) {
      super(texture);
      this.Magi = Mag;
      this.ReloadTimei = reloadTime;
      this.FireRatei = firerate;
      this.Damagei = maxDmg;
      this.Rangei = maxRange;
      this.setMaxDamage(Mag.getMaxDamage());
      this.setMaxStackSize(1);
      this.setCreativeTab(DayZMod.tabGuns);
      отдача = f1;
   }

   public ItemWeapon setAutomatic() {
      this.Autoi = true;
      return this;
   }

   public ItemWeapon setPrimary() {
      this.Primary = true;
      return this;
   }

   public boolean isPrimary() {
      return this.Primary;
   }

   public void wantShoot(boolean par1) {
      this.WantShooti = par1;
   }

   public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag) {
      if(entity instanceof EntityPlayer && ((EntityPlayer)entity).getHeldItem() == itemstack) {
         if(world.isRemote) {
            this.UpdateClient(itemstack, world, entity, i, flag);
         } else {
            this.UpdateServer(itemstack, world, entity, i, flag);
         }
      }

   }

   @SideOnly(Side.CLIENT)
   public void UpdateClient(ItemStack itemstack, World world, Entity entity, int i, boolean flag) {
      if(entity instanceof EntityPlayer && ((EntityPlayer)entity).inventory.getCurrentItem() == itemstack) {
         Minecraft mc = Minecraft.getMinecraft();
         
         if(GameSettings.isKeyDown(mc.gameSettings.keyBindAttack)){
         Random rand = new Random();
            boolean rlотдача = rand.nextBoolean();
            int отд = rand.nextInt(1);
            if(entity.isSneaking())
            {
                ((EntityPlayer)entity).cameraPitch -= отдача+1F;
                ((EntityPlayer)entity).cameraPitch -= отдача+2;
                if(rlотдача)
                {
                    entity.rotationYaw -= отдача+отд;
                }
                else
                {
                    entity.rotationYaw -= -отдача-отд;
                }
                }
                else
                {
                    ((EntityPlayer)entity).cameraPitch -= отдача+0.5F;
                    entity.rotationPitch -= отдача+1F;
                if(rlотдача)
                {
                    ((EntityPlayer)entity).cameraPitch -= отдача-0.3F;
                    entity.rotationYaw -= отдача+отд;
                }
                else
                {
                    entity.rotationYaw -= -отдача-отд;
                }
        }
         }
         
         lastMouseHeld = mouseHeld;
         mouseHeld = false;
         GameSettings var10000 = mc.gameSettings;
         if(GameSettings.isKeyDown(mc.gameSettings.keyBindAttack) && mc.currentScreen == null) {
            mouseHeld = true;
         }

         if(mouseHeld && !lastMouseHeld) {
            DayZMod.DISPATCHER.sendToServer(PacketShoot.send(true));
         }

         if(!mouseHeld && lastMouseHeld) {
            DayZMod.DISPATCHER.sendToServer(PacketShoot.send(false));
         }

         var10000 = mc.gameSettings;
         if(GameSettings.isKeyDown(ClientProxy.Reload) && mc.currentScreen == null && itemstack.getItemDamage() == itemstack.getMaxDamage() && (((EntityPlayer)entity).capabilities.isCreativeMode || ((EntityPlayer)entity).inventory.hasItem(this.Magi)) && !((EntityPlayer)entity).isInWater() && !((EntityPlayer)entity).isSprinting()) {
            if(this.reloading == this.ReloadTimei) {
               DayZMod.DISPATCHER.sendToServer(PacketReload.send(this.reloading));
               ++this.reloading;
            } else {
               ++this.reloading;
            }
         } else {
            this.reloading = 0;
         }
      }

   }

   public void UpdateServer(ItemStack itemstack, World world, Entity entity, int i, boolean flag) {
      if(entity instanceof EntityPlayer) {
         EntityPlayer player = (EntityPlayer)entity;
         if(player.getHeldItem() == itemstack) {
            if(!this.WantShooti) {
               this.canShooti = true;
            } else {
               this.Shoot(world, player, itemstack);
            }

            if(this.cooldi > 0) {
               --this.cooldi;
            }
         }
      }

   }

   public void Shoot(World world, EntityPlayer entity, ItemStack itemstack) {
      if(!world.isRemote && this.cooldi <= 0 && this.canShooti && this.WantShooti && itemstack.getItemDamage() != this.getMaxDamage()) {
         world.spawnEntityInWorld(new EntityBullet(world, entity, this.Damagei, this.Rangei));
         entity.worldObj.playSoundAtEntity(entity, "DayZMod:gunshoot2", 1.0F, 0.0F);
         itemstack.damageItem(1, entity);
         this.cooldi = this.FireRatei;
         if(!this.Autoi) {
            this.canShooti = false;
         }
         
      } else if(!world.isRemote && this.cooldi <= 0 && this.canShooti && this.WantShooti && itemstack.getItemDamage() == this.getMaxDamage()) {
         entity.worldObj.playSoundAtEntity(entity, "DayZMod:empty", 1.0F, 0.0F);
         this.cooldi = this.FireRatei;
         if(!this.Autoi) {
            this.canShooti = false;
         }
      }
      System.out.println("SHHHHHHHOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
   }

   public void Reload(ItemStack current, EntityPlayer entity) {
      if(entity.inventory.hasItem(this.Magi) || entity.capabilities.isCreativeMode) {
         entity.worldObj.playSoundAtEntity(entity, "DayZMod:reload", 1.0F, 0.0F);
         current.setItemDamage(0);
         if(!entity.capabilities.isCreativeMode) {
            entity.inventory.consumeInventoryItem(this.Magi);
         }
      }

      if(entity.worldObj != null) {
         ;
      }

   }
   
   public void onPlayerStoppedUsing(ItemStack itemstack, World world, EntityPlayer entityplayer, int i)
   {
                    Random rand = new Random();
                       boolean rlотдача = rand.nextBoolean();
                       int отд = rand.nextInt(1);
                       if(entityplayer.isSneaking())
                       {
                       entityplayer.cameraPitch -= отдача+1F;
                       entityplayer.rotationPitch -= отдача+2;
                       if(rlотдача)
                       {
                       entityplayer.rotationYaw -= отдача+отд;
                       }
                       else
                       {
                       entityplayer.rotationYaw -= -отдача-отд;
                       }
                       }
                       else
                       {
                       entityplayer.cameraPitch -= отдача+0.5F;
                       entityplayer.rotationPitch -= отдача+1F;
                       if(rlотдача)
                       {
                           entityplayer.rotationYaw -= отдача+отд;
                       }
                       else
                       {
                       entityplayer.rotationYaw -= -отдача-отд;
               }
           }
   }

   public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) {
      return true;
   }

}
Буду благодарен вам, если досообразите за меня немного, уже кипит голова от этого.
 
Боже мой, это ты на Java написал, или на Си-Диезе?
 
Да исправлю, просто помогите сделать нормальную отдачу, я не могу ее просто написать :D
 
Скажем так - это уже чисто алгоритмичная проблема. То бишь - подобрать циферки и действия по вкусу.
А помочь(по крайней мере я) можно только с тем, чего ты не знаешь - хуки-евенты-гуи-тайлы-нбт.
Учитывая, что ты всё знаешь(предположительно), то остается задача рутинная и вполне выполнимая(тобой) - математика.
 
anti344 написал(а):
Скажем так - это уже чисто алгоритмичная проблема. То бишь - подобрать циферки и действия по вкусу.
А помочь(по крайней мере я) можно только с тем, чего ты не знаешь - хуки-евенты-гуи-тайлы-нбт.
Учитывая, что ты всё знаешь(предположительно), то остается задача рутинная и вполне выполнимая(тобой) - математика.
Не могу сделать нормальные проверки, вот в чем дело.
 
Назад
Сверху