Bukkit /看到的命令

时间:2015-03-08 16:13:24

标签: bukkit

我想知道如何在Essentials中创建一个看到的命令。我尝试了很多东西,但我仍然无法让它发挥作用。

如何在我的Bukkit插件中添加/seen命令?

5 个答案:

答案 0 :(得分:1)

这个问题没有简单,直接,简洁和干燥的答案。您将需要确切地确定/看到了什么,然后将自己编码。您需要添加一个事件处理程序来处理玩家加入/退出,并使用玩家UUID和其他信息(例如姓名)将该事件的日期/时间保存在数据库中。然后,您需要第二个处理程序来处理名为/ seen的自定义命令,您需要在该命令中搜索匹配的记录并返回信息。

答案 1 :(得分:1)

事先警告,我使用的某些数据类型不存在,您需要将它们替换为实际数据类型,因为我不记得所有这些类型(例如日期)

看来我没有代码可以自行完成。首先,您需要一种在Plugin目录中保存/加载.dat文件的方法,这将需要一个对象输出流和对象输入流。

接下来,您需要创建一个包含UUID和日期的散列图,例如

HashMap lastSeen = new HashMap(UUID, Date);

您需要处理玩家离开事件

@EventHandler
public void onPlayerLeave(PlayerDisconnectEvent e) { // PlayerDisconnectEvent not correct syntax

Date currentDate = system.getDate();
UUID p = e.getPlayer().getUUID();

if (lastSeen.contains(p)) { // Check if the player is already in the HashMap
    lastSeen.replace(p, currentDate); // Again replace isn't correct sytax
    return;
    }
lastSeen.add(p, currentDate);
}

现在你需要你的onDisable和onEnable这样的东西

@Override
public void onDisable() {
    save(lastSeen, f); // f is the file you are saving to
}

@Override
public void onEnable() {
    lastSeen = load(f);
}

您需要某种用于保存/加载的函数,其中包含到set .dat文件的输入/输出流。这是一个有用的链接:https://bukkit.org/threads/saving-loading-hashmap.56447/

最后,您需要注册命令并为/ seen命令创建一个commandexecutor,这非常简单。您需要做的就是检查/ seen命令中输入的玩家名称,并获取相应的hashmap日期。

答案 2 :(得分:0)

Look at the Essentials GitHub repository。您可以在那里找到它的命令,但它相当大,并且包含许多特定于Essentials的代码(文件中的8个导入是特定于Essentials的),例如昵称和检查jailed& AFK。您必须使用那里的内容并使其适应您的插件。

答案 3 :(得分:0)

使用数据库保存玩家UUID以及他最后登录的时间

答案 4 :(得分:0)

拥有像{esse}这样的/seen命令会非常复杂。实际上并没有一种简单的方法。

一种方法是将玩家存储到configuration filehashmap。我建议不要使用hashmaps,因为当服务器重新启动时,它不会保存数据。当玩家加入时,您可以将其添加到玩家的在线列表中,并将其从离线玩家列表中删除。当玩家退出时则相反。我知道如果你对/seen命令有一定的权限,你可以看到他们的IP地址。只需使用播放器中的getAddress()方法即可。要在线/离线存储时间,您可以添加计时器并将其存储在配置中以及它们的字符串名称。不要存储整个播放器,只包括他们的名字或UUID。我建议使用UUID,因为Essentials使用这种方式,因为1.8现在你可以改变你的名字,没有什么会让人困惑。然后,您可以循环浏览两个在线/离线列表,找到用户在/seen时输入的播放器,如果他们在离线列表中则显示其状态,如果他们在在线列表中则在线显示。< / p>

这只是一个想法,你必须自己编写代码。这只是你的一个想法。我不确切知道Essentials是如何做到的,但您可以查看他们的GitHub page以获取有关他们如何做到这一点的信息。