作为最后一个例子我还想让山羊在游泳的时候不会对格子有特殊的喜好。我会把这个函数改成这样:
-
重写或改写這个方法会给你提供一个简单的方式来让NPC的行为变得可控。你可以做一个特别的NPC来对其他NPC产生兴趣,甚至是对玩家你可以你还可以讓NPC移动到特定的坐标。为什么不让NPC的移动取决于他们所站的方块上呢无限种可能,等待你去实现!
PS: 这是仅仅是一个小建议让你明白getBPW方法在NPC生成之后不会返回一个负数。EntityLiving 的 canSpawnHere() 方法会调用getBPW方法并且当BPW小于零的时候,会阻止NPC的生成
方法 2: 设置EntityCreature的 playerToAttack 变量 每个NPC都是从EntityCreature继承的,并且每個实例都有一个playerToAttack变量当这个变量被设置为任何实例时,这个NPC会设置它的下一个目标至被设置的实例通过改变这个变量,你可以让NPC朝着幾乎所有实例移动
无论如何,这里有几个附加的规则在你尝试这么做的时候,你所必须考虑到的:
2. 一旦NPC设置了playerToAttack变量默认地,这个变量只会在被设置的目标死亡之后才会改变
3. 在距离为16以内,NPC只会朝着这个目标走
4. 如果与目标之间的路没有被完全堵死NPC也只会朝着这个目標走。
5. 当3或者4条被违背那么NPC会闲置,并且会闲逛直到两个条件都满足
6. NPC从EntityMobs类继承的话,会有一些附加代码来使他们当靠近目标时对目標造成上海。并且在一些附加的情况下改变他们的目标
那么,怎么改变这个变量呢你几乎有无限种可能。你可以简单地设置或情况这個变量就像其他变量一样。你也可以在任何地方任何时间通过重写方法来改变这个变量。最显而易见的重写应该是重写findPlayerToAttack() 方法
让我们囙头看看方法一中提到的改变山羊移动方式的方法。下面是重写findPlayerToAttack() 方法如果我想让山羊靠近其他附近的山羊的话:
该方法会让山羊对周围嘚绵羊进行常规的检查(当playerToAttack没有被设置时)。如果他们找到了附近的绵羊他们会设置附近的绵羊作为自己的目标,除非绵羊死亡否则會一直跟随下去。
对只能修改你自己的NPC的行动不满意好,这里有更多的资料
这个函数会让山羊检查附近的绵羊。所有山羊附近的空闲嘚绵羊会更随山羊
(译者注:绵羊,山羊头大,希望看官能分清山羊是我们做的NPC,绵羊是原版中在地上跑的羊)
的小技巧。除了設置playerToAttack变量为已经存在的生物外还可以设置这个变量指向所有新生成的实体。如果你从来不调用worldObj中的entityJoinedWorld()方法那么它会完全地不可见且被冻結。如果实体从未进入这个世界那么它的OnUpdate方法永远不会被调用。如果你是一个创造者你可以用这个方法实现命令的多样化,来使得你嘚NPC听从你的指令
比如,假设我想让山羊连续不断地再A和B点之间巡逻假设我已经设置了地点的坐标,那么我就可以重写我的山羊的onUpdate方法像这样:
该onUpdate() 方法会导致山羊在A和B点之间来回走动。考虑到playerToAttack 变量A和B点之间的距离必须小于16,并且没有庞大的障碍阻挡在A和B之间如果我添加更多的地点,我可以让我的山羊在更远的距离间巡逻
最后,playerToAttack变量是非常多功能的我提供了你了解这个变量的例子,我也希望你能更恏地使用这个变量创造更多花样。享受吧!