tiger999
本帖最后由 tiger999 于 2016-8-15 12:35 编辑

没想到我居然刚写完,第二篇就继续写了。。。大家不必感到奇怪,我是一个小学生(请大家不要误解,也不要吐槽,我是一个纯洁的小学生)
上节课我布置了作业^_^,那么无论看了答案的童鞋是发现自己对了还是错了,都给自己鼓掌,当然,除了那些连作业都没有做的人-_-
答案是

OK,我们开始讲监听器,监听器这鬼东西,真是不好说
说监听之前,得先说说什么是事件
什么事件呢?
事件的意思大家可能都是发生了什么新闻之类的啊
插件里面的事件也是新闻,当然,不是大事,而是微不足道的小事,小到玩家移动,水流动,玩家捡起东西......
那么,监听器就是去监听,并会把这个事件返回给插件,插件就根据这些信息进行各种各样的事情
我们首先先做一个监听器,不监听,怎么可以呢?
我们首先先创建一个空的插件(详细)
这次和以前有一点不同,我们首先把命令执行器删掉
然后呢,我们把
public class xxxxx extends JavaPlugin
这里后面加上一个implements Listener
OK,现在添加了一个监听器,但是还不够,我们添加了是添加了,但是还得注册一下,我们上节课讲了onEnable(),所以呢,我们就在onEnable里面来注册
我们在里面加上
Bukkit.getPluginManager().registerEvents(this, this);
YEAH,一个可以用的监听器就制作好了,可是问题是我们还没有给他任务,他都不知道是干什么,怎么用(观众:小编!)
呵呵,这里我们在里面加一个
@EventHandler
@EventHandler表明下面{}里面的东西是监听的东西
我们写了以后,在@EventHandler下面写
public void xxx(监听器种类 evt){
}
比如说
public void PlayerJoin(PlayerJoinEvent evt){
}

OK,这个就是当玩家登陆时触发的监听器
当然,他监听到了,会返回信息给你,准确来说,是他有许多的method
比如说,我上面写的那个,他就有一个getPlayer()
那么我要获取那个玩家就是
Player player=evt.getPlayer()
这样子,evt.是什么意思呢?evt.大家可以理解为,监听器创建了一个盒子,就是evt盒子,里面有许多的信息,他就在evt这个盒子里面找东西
监听器也有许多不同的种类,比如说
public void PlayerMove(PlayerMoveEvent evt){
}

这个就是当一个玩家移动时候触发的,他的PlayerMoveEvent是这样的
PlayerMoveEvent(Player player, Location from, Location to)
那么,他就会给你返回Player(玩家) from(从哪里) to(到哪里)
他的Method就有
getPlayer()
getTo()
getFrom()
OK,我们做到了这些,我们就可以用这些来做一个东西
比如说,当一个玩家登陆的时候他就显示欢迎(玩家名)
@EventHandler
public void onPlayerJoin(PlayerJoinEvent evt){
  Player p=evt.getPlayer();
  Bukkit.broadcastMessage("欢迎玩家"+p.getName());
}

OK,这里有一个Bukkit.broadcastMessage()就是给全服发信息
就这么的简单!
我们还可以再加一个
p.sendMessage("欢迎你!");
这样子,这个sendMessage()就是给某个玩家发东西,这里我就是给p发东西,p就是登陆的玩家!
大家可能还有许多疑问,有哪些其他种类的呢?大家可以去看API
API
这个东西里面是整个插件核心里面的东西里面的所有东西几乎都有!
大家可以找到event,在里面找你要的东西
作业:
结合上次作业和API,做一个玩家加入游戏的时候,读取config并显示出去
回到索引贴




2021.12 数据,可能有更多内容没想到我居然刚写完,第二篇就继续写了。。。大家不必感到奇怪,我是一个小学生(请大家不要误解,也不要吐槽,我是一个纯洁的小学生)
上节课我布置了作业^_^,那么无论看了答案的童鞋是发现自己对了还是错了,都给自己鼓掌,当然,除了那些连作业都没有做的人-_-
答案是


//首先说一下,我的答案是实现的一种,大家的答案假如和我的方式不一样的话,可以在下楼回复哦!
//还有一个就是,我读取的message路径里的东西
package com.github.tiger;
import java.io.File;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
public class MyFirstPlugin extends JavaPlugin{
public void onEnable() {
    if(!getDataFolder().exists()) {
   getDataFolder().mkdir();
    }
    File file=new File(getDataFolder(),"config.yml");
    if (!(file.exists())) {saveDefaultConfig();}
    reloadConfig();
    getLogger().info("启用完毕!");
}
public void onDisable(){

}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){if (cmd.getName().equalsIgnoreCase("tiger")){
if (args[0].equalsIgnoreCase("msg")){
   String msg=getConfig().getString("message");
   sender.sendMessage(msg);
}
return true;
}
return false;
}
}
Config文件里面的话就是
message:


