Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 身份验证之前,AuthMe如何阻止Minecraft中的操作?_Java_Bukkit - Fatal编程技术网

Java 身份验证之前,AuthMe如何阻止Minecraft中的操作?

Java 身份验证之前,AuthMe如何阻止Minecraft中的操作?,java,bukkit,Java,Bukkit,我想制作一个类似于AuthMe的插件,当玩家刚刚加入时,阻止所有的动作——放置/破坏块、更改库存、聊天——直到他使用命令登录 我不想使用AuthMe的原因是因为我希望它与我的网站通信,就像使用与网站上的帐户相同的密码一样。创建一个侦听所有要取消的事件的帐户 看看下面的不同包装。 你可能需要参与大多数活动 我建议您查看一下源代码,了解它是如何实现的。 查看该软件包。我可以为您提供一些代码来完成这项工作,因为我自己编写了AuthMC副本 首先,您需要列出需要取消的事件。然后,您需要一组“已登录”的播

我想制作一个类似于AuthMe的插件,当玩家刚刚加入时,阻止所有的动作——放置/破坏块、更改库存、聊天——直到他使用命令登录

我不想使用AuthMe的原因是因为我希望它与我的网站通信,就像使用与网站上的帐户相同的密码一样。

创建一个侦听所有要取消的事件的帐户

看看下面的不同包装。 你可能需要参与大多数活动

我建议您查看一下源代码,了解它是如何实现的。
查看该软件包。

我可以为您提供一些代码来完成这项工作,因为我自己编写了AuthMC副本

首先,您需要列出需要取消的事件。然后,您需要一组“已登录”的播放器。每个事件侦听器将检查播放机是否在哈希集中,如果不在哈希集中,则取消事件

HashSet<String> loggedInPlayers = new HashSet<String>();

public void blockBreak(BlockBreakEvent e) {
    if(!logginInPlayers.contains(e.getPlayer().getName()) {
        e.setCancelled(true);
    }
}

正如人们之前所说,您所要做的就是侦听事件的发生,并检查它们是否在指定的列表中。不一定是列表,HashMap也可以。正如所建议的那样,哈希集也是如此。然而,让它连接到您的网站将有点困难,我无法回答如何做到这一点,因为我没有这方面的知识

当玩家聊天时取消事件的示例(我在自己的插件中使用它,并使用哈希集判断玩家是否登录):

只要重复我为其他活动提供的聊天示例,就可以了

public void playerQuit(PlayerQuitEvent e) {
    loggedInPlayers.remove(e.getPlayer().getName();
}
HashSet<String> loggedIn = new HashSet<String>();

@EventHandler
public void onPlayerChat(PlayerChatEvent event) {
  if (!loggedIn.contains(event.getPlayer().getName()) {
    event.setCancelled(true);
    event.getPlayer().sendMessage("You must log in to chat!"); //Optional
  }
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
    loggedIn.remove(event.getPlayer().getName());
}