马上登录/注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 command_god 于 2024-5-17 22:55 编辑
导读 基础内容(一) 一、选择开发工具 我所知道比较好的有两个IDE一个是IntelliJ IDEA和Eclipse,而我呢则是选择IDEA(比较推荐)。
二、下载开服核心和JDK
JDK可以去oracle这里下载,记得注册一个账号。
三、 开始创建项目 我推荐新手去下载一个汉化,IDEA2020.1已经出来了官方的汉化,可以去官网下载。
然后打开idea, 选择新建项目,然后选择Maven,然后next,下面选择保存位置,然后打开下面的折叠页,第一个是包名,就是xxx.xxx.xxx的这样的格式,也就是把域名倒过来,记得全部小写。我的就是org.mallor.sky
然后下面的是项目名称不用管他,下面的是版本不用管。
四、导入服务器核心 创建完项目应该是这样的 然后再你的项目根目录新建一个文件夹,叫做lib(标准的依赖存放位置),接着把你的开服包放进去。
在里面开服,直接再系统自带的文件管理新建就可以 开服务器应该都会吧,不会的话可以看B站视频,或者加我QQ私聊我
我们点击文件,点击项目结构,找到模块
然后点击右边的加,选择jar或者目录,直接选择lib目录下载开服核心就可以。
五、创建一个包 创建包应该很简单了,就是上文提到的xxx.xxx.xxx。
右键main中的java,然后点击新键 这个就是我们所需要的包名,你可以自定义,英文单词,记得小写,然后回车就可以
。
六、新建一个类 我们新建包之后开始创建主类,右键我们的包,然后点击新建Java类,输入我们类的名字不要有中文大小写都可以。
我直接叫他A了。创建完是这样的 七、开始! 我们再我们的类(A)后面输入extends JavaPlugin,extends前面记得空格。
然后再{}里面输入
public void onEnable() {} public void onDisable() {}
然后呢我们再public void onEnable{}里插入
System.out.println("");再""中间就是你想要说的话比如我的就是
System.out.println("插件SKY已经成功启动");
这个的意思是插件SKY已经成功启动,public void onEnable()这个的意思是启动时所要执行的命令,System.out.println这个只要是学过Java的应该都知道,打印某件事,所以这两个连起来就是当插件启动时,插件会说:”插件SKY已经成功启动“
一次类推我们在onDisable里面输入插件已经成功关闭也会在控制台输出。
你可以去试一试。
这时你的全部正确代码 public class A extends JavaPlugin {
@Override
public void onEnable() {
System.out.println("插件SKY已经成功启动");
}
@Override
public void onDisable() {
System.out.println("插件SKY已经成功关闭");
}
|
八、把插件导出 既然我们已经制作了插件了,我们就需要把他导出来,我们点击文件项目结构 然后点击构件,点击+号,然后按照图片操作
我们在mainclass那里添上你的包名加上你的主类,主类就是刚才新建的类。
就是像我这样
org.mallor.sky.A
然后点击确定,然后找到输出目录,因为我们之前已经开过服务器了,他会自动生成一个叫做Plugins的文件夹,这个就是存放插件的
我们把这个输出目录放进这里,这样我们构建完插件就可以直接运行服务器。 插件已经好了,剩下的我们还要给插件做一个身份证。
如果你用解压软件打开插件你会发现里面有一个plugin.yml的文件我们记事本把他打开,里面一般有3个基本变量,一个是name,main,version
name就是插件的名字,main,就是他的主类就是我们当时的org.mallor.sky.A
versoin就是插件的版本,我们直接1.0就可以了。
我们在我们项目的根目录下新建文件, 输入plugin.yml就回车
然后在里面输入三个变量 身份证已经做好了,剩下的就是发给他,不然和没做一样
我们点击文件,点击项目结构,然后打开构建。 然后找到你的plugin.yml文件直接选择回车。
然后再点击包含着项目结构中,把他选择了 九、开始构建 插件做好了,我们就开始构建了。我们可以再菜单栏里看到有一个构建的按钮我们直接点击他,然后点击第一个 我们就慢慢的等待他,构建完,然后我们再打开服务器,耐心的等待他开服。
我们会看到他会说插件已经成功运行
我们再输入pl指令,会看到有你的插件。
如果你的插件没有识别可能是你的插件在导入依赖没有搞好,再就是你的代码也有问题,或者plugin.yml文件没有构建。 基础内容(一)完 基础内容(二) 上一期我们讲到了怎么创建一个插件并打包导出运行这一期我们开始讲解监听器(Listener)的用法 首先创建一个类我们呢先创建一个包,直接在我们上次创建的包右键,然后点击package,然后再原来的包的后面有一个点,然后给他命名。我的包名就叫做a,我的完整的就是org.mallor.sky.a,这次我们写一个关于玩家加入的类,我给他命名PlayerJoin Listener然后我们在public class PlayerJoin后面写上implements Listener,别忘了导入类。
然后输入以下代码
@EventHandler
public void PlayerJoin(PlayerJoinEvent Event){
String player = Event.getPlayer().getName();
Event.setJoinMessage("欢迎"+player+"加入了游戏");
}
public void PlayerJoin这个就是声明类,PlayerJoinEvent Event,就是用Event代替PlayerJoinEvent,String就是字符串类型player,说明player等于监听器(Event),得到玩家,得到玩家的名字,这样就用player代替后面的Event.getPlayer().getName();
Event.setJoinMessage(“欢迎”+player+“加入了游戏”);这个就是监听器发送加入信息:”欢迎玩家加入了游戏“,好了代码写完了。
*原文链接: https://blog.csdn.net/weixin_47206728/article/details/128273897
编译
然后我们开始编译,编译之前我们需要给插件注册,就相当于我们把主类注册在plugin.yml,里面一样。
我们只需要在主类的onEnable方法里,也就是在括号内写上
getServer().getPluginManager().registerEvents(new PlayerJoin(),this);
完整代码
public class A extends JavaPlugin { @Override public void onEnable() { getServer().getPluginManager().registerEvents(new PlayerJoin(),this); System.out.println("插件SKY已经成功启动"); } @Override public void onDisable() { System.out.println("插件SKY已经成功关闭"); } } |
然后就可以编译了。
如果你想要获得更多监听器的你可以去这个网站https://bukkit.windit.net/javadoc/,不会的在下面留言,问我。
好了这期就到这里了,我们下一期讲指令
基础内容(二)完 基础内容(三)
这个可能有点不太理解,所以请认真看。
onCommand()打开我们的idea,然后在主类里写一个onCommand方法下面时代码 @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { return true; } |
注册我们知道监听器主类都需要注册,命令也同样需要,不过这个有点和他们不一样,这个需要在plugin.yml里面, commands: cmd: description: 这是一个命令. |
cmd时你想要的命令,你可以替换成你的,description是对命令的介绍, 开始写命令
回到 onCommand().
首先我们要从sender这获取到他使用的是什么命令.
Command类下的getName()可以直接获取到这条命令的名称.
String cmd = null; cmd = command.getName(); if (cmd.equalsIgnoreCase("cmd")) { sender.sendMessage("Hello World"); } |
在onCommand方法里写这个命令
这个意思时如果输入cmd,那么将会发送Hello World。
这个应该时你的全部代码
@Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { String cmd = null; cmd = command.getName(); if (cmd.equalsIgnoreCase("cmd")) { sender.sendMessage("Hello World"); } return true; |
输入help+插件名字,就可以看到插件的命令。
拓展
1.我们把命令写在主类有点不方便,所以我们要新建一个类。
然后给这个类implements CommandExecutor,
在下面写入我们的代码
public class cmd implements CommandExecutor { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { String cmd = null; cmd = command.getName(); if (cmd.equalsIgnoreCase("cmd")) { sender.sendMessage("Hello World"); } return true; } } |
这是全部代码
然后回到主类注册,记得把主类之前的删除,然后
在onEnable方法中写入
Bukkit.getPluginCommand("cmd").setExecutor(new cmd()); |
2.我们的指令不一定需要cmd,所以还需要玩家。下面我来教大家怎么判断玩家
我们可以用if-----else
只需要加入
if (sender instanceof Player) { sender.sendMessage("Hello World"); //所要执行的内容 }else{ sender.sendMessage("你必须时一个玩家"); //所要执行的内容 } |
基础内容(三)(完) 基础内容(四) 上一期我们讲了指令,这一期我们讲config.yml(配置文件) 创建文件
要想使用config.yml就需要创建文件,我们在项目根目录创建一个txt文本文件,把他重命名为config.yml
然后打开idea,找到这个文件双击,然后在里面输入
name: SKY
author:
Mallor a: 1 b: 2 c: 3 |
这里面的东西都可以改变,比如name可以改成mingzi,author可以改成zuozhe
a b c也可以改变。
导入
我们已经创建了,就需要想plugin.yml一样导入,我们打开项目结构,找到构件,然后点击加号,就像plugin.yml一样导入。
然后回到主类,在onEnable方法里,输入
读与写
在开始之前我给大家几个方法 saveDefaultConfig(); //如果没有config.yml 则导出一个. getConfig().getString("name"); //在配置文件中读取某一项 getConfig().set("",""); //将配置文件中某一项的值改写为另一个值 saveConfig(); //保存配置文件 reloadConfig(); //重载配置文件 |
现在你应该已经明白了一些基本用法,下面我来给大家举个例子 saveDefaultConfig(); getLogger().info(getConfig().getString("name")); getLogger().info(getConfig().getString("author")); getLogger().info(getConfig().getString("a.b.c")); getConfig().set("name","Mallor"); saveConfig(); reloadConfig(); |
测试我们把插件编译成功后,打开服务器会发现自动生成了config.yml文件,然后我们打开里面是我们输入的,我们打开服务器他也会自动读取。
Plugin plugin =org.mallor.sky.A.getPlugin(org.mallor.sky.A.class);//注意Plugin plugin=你的包.你的主类.getPlugin(你的包.你的主类.class); @Override public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { Player player =(Player) commandSender; player.sendMessage(plugin.getConfig().getString("name"));/*这个name是我 在config里面输入的,你也可以自定义。主义getString表示的是String,如果想后面跟bloolean ,你可以改成getBoolean,或者其他的 */ return false; } |
这是我的config
name: '插件名字:SKY' author: '作者:Mallor' a: b: c: '欢迎使用本插件' |
然后还是像指令那样把类写在plugin.yml和主类当中千万不要忘记测试
因为我的name是SKY。所以我输入play就会显示name的数值。如果你的出现乱码就需要改变一下你的编码,可以使用notead++等软件,具体可以百度
所以我们就需要改变一下你的文件的编码把文件的编码改成 ANSI就可以。
他也会自动读取,好了这一期就到这里下期再见。
基础内容(四)(完)基础内容(五) 这次我们来学习制作一个简单的GUI 这是也是最后一期,感谢您的陪伴。
创建一个包 我们和上次一样,在org.mallor.sky右键新建一个包,我给他命名gui
创建类 我们开始创建一个类,在这里我给他命名位GUI。
开始 我们创建类之后,在类的后面输入implements CommandExecutor,他会自动导入类,然后输入下面代码 ———————————————— @Override public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { return false; |
然后创建一个gui,在{}里面输入 Player player =(Player)commandSender; Inventory GUI =Bukkit.createInventory(null,27, ChatColor.YELLOW+"GUI"); player.openInventory(GUI); return false; |
Player player = (Player)commandSender的意思是新建一个player,然后用这个代替Player,而且它等于commandSender中的Player Inventory GUI =Bukkit.createInventory(null,27, ChatColor.YELLOW+“GUI”);这个的意识是新建一个GUI,它等于Bukkit新建一个GUI,GUI的参数呢,等于括号内的,类型等于null,大小等于27个格(在mc中一般有两种[除了自己新建的]一个是27格,一个是54格)。 player.openInventory(GUI);这个就是玩家触发GUI时输入的指令。 注册 GUI注册需要两步,和指令差不多,我们回到主类在onEnable方法中输入 ———————————————— getCommand("GUI").setExecutor(new GUI()); |
然后回到plugin.yml,
我们新建一个指令
输入
拓展现在我们新建了GUI,可是他里面没有东西,而且这个东西玩家可以放入,不过放进去物品就没有了,相当于垃圾箱。所以我们需要放入东西,
ItemStack item = new ItemStack(Material.BED); GUI.setItem(10,item); |
然后我们构建测试 他就生成了64个床,这个床我们是可以拿走的,而且你关闭后,在输入指令还可以拿走。 创建类我们首先创建一个类,就叫做InventoryClick(都可以),然后我们给他导入类,在类的后面加上implements Listener,然后输入下面代码 @EventHandler public void InventoryClick(InventoryClickEvent event){ } |
@EventHandler public void InventoryClick(InventoryClickEvent event){ if (event.getView().getTitle().equalsIgnoreCase(ChatColor.YELLOW+"GUI")); event.setCancelled(true); } |
getServer().getPluginManager().registerEvents(new InventoryClick(),this); |
剩下的一些用指令打开GUI啥的都很简单,大家可以单独问我,或者看看官方文档。
我在这里就不教学了。 到此基础知识的系列就结束了,以后还会继续更新别的系列
-
-
-
-
|