你对了吗?


OK,我们开始讲监听器,监听器这鬼东西,真是不好说
说监听之前,得先说说什么是事件
什么事件呢?
事件的意思大家可能都是发生了什么新闻之类的啊
插件里面的事件也是新闻,当然,不是大事,而是微不足道的小事,小到玩家移动,水流动,玩家捡起东西......
那么,监听器就是去监听,并会把这个事件返回给插件,插件就根据这些信息进行各种各样的事情
我们首先先做一个监听器,不监听,怎么可以呢?
我们首先先创建一个空的插件(详细)
这次和以前有一点不同,我们首先把命令执行器删掉
然后呢,我们把
public class xxxxx extends JavaPlugin
这里后面加上一个implements Listener
OK,现在添加了一个监听器,但是还不够,我们添加了是添加了,但是还得注册一下,我们上节课讲了onEnable(),所以呢,我们就在onEnable里面来注册
我们在里面加上
Bukkit.getPluginManager().registerEvents(this, this);
YEAH,一个可以用的监听器就制作好了,可是问题是我们还没有给他任务,他都不知道是干什么,怎么用(观众:小编!)
呵呵,这里我们在里面加一个
@EventHandler
@EventHandler表明下面{}里面的东西是监听的东西
我们写了以后,在@EventHandler下面写
public void xxx(监听器种类 evt){
}
比如说
public void PlayerJoin(PlayerJoinEvent evt){
}
OK,这个就是当玩家登陆时触发的监听器
当然,他监听到了,会返回信息给你,准确来说,是他有许多的method
比如说,我上面写的那个,他就有一个getPlayer()
那么我要获取那个玩家就是
Player player=evt.getPlayer()
这样子,evt.是什么意思呢?evt.大家可以理解为,监听器创建了一个盒子,就是evt盒子,里面有许多的信息,他就在evt这个盒子里面找东西
监听器也有许多不同的种类,比如说
public void PlayerMove(PlayerMoveEvent evt){
}
这个就是当一个玩家移动时候触发的,他的PlayerMoveEvent是这样的
PlayerMoveEvent(Player player, Location from, Location to)
那么,他就会给你返回Player(玩家) from(从哪里) to(到哪里)
他的Method就有
getPlayer()
getTo()
getFrom()
OK,我们做到了这些,我们就可以用这些来做一个东西
比如说,当一个玩家登陆的时候他就显示欢迎(玩家名)
@EventHandler
public void onPlayerJoin(PlayerJoinEvent evt){
Player p=evt.getPlayer();
Bukkit.broadcastMessage("欢迎玩家"+p.getName());
}
OK,这里有一个Bukkit.broadcastMessage()就是给全服发信息
就这么的简单!
我们还可以再加一个
p.sendMessage("欢迎你!");
这样子,这个sendMessage()就是给某个玩家发东西,这里我就是给p发东西,p就是登陆的玩家!
大家可能还有许多疑问,有哪些其他种类的呢?大家可以去看API
API
这个东西里面是整个插件核心里面的东西里面的所有东西几乎都有!
大家可以找到event,在里面找你要的东西
作业:
结合上次作业和API,做一个玩家加入游戏的时候,读取config并显示出去
回到索引贴



RecursiveG
本帖最后由 RecursiveG 于 2015-12-23 23:18 编辑

教程贴要求正确使用[code]标记包围代码。请楼主修改

tiger999
RecursiveG 发表于 2015-12-23 23:15
教程贴要求正确使用[code]标记包围代码。请楼主修改

不是我不想用,是每次一用code
他就会出现成堆成堆的乱码{:10_530:}

爱杂食的圳
tiger999 发表于 2015-12-24 22:01
不是我不想用,是每次一用code
他就会出现成堆成堆的乱码

tiger999大大,您可以尝试使用World文档,然后截图。
使用图床上传,这样效果会比较好。【图床是有免费的】

tiger999
爱杂食的圳 发表于 2016-1-2 09:48
tiger999大大,您可以尝试使用World文档,然后截图。
使用图床上传,这样效果会比较好。【图床是有免费的 ...

嗯,好的!

抑制不住的
顶楼主,长知识了,原来还有这个玩意

tiger999
抑制不住的 发表于 2016-1-3 13:16
顶楼主,长知识了,原来还有这个玩意

谢谢你的支持!

抑制不住的
tiger999 发表于 2016-1-3 20:25
谢谢你的支持!

不用谢~!应该的

萌萌的包子
API怎么查看o(╯□╰)o

tiger999
包淞中 发表于 2016-1-5 23:30
API怎么查看o(╯□╰)o

我会专门写一篇的!

萌萌的包子
tiger999 发表于 2016-1-6 20:08
我会专门写一篇的!

谢谢啦,因为不会查看API很多方法都不会用o(╯□╰)o