-1

这是我之前的问题的重写,因为我被告知它太长了。

if(/*This is where I need something*/)
{
    mc.thePlayer.swingItem();
    mc.playerController.attackEntity(mc.thePlayer, e);
    delay = 0;
    break;
}

这是 Minecraft 中 KillAura 代码的一部分。我正在努力使它不针对我制作的朋友列表中的人。该列表是一个名为“friendslist”的 ArrayList,位于名为 Variables.java 的文件中。如果有人能向我解释我如何使它不针对我的朋友列表中的人,我将非常感激。请保持简洁,因为我对 java 比较陌生。

提前致谢。

马特

4

3 回答 3

1

一个ArrayList对象有一个名为 的方法contains。使用此方法,您可以测试对象是否是集合的一部分。阅读文档

工作示例

ArrayList<People> people = new ArrayList<People>();
// Define the collection.
People p = new People("Dave");
// Create a new test object.
people.add(p);
// Add the object to the collection.
if(people.contains(p))
{
    // Will print out, because P exists within the people collection.
    System.out.println("Object exists in the collection");
}

改进我的原始答案

正如评论中所建议的,鉴于这是一个游戏的比较算法,您可能需要对其进行更多优化。考虑到这一点,我想到了使用HashMap

HashMap 示例

HashMap<String, Person> friends = new HashMap<String, Person>();
// Create the HashMap object.
Person p = new Person("Dave");
// Create a test object, with the name "Dave".
String key = p.getName();
// Get a key. In this case, the object's name.
friends.put(key, p);
// Add the person to the collection.

使用此代码,您现在在 HashMap 集合中有一个人。现在,当有人走进你的“攻击光环”时,你可以简单地得到那个人的名字,然后检查你的 HashMap 中是否存在一个键。这快速(O(1) 复杂度)且准确,最重要的是,您正在比较自定义值;不是同一个对象。因此,用户可以回收他们的对象并仍然存储在您的收藏中。

希望这个编辑会有所帮助:)

于 2013-03-10T12:12:34.607 回答
0

为了查找对象是否不在列表中,请使用:

if (!friendslist.contains(otherPlayer))

friendslist你的朋友列表在哪里otherPlayer,如果在你的朋友列表中,它是一个玩家。

您可以阅读有关列表数组列表的更多信息

于 2013-03-10T12:12:01.950 回答
0

很难说出所有的部分是什么,但是如果 friendslist 是一个包含玩家对象的数组列表,并且 thePlayer 是您要检查的那个,那么

if (!(friendslist.contains(mc.thePlayer)))
于 2013-03-10T12:14:03.980 回答