Minecraft bukkit调度程序和程序实例命名

时间:2013-08-07 21:58:34

标签: instance scheduler minecraft bukkit

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

  1. 我需要学习如何创建一个无限数量的对象实例。我想它会是这样的:
  2. int num = 0;

    public void create(){
    
        String name = chocolate + num;
        Thingy name = new Thingy(); 
    
    }
    

    所以你看到我在说什么?我需要基本上更改为每个新实例指定的名称,以便在创建时不会覆盖最后一个实例。我发誓,我到处寻找,我问过我的Java教授,我无法得到任何答案。

    2:我需要学习如何使用愚蠢的调度程序,到目前为止我无法理解。基本上,当检测到事件时,会调用两件事:一个立即激活的方法,另一个需要延迟5秒的方法,然后调用。代码是这样的:

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

    如果我没有提供太多细节,我再次道歉,但我不能为我的生活找到任何关于我能理解的Bukkit事件调度程序。

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

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

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

1 个答案:

答案 0 :(得分:1)

好的,对于第一个问题,我认为你想要使用数据结构。根据您正在执行的操作,可以使用不同的数据结构。数据结构只是一个容器,可用于存储一类对象的许多实例。您可以使用的数据结构是:

  • HashMap中
  • HashSet的
  • TreeMap的
  • 列表
  • 的ArrayList
  • 矢量

还有更多,但这些是重要的。 HashMap,HashSet和TreeMap都是Map类的一部分,它以其快速的操作而着称。要使用散列映射,请使用HashMap<KeyThing, ValueThingy> thing = new HashMap<KeyThing, ValueThing>();对其进行实例化,然后使用thing.put(key, value)向其添加元素。当你想从中得到一个值时,你只需使用thing.get(key) HashMaps使用超快速的算法来获取值,但结果是HashMap不会在任何特定的情况下存储它的条目订购。因此,当你想用for循环遍历它时,它会随机返回它的条目(因为内存和东西不是真正随机的)。此外,重要的是要注意,每个单独的密钥只能有一个。如果您尝试放入地图中已存在的密钥,它将超过该密钥的值。

HashSet就像一个HashMap,但没有存储值。如果您需要使用它来确定对象是否在其中,那么这是一个非常好的容器。

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

List和ArrayList不是地图。它们的元素带有索引地址。使用List,您必须指定要放入其中的元素数量。列表不会改变大小。 ArrayLists就像列表一样,每个元素都可以用arrayListThing.get(index)检索,但ArrayList可以改变大小。您可以通过arrayListThing.add(Thing)将元素添加到ArrayList。

Vector很像ArrayList。它的功能大致相同,我不太清楚它们之间的区别是什么。

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

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秒。除此之外,我认为这涵盖了所有问题。