本帖最后由 MinecraftE_D 于 2021-5-5 20:45 编辑
上一帖我们了解了如何设置彩字,这一帖我们来讲解如何添加合成表
同样,我们为了实现这个功能,需要导入三个类
复制代码
接下来我们需要自定义一个方法(这个方法无参数,名称随意)
复制代码注意:这个方法的修饰符为private!
现在开始编写函数体
这里会接触到一种新的数据类型——ItemStack
直接翻译的话,意思是"物品堆 "?(某哥翻译原话)
其实这个数据类型也就是这个意思qwq,它可以保存一大堆物品,就是一个物品堆嘛(某哥翻译也没错)
还有一种我们也要用到——ShapedRecipe
同样,直接翻译意为"配方食谱"????(某哥翻译NB)
咳咳,不聊远了,开始设定配方
首先需要定义一个ItemStack类型的变量并new出一个实例
复制代码这段代码实例化了一个保存了一个钻石矿石的ItemStack类
简单点来讲,就是一个ItemStack里面装了一个钻石矿石
Material又是啥?没错,它和ChatColor类似,都是枚举类,其中包含了Minecraft所有原版方块、物品等
Material.DIAMOND_ORE代表的便是钻石矿石,你可以更改为什么Material.GOLD_ORE呀什么的
然后需要定义一个ShapedRecipe类型的变量并new出实例
复制代码这次的参数有点特殊!
在高版本的BukkitAPI中,Bukkit官方为构造函数ShapedRecipe添加了一个参数:
一个NameSpacedKey类型的参数(真不明白官方的用意)
正好Material提供了一个getKey()的方法,就先偷个懒吧qwq
第二个参数则是前面定义的ItemStack,指合成的结果
下面的写法有些复杂,先上代码qwq
复制代码第一句的意思是设置配方合成的形状,在这里的形状就是
1 1 1
1 2 1
1 1 1
二、三句则是说明'1'和'2'分别代表什么物品
第四句则是向服务器添加配方
最后一步,找到onEnable()这个方法
在里面添上一句:你的自定义配方方法名();
至此,你便完成了配方的创建,赶紧进服务器试一下吧qwq!
最后上个完整代码复制代码
好了,今天的教程到此结束,谢谢你的阅读!
下帖预告:插件开发教程[4] - 添加新指令!
上一帖我们了解了如何设置彩字,这一帖我们来讲解如何添加合成表
同样,我们为了实现这个功能,需要导入三个类
- import org.bukkit.inventory.ShapedRecipe;
- import org.bukkit.inventory.ItemStack
- import org.bukkit.Material
接下来我们需要自定义一个方法(这个方法无参数,名称随意)
- private void CreateRecipe(){
-
- }
现在开始编写函数体
这里会接触到一种新的数据类型——ItemStack
直接翻译的话,意思是"物品堆 "?(某哥翻译原话)
其实这个数据类型也就是这个意思qwq,它可以保存一大堆物品,就是一个物品堆嘛(某哥翻译也没错)
还有一种我们也要用到——ShapedRecipe
同样,直接翻译意为"配方食谱"????(某哥翻译NB)
咳咳,不聊远了,开始设定配方
首先需要定义一个ItemStack类型的变量并new出一个实例
- ItemStack im = new ItemStack(Material.DIAMOND_ORE);
简单点来讲,就是一个ItemStack里面装了一个钻石矿石
Material又是啥?没错,它和ChatColor类似,都是枚举类,其中包含了Minecraft所有原版方块、物品等
Material.DIAMOND_ORE代表的便是钻石矿石,你可以更改为什么Material.GOLD_ORE呀什么的
然后需要定义一个ShapedRecipe类型的变量并new出实例
- ShapedRecipe recipe = new ShapedRecipe(Material.DIAMOND_ORE.getKey(),im);
Parameters:
key - the unique recipe key
result - The item you want the recipe to create.
——BukkitAPI原话
在高版本的BukkitAPI中,Bukkit官方为构造函数ShapedRecipe添加了一个参数:
一个NameSpacedKey类型的参数(真不明白官方的用意)
正好Material提供了一个getKey()的方法,就先偷个懒吧qwq
第二个参数则是前面定义的ItemStack,指合成的结果
下面的写法有些复杂,先上代码qwq
- recipe.shape("111","121","111");
- recipe.setIngredient('1', Material.STONE);
- recipe.setIngredient('2', Material.DIAMOND);
- getServer().addRecipe(recipe);
1 1 1
1 2 1
1 1 1
二、三句则是说明'1'和'2'分别代表什么物品
第四句则是向服务器添加配方
最后一步,找到onEnable()这个方法
在里面添上一句:你的自定义配方方法名();
至此,你便完成了配方的创建,赶紧进服务器试一下吧qwq!
最后上个完整代码
- package plugins.test;
- import org.bukkit.ChatColor;
- import org.bukkit.Material;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerQuitEvent;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.ShapedRecipe;
- import org.bukkit.plugin.java.JavaPlugin;
- public final class Test extends JavaPlugin implements Listener {
- @Override
- public void onEnable() {
- // Plugin startup logic
- getServer().getPluginManager().registerEvents(this,this);
- CreateRecipe();
- }
- @Override
- public void onDisable() {
- // Plugin shutdown logic
- }
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent event){
- event.setJoinMessage(ChatColor.YELLOW + event.getPlayer().getName() + "进入了游戏!");
- }
- @EventHandler
- public void inPlayerQuit(PlayerQuitEvent event){
- event.setQuitMessage(ChatColor.YELLOW + event.getPlayer().getName() + "退出了游戏!");
- }
- private void CreateRecipe(){
- ItemStack im = new ItemStack(Material.DIAMOND_ORE);
- ShapedRecipe recipe = new ShapedRecipe(Material.DIAMOND_ORE.getKey(),im);
- recipe.shape("111","121","111");
- recipe.setIngredient('1', Material.STONE);
- recipe.setIngredient('2', Material.DIAMOND);
- getServer().addRecipe(recipe);
- }
- }
好了,今天的教程到此结束,谢谢你的阅读!
下帖预告:插件开发教程[4] - 添加新指令!
NameSpacedKey是游戏内的ID,指令用的
“ShapedRecipe”是“有序合成配方”
“ShapedRecipe”是“有序合成配方”
洞穴夜莺 发表于 2021-5-9 09:41
NameSpacedKey是游戏内的ID,指令用的
“ShapedRecipe”是“有序合成配方”
我知道,原文中我是用谷歌翻译的,为了增加沙雕效果而已qwq
洞穴夜莺 发表于 2021-5-9 09:41
NameSpacedKey是游戏内的ID,指令用的
“ShapedRecipe”是“有序合成配方”
NameSpacedKey是我确实没懂官方为啥要添加,我觉得是真的没用
还好吧,这不都是在为我的世界做贡献?
本帖最后由 洞穴夜莺 于 2021-5-14 21:24 编辑
游戏内使用指令授予/剥夺配方要用到
以及可以声明相同id的配方来覆盖别人的配方
MinecraftE_D 发表于 2021-5-9 19:07
NameSpacedKey是我确实没懂官方为啥要添加,我觉得是真的没用
游戏内使用指令授予/剥夺配方要用到
以及可以声明相同id的配方来覆盖别人的配方
想问下大佬,附魔书的合成怎么才能使他加上附魔效果,能够让别的物品打上?
想问下大佬,附魔书的合成怎么才能使他加上附魔效果,能够让别的物品打上?
- D:\develop\MC plugin\src\main\java\surikkusu\test\Test.java:42:68
- java: 找不到符号
- 符号: 方法 getkey()
- 位置: 类型为org.bukkit.Material的变量 DIAMOND_ORE