сможешь ли ты мне написать код для пушки shaft для java сервера моего, если я представлю тебе код shaft из клиента     private function sendQuickShotCommand(result:ShaftShotResult) : void
      {
         Network(Main.osgi.getService(INetworker)).send("battle;quick_shot_shaft;" + result.toJSON());
      }
      
      private function sendStartAimCommand() : void
      {
         Network(Main.osgi.getService(INetworker)).send("battle;start_fire");
      }    [ServerData]
      public function quickFire(user:ClientObject, targets:Array, hitPoints:Array, direction:Vector3) : void
      {
         var hit:Vector3 = null;
         var i:int = 0;
         var globalHit:Vector3 = null;
         var targetTank:TankData = null;
         var currTank:Tank = null;
         var firringTank:TankData = this.tankModel.getTankData(user);
         if(firringTank == TankData.localTankData)
         {
            return;
         }
         if(this.commonModel == null)
         {
            this.commonModel = Main.osgi.getService(IWeaponCommonModel) as IWeaponCommonModel;
         }
         var commonData:WeaponCommonData = this.commonModel.getCommonData(firringTank.turret);
         var tankShaftData:ShaftData = firringTank.turret.getParams(ShaftData) as ShaftData;
         this.weaponUtils.calculateGunParamsAux(firringTank.tank.skin.turretMesh,commonData.muzzles[0],allGunParams.muzzlePosition,allGunParams.direction);
         var effects:ShaftSFXModel = WeaponsManager.getShaftSFX(WeaponsManager.getObjectFor(firringTank.turret.id));
         effects.createMuzzleFlashEffect(firringTank.turret,firringTank.tank.skin.turretDescriptor.shaftMuzzle,firringTank.tank.skin.turretMesh);
         firringTank.tank.addWorldForceScaled(allGunParams.muzzlePosition,allGunParams.direction,-commonData.kickback);
         if(hitPoints.length == 0)
         {
            return;
         }
         if(targets.length == 0)
         {
            hit = new Vector3(hitPoints[0].x,hitPoints[0].y,hitPoints[0].z);
            this.createStaticShotEffect(firringTank.user,hit,allGunParams.direction);
            this.battlefieldModel.addDecal(hit,allGunParams.muzzlePosition,50,decalMaterial);
         }
         else
         {
            for(i = 0; i < targets.length; i++)
            {
               globalHit = new Vector3(hitPoints[i].x,hitPoints[i].y,hitPoints[i].z);
               targetTank = this.tankModel.getTankData(BattleController.activeTanks[targets[i].target_id]);
               currTank = targetTank.tank;
               this.createTankShotEffect(firringTank.user,globalHit,allGunParams.direction);
               currTank.addWorldForceScaled(globalHit,allGunParams.direction,tankShaftData.impactQuickShot);
            }
            if(hitPoints.length > targets.length)
            {
               hit = new Vector3(hitPoints[targets.length].x,hitPoints[targets.length].y,hitPoints[targets.length].z);
               this.createStaticShotEffect(firringTank.user,hit,allGunParams.direction);
               this.battlefieldModel.addDecal(hit,allGunParams.muzzlePosition,50,decalMaterial);
            }
         }
      }
      
      [ServerData]
      public function fire(user:ClientObject, staticHit:Vector3, targets:Array) : void
      {
         var target:ServerShaftTargetData = null;
         var targetTankPos:Vector3 = null;
         var targetTank:TankData = null;
         var firringTank:TankData = this.tankModel.getTankData(user);
         if(firringTank == TankData.localTankData)
         {
            return;
         }
         if(this.commonModel == null)
         {
            this.commonModel = Main.osgi.getService(IWeaponCommonModel) as IWeaponCommonModel;
         }
         var commonData:WeaponCommonData = this.commonModel.getCommonData(firringTank.turret);
         this.weaponUtils.calculateGunParamsAux(firringTank.tank.skin.turretMesh,commonData.muzzles[0],allGunParams.muzzlePosition,allGunParams.direction);
         var effects:ShaftSFXModel = WeaponsManager.getShaftSFX(WeaponsManager.getObjectFor(firringTank.turret.id));
         effects.createMuzzleFlashEffect(firringTank.turret,firringTank.tank.skin.turretDescriptor.shaftMuzzle,firringTank.tank.skin.turretMesh);
         for(var i:int = 0; i < targets.length; i++)
         {
            target = targets[i];
            targetTank = this.tankModel.getTankData(BattleController.activeTanks[target.targetId]);
            if(targetTank != null)
            {
               targetTankPos = targetTank.tank.state.pos;
            }
            localToGlobal(targetTank.tank,target.globalHitPoint);
            this.createTankShotEffect(firringTank.user,target.globalHitPoint,allGunParams.direction);
            targetTank.tank.addWorldForceScaled(target.globalHitPoint,allGunParams.direction,commonData.impactForce);
         }
         if(staticHit != null)
         {
            this.createStaticShotEffect(firringTank.user,staticHit,allGunParams.direction);
            this.battlefieldModel.addDecal(staticHit,allGunParams.muzzlePosition,50,decalMaterial);
         }
         effects.createShotSoundEffect(firringTank.turret,firringTank.user,allGunParams.muzzlePosition);
      } вот этого кода из клиента думаю достаточно