fenghaolin1
如题,举个例子,比如我想在玩家重命名物品时给出一个按钮,玩家点击以后会在聊天栏提示,“请在n秒内按‘t’在聊天栏内输入xxx以命名

橙色字体可以不管,重点是划线的句子里的东西怎么实现,如果可以的话求具体代码,万分感谢

隔壁老吕
Timer,...

July_Summer
点击后
存一个HashMap
用一个Bukkit计时器
每秒循环 也就是20tick 每次循环 遍历HashMap 减1
当-1 = 0的时候 将这个内容 从 HashMap中删除
因为遍历 用来到搜索的是玩家变量
直接发送消息"时间已到"

关于输入
玩家聊天事件
将此玩家 在HashMap里搜索
如果为null
则 不管
不是null 的话
就 发送消息 "输入成功!”
输入的内容 = e.getMessage();
取消事件
具体代码 懒得打了

弱鸡绿毛怪
Conversation

fenghaolin1
July.七月 发表于 2018-6-27 18:16
点击后
存一个HashMap
用一个Bukkit计时器

貌似看懂了一点,能不能给下计时器的代码= =

July_Summer
fenghaolin1 发表于 2018-6-28 14:05
貌似看懂了一点,能不能给下计时器的代码= =

抱歉 我懒

fenghaolin1

那有没有什么自定义事件的教程,我想通过自定义事件去触发它

宅宅蛙
玩家点击那个按钮后,你把玩家名作为key,当前时间作为value存进map
当监控到玩家聊天或输入输入xxx 来命名时
使用key读取value(上次的时间)
如果当前时间减去上次的时间在一定范围内,则输入有效。反之无效。

hnfhu1
计时器 了解一下 或者存属时间读取进行比较

元路
int timer=20;//1秒
        HashSet<String> inTime=new HashSet<>();
        public void timer(Player p) {
                inTime.add(p.getName());
                p.sendMessage("§m请在"+timer/20+"秒内按‘T’在聊天栏内输入xxx以命名");
                Bukkit.getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
                        @Override
                        public void run() {
                                inTime.remove(p.getName());
                        }
                }, timer);
        }

        @EventHandler(priority = EventPriority.HIGHEST)
        public void Event(AsyncPlayerChatEvent event) {
                String name;
                if (inTime.contains(name=event.getPlayer().getName())) {
                        inTime.remove(name);
                        String message=event.getMessage();
                        //这个message即为在指定时间内玩家输入的信息
                }
        }
        //直接把这些代码放入到你的事件类中
        //我想你因该知道怎么注册事件监听器和批量导入包吧?

RaycusMX
没必要用计时器,只需要在开始计时的时候保存时间段到Map,玩家发送聊天时再对比一下当前时间就行了。

第一页 上一页 下一页 最后一页