Minecraft(我的世界)中文论坛

标题: ---===从零基础开始,到精通插件===---#6

作者: berry64    时间: 2015-1-21 19:25
标题: ---===从零基础开始,到精通插件===---#6
本帖最后由 berry64 于 2015-1-21 19:31 编辑

回到目录

--------------------------------------------------------------------------------------------------------------------
第六章:了解EventHandler和基本Config
潜水了好久,我终于回来了,不是挺好么
期末考试复习中,复习完了发的这个帖子{:10_544:}
发句牢骚:
开始解说EventHandler:
EventHandler是什么呢?他是一个很好用的Bukkit加入的玩家测试方法(我擦,不会解释了)就是说玩家干了什么会被发送到EventHandler下的东西里,如果有设置的话。
今天呢我们做一个简单的玩家加入游戏EventHandler练习。之前我没讲过,不过写所有程序必须的步骤:
1)构思
2)给自己画张图
3)开始编辑
这里我的构思已经好了,我准备用上点Config设置
放上渣图:

图挂了的话吱一声, 相信你们也看懂了这个是啥吧
这是后我们用到的是PlayerJoinEvent (详情请去 jd.bukkit.org/apidocs/ 查看)
先创一个插件,详情这个有讲
然后呢,在下面加一个
  1. @EventHandler
复制代码
这就是叫起来EventHandler啦,但是没有给它可以用的东西怎么办?
我们赶紧写一个叫onPlayerJoin的方法,在@EventHandler下面加入:
  1. public void onPlayerJoin(PlayerJoinEvent evt){
  2. }
复制代码
这样,括号前面的onPlayerJoin你可以改名字,括号里面告诉EventHandler是什么样的东西
这里我们创建玩家,所以说在大括号里面加入:
  1. Player p = evt.getPlayer()
复制代码
上面呢,就是创建一个Player类型的盒子,里面要存event里面找到的玩家
果断输入";"结束句子
然后呢,我们开始给玩家发东西,这里我们会用到p.sendMessage()
这个就很简单啦,括号里面加上双引号打上消息就完事啦,比如:
p.sendMessage("欢迎你哈")
记得这个是针对玩家的, 你输入了String类型的文字,String还可以用一部分代数,一部分设定的文字打,用+号连接起来, 这里我们用bukkit.broadcastMessage()发给全服
所以我们用:
  1. bukkit.broadcastMessage("大家欢迎玩家:" + p.getName()+"加入服务器!");
复制代码

为什么我用了p.getName()呢?应为直接用p是一个玩家类型的盒子,String不能兼容,当然不行了,用了p.getName()就能让插件自动获取玩家的名字,以String来发布
这里就基本完成啦,现在要注册一个EventHandler, 千万不能忘, 不然没效果的
所以我们创建一个onEnable()
上一章有讲过, 所以现在我们在大括号里面让他在启动插件的时候注册一个Event
很简单,就输入
bukkit.getPluginManager().registerEvents(this, this)
就完成了,这里bukkit代表服务器,getPluginManager()是获取插件
管理器,然后registerEvents是注册
保存,导出就可以啦

不对啊,不是还有个config的吗?
对啊,是有,现在讲
我们用上一章讲的创建plugin.yml的方法在同样地方创建一个config.yml
这样标准配置文件就完事了。现在我们编辑下标准的,只要加一行就行了
  1. PlayerJoinMessage:
复制代码

别忘了冒号后面的空格哦......
现在我们回到java文件,在onEnable的时候让他创建一个Config
直接加入this.saveDefaultConfig();
这样就可以了, 现在还没有自动读取系统,也就是说每次重启就会刷新config, 这个没事=w=默认配置改一下就可以了,要让他每次重启还看看有没有config很麻烦,现在不说。
这里我们不是有bukkit.broadcastMessage()吗?我们把括号里面的删掉,双引号也不留,全部统统改成this.getConfig().getString("PlayerJoinMessage")
这样一个基本的Config读取东西就完成了,这是多么的好
最后求你们一句:
读完吱一声,告诉我一下看了什么和评论,如果条件允许的话给点人气我就知足了,给人气自己也不丢什么,不想给人气清至少回复个帖子让我知道发生了什么。

--------------------------------------------------------------------------------------------------------------------
回到目录

