Java:游戏模型,instanceof

时间:2013-08-18 18:10:49

标签: java instanceof

我正在为一款名为Minecraft的游戏制作一个“强力场”。我评论的是我需要帮助的地方。

if (Camb.killaura)
      {

    nchitDelay++;
        for(Object o: mc.theWorld.loadedEntityList){
    Entity e = (Entity)o;
        if(e != this && e instanceof EntitySkeleton || e instanceof EntityCow && getDistanceToEntity(e) <= killauraRange && mc.thePlayer.canEntityBeSeen(e) &&!Camb.friend.contains(e.getEntityName())){ // checking if the entity is either a skeleton or cow
        if(e.isEntityAlive()){
        if(nchitDelay >= 8){

        if(Camb.auraaimbot){
        facetoEntity(e); // facing the skeleton from an infinite distance.
        }
        if(Camb.criticals){
           if(mc.thePlayer.isSprinting()==false){
               if(mc.thePlayer.isJumping==false){
               if(mc.thePlayer.onGround){
                   mc.thePlayer.jump();
               }
               }
               }
           }
        Minecraft.SwitchToSword(mc.thePlayer.inventory.currentItem);
        swingItem();
        mc.playerController.attackEntity(this, e);
        nchitDelay = 0;
        break; 
        }
        }
        }
        }
        }
            }

所以,这个想法是,如果一个骷髅或母牛进入距离(4个街区),那么它将面对它并攻击它。一切正常,但玩家从任何距离都面向骨架。不只是4个街区。我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

我认为你的问题是:

if (
           e != this
        && e instanceof EntitySkeleton
        || e instanceof EntityCow
        && getDistanceToEntity(e) <= killauraRange
        && mc.thePlayer.canEntityBeSeen(e)
        && !Camb.friend.contains(e.getEntityName())
   ) {

你结合了很多条件,但没有达到预期的方式。像||&&这样的运营商有规则如何应用,就像2 + 2 * 10是22而不是40。

&&优先于||,就像*优先于+一样。您的情况目前意味着

(e != this && e instanceof EntitySkeleton)
||
(e instanceof EntityCow && getDistanceToEntity(e) <= killauraRange && mc.thePlayer.canEntityBeSeen(e) && !Camb.friend.contains(e.getEntityName())).

你想要的是在牛或骨架部分周围放一些括号:

if (
           e != this
        && (e instanceof EntitySkeleton || e instanceof EntityCow)
        && getDistanceToEntity(e) <= killauraRange
        && mc.thePlayer.canEntityBeSeen(e)
        && !Camb.friend.contains(e.getEntityName())
   ) {