Как получить игрока, по близости

svk

1,185
3
Есть вот такой код
Код:
          for(int i = 0; i < par2World.loadedEntityList.size(); ++i) 
          {
             if(((Entity)par2World.loadedEntityList.get(i)).getDistanceToEntity(par3EntityPlayer) < closest && par2World.loadedEntityList.get(i) instanceof EntityLiving) 
             {
                closest = ((Entity)par2World.loadedEntityList.get(i)).getDistanceToEntity(par3EntityPlayer);
                thisOne = (Entity)par2World.loadedEntityList.get(i);
             }
          }
Но он не видит игроков, только мобов...
Вот полный...
Код:
   public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) 
   {
          float closest = Float.MAX_VALUE;
          Entity thisOne = null;

          for(int i = 0; i < par2World.loadedEntityList.size(); ++i) 
          {
             if(((Entity)par2World.loadedEntityList.get(i)).getDistanceToEntity(par3EntityPlayer) < closest && par2World.loadedEntityList.get(i) instanceof EntityLiving) 
             {
                closest = ((Entity)par2World.loadedEntityList.get(i)).getDistanceToEntity(par3EntityPlayer);
                thisOne = (Entity)par2World.loadedEntityList.get(i);
             }
          }

          if(thisOne != null) {
             if(thisOne.posX < par3EntityPlayer.posX && thisOne.posX - par3EntityPlayer.posX <= 4.0D) {
                if(thisOne.posZ < par3EntityPlayer.posZ && thisOne.posX - par3EntityPlayer.posX <= 4.0D && thisOne.posY - par3EntityPlayer.posY <= 3.0D) {
                   thisOne.addVelocity(0.0D, 1.0D, 0.0D);
                   thisOne.fallDistance = 0.0F;
                }

                if(thisOne.posZ > par3EntityPlayer.posZ && par3EntityPlayer.posZ - thisOne.posZ >= -4.0D && thisOne.posY - par3EntityPlayer.posY <= 3.0D) {
                   thisOne.addVelocity(0.0D, 1.0D, 0.0D);
                   thisOne.fallDistance = 0.0F;
                }
             }

             if(thisOne.posX > par3EntityPlayer.posX && par3EntityPlayer.posX - thisOne.posX >= -4.0D) {
                if(thisOne.posZ < par3EntityPlayer.posZ && thisOne.posX - par3EntityPlayer.posX <= 4.0D && thisOne.posY - par3EntityPlayer.posY <= 3.0D) {
                   thisOne.addVelocity(0.0D, 1.0D, 0.0D);
                   thisOne.fallDistance = 0.0F;
                }

                if(thisOne.posZ > par3EntityPlayer.posZ && par3EntityPlayer.posZ - thisOne.posZ >= -4.0D && thisOne.posY - par3EntityPlayer.posY <= 3.0D) {
                   thisOne.addVelocity(0.0D, 1.0D, 0.0D);
                   thisOne.fallDistance = 0.0F;
                }
             }
          }
          return par1ItemStack;
       }
 
В блоке маяка?
Я нашел только это
Код:
    public void onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, EntityLivingBase p_149689_5_, ItemStack p_149689_6_)
    {
        super.onBlockPlacedBy(p_149689_1_, p_149689_2_, p_149689_3_, p_149689_4_, p_149689_5_, p_149689_6_);

        if (p_149689_6_.hasDisplayName())
        {
            ((TileEntityBeacon)p_149689_1_.getTileEntity(p_149689_2_, p_149689_3_, p_149689_4_)).func_145999_a(p_149689_6_.getDisplayName());
        }
    }
 
Agravaine написал(а):
Не получилось, видимо знаний не хватает...
Как я понял, это отвечает за поиск и выдачу для него эффекта?
Код:
   private void func_146000_x()
    {
        if (this.field_146015_k && this.levels > 0 && !this.worldObj.isRemote && this.primaryEffect > 0)
        {
            double d0 = (double)(this.levels * 10 + 10);
            byte b0 = 0;

            if (this.levels >= 4 && this.primaryEffect == this.secondaryEffect)
            {
                b0 = 1;
            }

            AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(d0, d0, d0);
            axisalignedbb.maxY = (double)this.worldObj.getHeight();
            List list = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, axisalignedbb);
            Iterator iterator = list.iterator();
            EntityPlayer entityplayer;

            while (iterator.hasNext())
            {
                entityplayer = (EntityPlayer)iterator.next();
                entityplayer.addPotionEffect(new PotionEffect(this.primaryEffect, 180, b0, true));
            }

            if (this.levels >= 4 && this.primaryEffect != this.secondaryEffect && this.secondaryEffect > 0)
            {
                iterator = list.iterator();

                while (iterator.hasNext())
                {
                    entityplayer = (EntityPlayer)iterator.next();
                    entityplayer.addPotionEffect(new PotionEffect(this.secondaryEffect, 180, 0, true));
                }
            }
        }
    }
 
Это то самое. Метод expand делает коробку в радиусе твоих ко-орд. Например 5,5,5 это куб в пять блоков. Тебе нужно скопировать и в цикле проделать работу
 
Dovakin написал(а):
Это то самое. Метод expand делает коробку в радиусе твоих ко-орд. Например 5,5,5 это куб в пять блоков. Тебе нужно скопировать и в цикле проделать работу
Я, просто, ничего не понимаю. Это надо регать свой тайл в предмете, в тайле наследовать TileEntity и там уже всё сделать?
[merge_posts_bbcode]Добавлено: 09.01.2015 19:29:35[/merge_posts_bbcode]

Ладно, я сократил, вышло вот что:
Код:
private void func_146000_x()
{
           AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(d0, d0, d0);
           axisalignedbb.maxY = (double)this.worldObj.getHeight();
           List list = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, axisalignedbb);
           Iterator iterator = list.iterator();
           EntityPlayer entityplayer;

           while (iterator.hasNext())
           {
               entityplayer = (EntityPlayer)iterator.next();
               //действие
           }
}
Что ставить вместо d0, и что делать, ведь надо наследовать TileEntity, а внутри итема это не сделаешь.
 
Не надо ничего наследовать, ты в своем уме?
Кстати, в мире есть уже готовый метод, точно такой же, как и у тебя.
Код:
AxisAlignedBB box = AxisAlignedBB.getBoundingBox(player.posX, player.posY, player.posZ, player.posX + 1, player.posY + 1, player.posZ + 1).expand(distance, distance, distance);
Entity entity = world.findNearestEntityWithinAABB(EntityPlayer.class, box, player);
 
Agravaine написал(а):
Ок, методов куча.
Да всё, я прост запутался, не думал что он требует коорды игрока. Оказалось, просто подставить аргументы метода...
 
Назад
Сверху