[groupid=844]SmoothCraft Work[/groupid]
作者: zwh007    时间: 2015-1-21 19:32
虽然我是插件渣渣。。。
但是看到LZ写这么认真一定得给个人气。
作者: Sakakibara    时间: 2015-1-21 19:33
前排留名=w=养肥了再看,感觉好棒!楼楼加油!
作者: 1052259852    时间: 2015-1-21 19:33
火钳刘明
作者: 猥★琐★菌    时间: 2015-1-21 19:42
火钳刘明


作者: xiaope    时间: 2015-1-21 19:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 修改器很好玩    时间: 2015-1-21 19:56
不是要在包含事件中的类implement什么的吗?
作者: SAO_BAO    时间: 2015-1-21 19:58
以我的智商果然不适合做这个
作者: 修改器很好玩    时间: 2015-1-21 20:09
LZ你好,我想问一个问题。我在config文件中设置了PlayerJoinMessage,那么如何添加玩家的名字?因为player.getname在事件的方法里面,如何在config中调取?
作者: 215635430    时间: 2015-1-21 20:19
表示从不编插件... 不过还是要顶一下~
作者: berry64    时间: 2015-1-21 20:42
修改器很好玩 发表于 2015-1-21 20:09
LZ你好,我想问一个问题。我在config文件中设置了PlayerJoinMessage,那么如何添加玩家的名字?因为player. ...

