需要一些PUB / SUB Jedis帮助Bukkit

时间:2016-07-19 23:45:04

标签: java redis bukkit jedis

我目前在使用此代码时遇到了一些问题:

public class ChatPlugin extends JavaPlugin implements Listener{

private static ChatPlugin instance;

private final static String CHANNEL = "chat";
private JedisPool jedisPool;
private ChatChannel chatChannel;


@Override
public void onEnable()
{
    instance = this;
    saveDefaultConfig();

    this.jedisPool = new JedisPool(new JedisPoolConfig(), getConfig().getString("redis-host"), 6379, 0,getConfig().getString("redis-password"));
    this.chatChannel = new ChatChannel();

    this.jedisPool.getResource().subscribe(this.chatChannel, new String[]{"chat"});

    Bukkit.getPluginManager().registerEvents(this, this);
    getCommand("chat").setExecutor(this);
}

@Override
public void onDisable()
{
    instance = null;
    this.chatChannel.unsubscribe();
    this.jedisPool.destroy();
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (command.getName().equalsIgnoreCase("chat"))
    {
        getJedis().publish(CHANNEL, args[0]);
        sender.sendMessage(ChatColor.GREEN + "Sent!");
    }
    return true;
}


public Jedis getJedis(){
    return jedisPool.getResource();
}

public static ChatPlugin getInstance() {
    return instance;
}

public class ChatChannel extends JedisPubSub {

    @Override
    public void onMessage(String channel, String message) {
        new BukkitRunnable(){
            @Override
            public void run() {
                Bukkit.broadcastMessage(message);
            }
        }.runTask(ChatPlugin.getInstance());
    }
}

}

这是我第一次使用redis' PUB / SUB功能,我真的不知道发生了什么。没有堆栈跟踪,只是,当插件启用时,它会冻结。是的,我知道这是因为我在主线程上执行它,但即使我运行它async(我有)它仍然无效。

希望有人可以帮忙! 感谢

1 个答案:

答案 0 :(得分:0)

您没有向我们发送saveDefaultConfig方法,因此首先检查是否正确创建了插件配置。在检查你没有对Bukkit或任何逻辑错误做出任何错误之后,尝试谷歌任何例子或尝试在programcreek.com上找到一些例子(我在那里找到了一些jedis)。

如果你仍然不清楚:在你问这里之前,尝试做你应该做的事情。阅读Jedis的维基! https://github.com/xetorthio/jedis/wiki