2

对于任何知道如何正确使用 Bukkit 的人来说,这个问题可能是非常明显的,如果我错过了其他人的解决方案,我很抱歉,但这真的让我很生气,我不知道还能做什么,教程完全没用。我确实有两件事需要帮助:

  1. 我需要学习如何创建无限数量的对象实例。我想应该是这样的:

整数 = 0;

public void create(){

    String name = chocolate + num;
    Thingy name = new Thingy(); 

}

所以你明白我在说什么吗?我需要基本上更改为每个新实例赋予的名称,以便它在创建时不会覆盖最后一个实例。我发誓我到处都看过,我问过我的 Java 教授,但我没有得到任何答案。

2:我需要学习如何使用愚蠢的调度器,到目前为止我什么都看不懂。基本上,当检测到一个事件时,会调用 2 件事:一种方法会立即激活,另一种方法需要延迟 5 秒,然后再调用。代码是这样的:

public onEvent(event e){
    Thingy thing = new Thingy();
    thing.method1();
    thing.doOnDelay(method2(), 100 ticks);

}

再一次,如果我没有提供太多细节,我深表歉意,但我无法为我的生活找到任何我能理解的关于 Bukkit 事件调度程序的信息。

不要给我留下 Bukkit 官方教程的链接,我根本无法理解它们,这将是浪费答案。我需要可以帮助我的人,我是一名初级插件编写者。

我有过专注于 Java 的编程 I 和 II,我知道很多基本的东西,我只需要 Bukkit 特定的帮助来完成第二个。

自从我开始编程以来,第一个让我感到困惑。

4

1 回答 1

1

好的,所以对于第一个问题,我认为您想使用数据结构。根据您在做什么,可以使用不同的数据结构。数据结构只是一个容器,您可以使用它来存储一种对象的许多实例。您可以使用的数据结构是:

  • 哈希映射
  • 哈希集
  • 树状图
  • 列表
  • 数组列表
  • 向量

还有更多,但这些是大的。HashMap、HashSet 和 TreeMap 都是 Map 类的一部分,它以运算速度快而著称。要使用 hashmap,你可以用 实例化它,HashMap<KeyThing, ValueThingy> thing = new HashMap<KeyThing, ValueThing>();然后用thing.put(key, value). 然后,当您想从中获取值时,您只需使用thing.get(key)HashMaps 使用一种超快的算法来获取值,但这样做的结果是 HashMap 不会以任何特定顺序存储它的条目。因此,当您想使用 for 循环遍历它时,它会随机返回它的条目(不是真正随机的,因为内存和东西)。此外,重要的是要注意每个单独的密钥只能有一个。如果您尝试放入映射中已经存在的键,它将覆盖该键的值。

HashSet 类似于 HashMap,但没有存储值。如果您只需要确定一个对象是否在其中,那么它是一个非常好的容器。

TreeMap 是唯一以特定顺序存储其值的地图之一。您必须提供一个比较器(告诉一个对象是否小于另一个对象的东西),以便它知道如果它希望它们按升序排列值的顺序。

List 和 ArrayList 不是映射。它们的元素与索引地址一起放入。使用列表,您必须指定要放入其中的元素数量。列表不会改变大小。ArrayLists 类似于列表,其中每个元素都可以检索,arrayListThing.get(index)但 ArrayList 可以更改大小。您可以通过 向 ArrayList 添加元素arrayListThing.add(Thing)

Vector 很像 ArrayList。它实际上的功能大致相同,我不太确定它们之间的区别是什么。

无论如何,您可以通过循环使用这些数据结构来存储大量对象。这是一个带有向量的示例。

Vector<Thing> thing = new Vector<Thing>();
int numberofthings = 100;
for(int i = 0; i < numberofthings; i++) {
    thing.add(new Thing());
}

这将为您提供一个充满事物的向量,然后您可以使用 for(Thing elem:thing) { thing.dostuff } 进行迭代

好的,现在解决第二个问题。您是正确的,您需要使用 Bukkit 调度程序。方法如下:

创建一个扩展 BukkitRunnable 的类

public class RunnableThing extends BukkitRunnable {

    public void run() {
        //what you want to do. You have to make this method.
    }

}

然后,当您要执行该操作时,您要做的是使用 RunnableThing 创建一个新的 BukkitTask 对象

BukkitTask example = new RunnableThing().runTaskLater(plugin, ticks)

你必须做一些数学计算才能确定你想要多少滴答声。20 滴答声 = 1 秒。除此之外,我认为这涵盖了您的所有问题。

于 2013-08-08T03:09:36.120 回答