playerJoinMessage只是玩家进入游戏的时候给的自定义话语而已,没和插件里的有联系
要从config里面调取你可以试试this.getConfig().getString()
作者: White7829    时间: 2015-1-25 23:48
继续努力,造福各位腐竹
作者: 桃渊林    时间: 2015-3-29 07:20
@berry64 问问怎么读取config(java里什么东西可以判断config.yml是否存在,没有就用saveDefaultConfig(),有就getConfig()?)
作者: berry64    时间: 2015-3-29 09:36
hcrgm1 发表于 2015-3-29 07:20
@berry64 问问怎么读取config(java里什么东西可以判断config.yml是否存在,没有就用saveDefaultConfig(), ...

if((plugin.getDatafolder + File.seperator + "config.yml").exists){
         //如果存在干嘛...
} else {
         // 如果不存在干嘛....
}
作者: 1527802264    时间: 2015-3-31 00:00
很不错哦,可惜我只找到0、6、73个教程是不是要点回到目录
作者: 1411690572    时间: 2015-5-4 20:03
如何当玩家加入时,判断某文件里有没有他的名字,没有就创建1个
作者: 桃渊林    时间: 2015-5-5 13:00
貌似掉了一个大括号
作者: antecer    时间: 2015-6-13 16:31
你貌似没有讲解,config.yml怎么才能支持中文,还有load config会提示Default system encoding may have misread config.yml form jar怎么办?
作者: y729320011    时间: 2015-6-28 22:03
完完全全的填鸭教学=w=~
作者: berry64    时间: 2015-6-29 08:42
1411690572 发表于 2015-5-4 20:03
如何当玩家加入时,判断某文件里有没有他的名字,没有就创建1个

回复的有点慢对不起
你可以这样:
public void onPlayerJoin(PlayerJoinEvent evt){
    Player p = evt.getPlayer();
    String playername = p.getName().toString();
    File f = new File(这里填你要的文件名, 比如说this.getDataFolder+"/players"+"/"+name+".yml",  下面解释);
    if(f.exists()){
        //要是文件存在的话干什么
    } else {
       //要是文件不存在干什么
    }
}
上面的File 解释: 这里的必须要填文件夹全部目录, 比如说你要存到c盘的asdf文件夹里面你就需要输入C:\asdf\文件名.后缀 this.getDataFolder是让插件自己获取他的文件夹, name 是玩家的名字, .yml 是后缀
这里要是插件名字是mmjj 然后玩家名字是kk那么就会是这样
new File("服务器目录/plugins/mmjj/players/kk.yml")
作者: berry64    时间: 2015-6-29 08:43
1527802264 发表于 2015-3-31 00:00
很不错哦,可惜我只找到0、6、73个教程是不是要点回到目录

是的....
作者: EsHappyさん    时间: 2015-7-25 14:03
写的很好!
作者: kosgt    时间: 2015-7-26 15:08
LZ 太NB 了顶顶顶顶顶顶顶
作者: _信念_    时间: 2015-8-22 03:30
Bukkit.getPluginManager().registerEvents(this, this);
一加入这句话就出错,这是什么原因?
作者: berry64    时间: 2015-8-22 12:17
_信念_ 发表于 2015-8-22 03:30
Bukkit.getPluginManager().registerEvents(this, this);
一加入这句话就出错,这是什么原因? ...

是不是你没导入
作者: zxmzxm1125    时间: 2015-9-1 18:49
可以的,但是有些地方还是第一次看不懂。比如:config.yml那里
作者: LK520    时间: 2015-9-4 18:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 494308843    时间: 2015-9-14 14:12
{:10_512:}还能更详细
刚准备学java的我
表示。。好多都看不懂
当时导入核心jar都导入了半天

作者: lingluoxiao    时间: 2015-9-15 10:51
理解了,一级棒。
作者: ybb135788    时间: 2015-9-17 13:27
吱————
作者: ttxzt    时间: 2016-2-8 20:56
本帖最后由 ttxzt 于 2016-2-8 21:06 编辑

JAVA小白在此跪拜{:10_512:}
作者: kjkj2173135    时间: 2016-2-16 20:53
JAR 创建失败。请参阅“详细信息”以获取更多信息。
  资源与文件系统不同步:"/MyFirstPlugin/plugin.yml"。
作者: Ray009    时间: 2016-2-21 13:12
666666,顶!!!
作者: 烧饼大哥    时间: 2016-3-12 22:10
我就想问你不把写好的发过来,你自己看看你自己写的教程能看懂吗?bukkit.getPluginManager().registerEvents(this, this)
这两个this this到底是什么" ."这种常用符号的意义也没有
作者: cten    时间: 2016-5-18 16:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: zvw一VE    时间: 2016-6-15 13:32
这是后我们用到的是PlayerJoinEvent (详情请去 jd.bukkit.org/apidocs/ 查看)
先创一个插件,详情这个有讲
然后呢,在下面加一个
@EventHandler

在哪个下面?
作者: zvw一VE    时间: 2016-6-15 13:48
这里就基本完成啦,现在要注册一个EventHandler, 千万不能忘, 不然没效果的 所以我们创建一个onEnable() 上一章有讲过, 所以现在我们在大括号里面让他在启动插件的时候注册一个Event 很简单,就输入 bukkit.getPluginManager().registerEvents(this, this) 就完成了,这里bukkit代表服务器,getPluginManager()是获取插件 管理器,然后registerEvents是注册 保存,导出就可以啦                          不懂格式。。。加个源码吧    是不是一般冒号后面都要加空格
作者: ~KU~    时间: 2016-7-1 14:49
OnEnable那裏不是太懂……但是亂打亂撞做出來了Orz
作者: 茉丶梨SUMA    时间: 2016-7-27 13:57
楼主啊,你为什么不在每章节的最后
贴上一个成品的链接?
这样可以方便看不懂的小白对照着来啊
比如我。。前面几章看懂了,看的这里一脸懵逼
作者: lwaix    时间: 2016-8-7 08:09
那貌似叫监听,好像是叫这个
作者: BOY36    时间: 2016-8-7 15:04
加油加油
作者: 928641007    时间: 2016-8-23 13:14
并没有看懂,,能不能把写好的代码给我们看看?
作者: XiaoMao#205    时间: 2016-8-24 11:02
绝对良心!
作者: XiaoMao#205    时间: 2016-8-24 11:02
我这个JS渣也看懂了
作者: 天马司空    时间: 2016-8-28 09:31
茉丶梨SUMA 发表于 2016-7-27 13:57
楼主啊,你为什么不在每章节的最后
贴上一个成品的链接?
这样可以方便看不懂的小白对照着来啊

上全部代码就没有意义了...
实在看不懂可以多翻几个教程贴
作者: 123飞    时间: 2016-10-14 22:14
看的时候有些英语单词不认识影响学习吗比如evt
作者: Laver    时间: 2016-11-10 11:10
楼主如何判断配置里是否存在某个字符串
比如我有一个配置文件如下

config:
  name: aa
  permission: ss.use
  world:
    - world
复制代码
我想判断下这个文件里有没有 permission 这一行
让判断的结果为boolean类型的一个值 如何判断 求大大解答

作者: berry64    时间: 2016-11-20 19:35
Laver 发表于 2016-11-10 11:10
楼主如何判断配置里是否存在某个字符串
比如我有一个配置文件如下

bukkit当找不到值的时候会返回null,这里你可以这样:
  1. if(config.get(config.permission) == null){
  2.      //没有找到节点的代码
复制代码

作者: ILUVLS    时间: 2016-12-25 14:02
说好的零基础呢。。。
从第五章开始就什么都不知道了
作者: 辣条未至    时间: 2017-8-12 14:15
听不懂 求楼主解释
作者: Godpower    时间: 2017-8-13 11:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: 芒果酱i    时间: 2017-8-24 14:00
LZ 话说在下面加上@EventHandler 下面指的是哪里?怎么加?
作者: 晴空为你    时间: 2017-8-25 20:35
厉害,顶一个
作者: xiaonaoL    时间: 2017-9-3 23:38
666666666666
作者: 黑骑鸣佐    时间: 2017-11-4 00:20
哇这贴真的很不错!学到了,加油!!
作者: xuan1586849044    时间: 2017-11-17 23:16
跟着大佬学插件系列
作者: Drunker    时间: 2018-1-11 14:01
刚开始学习Java的萌新看见这个表示一脸蒙蔽
作者: n1109964492    时间: 2018-1-28 10:33
楼主,这个“@EventHandler”在插件下面加是什么意思呀
作者: Star小铭    时间: 2018-2-28 11:05
难度瞬间提高了啊= = 看不懂了
作者: xygu    时间: 2018-3-5 08:03
有点蒙蒙的感觉
作者: baizhi_D    时间: 2018-4-21 21:12
填的bukkit全都提示要B大写.................作者你是没用心还是习惯小写了
作者: Spartan859    时间: 2018-6-18 14:30
修改器很好玩 发表于 2015-1-21 20:09
LZ你好,我想问一个问题。我在config文件中设置了PlayerJoinMessage,那么如何添加玩家的名字?因为player. ...

Bukkit.broadcastMessage(this.getConfig().getString("PlayerJoinMessage1")+p.getName()+this.getConfig().getString("PlayerJoinMessage2"));
两个message,一个在玩家名字前,一个在玩家名字后
比如PlayerJoinMessage1:欢迎
PlayerJoinMessage2:玩家加入游戏!
作者: luo2005    时间: 2018-7-18 13:11
看着一堆叉我懵了= =
作者: 631017918    时间: 2018-7-19 10:50
神乎其技,不服不行!
作者: Suibiantwo    时间: 2018-8-1 20:58
LZ你好!我现在打开jd.bukkit.org/apidocs/显示404咋办
作者: waidao    时间: 2018-9-8 20:14
哈哈,学会了上一章,看这一章一脸懵逼
作者: 3326109006    时间: 2019-1-1 11:24
看不太懂啊。OnEnable前一章没讲鸭
作者: kuikui851    时间: 2019-1-29 19:42
从这开始看不懂了
作者: 1257241185    时间: 2019-1-30 11:45
bukkit.getPluginManager().registerEvents(this, this) B没有大写啊
作者: ctnioub    时间: 2019-1-30 17:04
很好的教程,必须顶!
作者: 911010331    时间: 2019-1-31 06:40
顶...............
作者: 我是叶辉    时间: 2019-3-10 19:27
java从入门到转行
作者: qaz2296777814    时间: 2019-3-23 21:52
public class MyFirstPlugin extends JavaPlugin implements Listener

这是类名吗,可以加空格?还是继承关系看着不像呀
作者: 宝哥靓    时间: 2019-3-25 00:49
支持~~~~~~
作者: 猿汐    时间: 2019-4-5 13:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: mohuang521    时间: 2019-4-24 12:03
onEnable里面如何注册啊?
作者: mohuang521    时间: 2019-4-26 08:59
是我的错觉嘛= =!
作者: NGK3    时间: 2019-4-26 11:21
本帖最后由 NGK3 于 2019-4-26 11:22 编辑
mohuang521 发表于 2019-4-24 12:03
onEnable里面如何注册啊?

注册什么?啊?EventHandler么?
好好看教程呀
bukkit.getPluginManager().registerEvents(this, this)

作者: heatWater    时间: 2019-4-26 14:00
神乎其技,不服不行!
作者: mohuang521    时间: 2019-4-26 14:32
NGK3 发表于 2019-4-26 11:21
注册什么?啊?EventHandler么?
好好看教程呀
bukkit.getPluginManager().registerEvents(this, this)[/b ...

这个我知道了,刚发完问题突然发现瞬间明白了= =!
作者: 筱柒儿    时间: 2019-5-19 07:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: lucksheep    时间: 2019-6-25 19:37
加油加油 贼厉害
作者: f1a2f1a    时间: 2019-6-29 00:14
继续打卡深入学习
作者: f1a2f1a    时间: 2019-6-29 07:48
持续打卡学习
作者: 随风成雨    时间: 2019-7-3 14:31
请问一下 教程中所写的注册插件onEnable()这个是写在哪里?
作者: shi4337744    时间: 2019-7-5 06:09
看着大佬分享技术,本人表示一脸懵QWQ
作者: qq1937625541    时间: 2019-8-15 11:39
然后呢,在下面加一个 @EventHandler (这个下面指的是哪个下面。。。)
作者: qq1937625541    时间: 2019-8-15 12:20
从bukkit.broadcastMessage("大家欢迎玩家:" + p.getName()+"加入服务器!");加入这个东西开始,直接不会了
作者: Zi_Gao    时间: 2019-9-11 16:56
这个很难看懂啊。一小段一小段展示,最好啥也不知道。是否在写完一句或展示全部或在最或吧几个文件全部展示一下
作者: 闪光皮皮瓜    时间: 2019-10-13 17:27
本帖最后由 闪光皮皮瓜 于 2019-10-13 17:29 编辑
  1. <blockquote><span style="font-size: 14px;">@EventHandler</span>
复制代码
  1. PlayerJoinMessage1: 大家欢迎玩家:
  2. PlayerJoinMessage2: 加入服务器!
复制代码

我可能不太聪明,我的java基础全学完了,是这个样子吗
作者: 闪光皮皮瓜    时间: 2019-10-13 17:30
  1. @EventHandler
  2.         public void onPlayerJoin(PlayerJoinEvent evt) {
  3.                         Player p = evt.getPlayer();
  4.                         Bukkit.broadcastMessage(this.getConfig().getString("PlayerJoinMessage1")+p.getName()+this.getConfig().getString("PlayerJoinMessage2"));
  5.                         onEnable();
  6.                         Bukkit.getPluginManager().registerEvents(this,this);
  7.                         this.saveDefaultConfig();
  8.         }
复制代码
  1. PlayerJoinMessage1: 大家欢迎玩家:
  2. PlayerJoinMessage2: 加入服务器!
复制代码

我可能不太聪明,我的java基础全学完了,是这个样子吗
作者: berry64    时间: 2019-11-15 04:44
闪光皮皮瓜 发表于 2019-10-13 17:30
我可能不太聪明,我的java基础全学完了,是这个样子吗

差不多很接近了,应该这样:

  1. public void onEnable(){
  2.     Bukkit.getPluginManager().registerEvents(this,this);
  3.     this.reloadConfig();
  4. }
  5. [url=home.php?mod=space&uid=2017888]@EventHandler[/url]        public void onPlayerJoin(PlayerJoinEvent evt) {
  6.                         Player p = evt.getPlayer();
  7. Bukkit.broadcastMessage(this.getConfig().getString("PlayerJoinMessage1")+p.getName()+this.getConfig().getString("PlayerJoinMessage2"));                                }
复制代码

作者: 小狐狸FM    时间: 2019-11-25 21:31
感觉排版有点乱
作者: 某晨路过    时间: 2019-12-3 14:39
MCBBS有你更精彩~
作者: l小魂l    时间: 2020-1-4 00:43
哇  你这教程导包都不说的吗?
作者: 3100026750    时间: 2020-1-11 17:38
学到了!!
作者: s.acer    时间: 2020-1-26 21:42
谢谢大佬给的精华帖子 MCbbs有你更精彩
作者: 2723219233    时间: 2020-2-11 08:06
en.................................看不懂
作者: Today一MC    时间: 2020-2-12 07:33
很详细,再来多点
作者: 2697552240    时间: 2020-2-15 00:27
原来如此,感觉好简单