public class GiveItem implements CommandExecutor {
@Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
if (commandSender instanceof Player player) {
// Create a diamond hoe that will become our item
ItemStack customItem = new ItemStack(Material.DIAMOND_HOE);
// Item meta allows for modifying its data
Damageable itemMeta = (Damageable) customItem.getItemMeta();
// Set damage to 1 or like how we did in the json except the actual number
// Why can't they do it this way in the json?
itemMeta.setDamage(1);
// Make it always stay the same durability
itemMeta.setUnbreakable(true);
// Use the following line to remove the extra lore we don't need
itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE);
// Name it whatever you want
itemMeta.setDisplayName("My Custom Item");
customItem.setItemMeta(itemMeta);
// Add item to player's inventory
player.getInventory().addItem(customItem);
}
return true;
}
}
name: YourPlugin
version: '${version}' # Should be '${project.version}' for Maven
main: me.myname.yourplugin.YourPlugin
api-version: '1.20'
commands:
giveitem:
description:
Give a custom item
1条答案
按热度按时间fbcarpbf1#
定制模型
背景
你绝对可以做到这一点。自Minecraft 1.9版本以来,Mojang引入了基于耐久性为物品纹理的功能。令人兴奋的是,它允许几乎无限的自定义模型,而不会取代现有的模型!是的,即使你在生存和损害它,所以确切的耐用性,你设置的自定义模型,它仍然是分离的。这是因为你可以设置物品不被损坏,但仍然有一定的耐久值。多么狡猾!唯一的问题是,如果你正在为1.8开发(通常为1.8最新的服务器),那么你可以使用任何这些。
这是如何工作的,例如,钻石锄头的最大耐久性为1561。这意味着您可以通过使用钻石锄头拥有1560种不同的自定义模型!它是1560而不是1561,因为1561/1561将是完整的耐久性或只是普通的钻石锄头。
创建基础资源包
我从Blockbench开始。要导出模型,是
File
->Export
->Export Block/Item Model
。这将把它导出为JSON文件。当你导出模型时,不要将项目命名为diamond_hoe
或任何你将在model id
下使用的项目。实际上,它将被称为什么。我将在下一步中向你展示为什么。你甚至可以添加一个如果你愿意的话,可以使用另一个命名空间,但是我们只使用Minecraft
命名空间。要导出纹理,右键单击它并按Save As
。我们将制作一个基本的资源包。您可以随意调用资源包文件夹。将JSON放入
<your resource pack folder>
->assets
->minecraft
->models
->item
。将纹理放入<your resource pack folder>
->assets
->minecraft
->textures
->item
。在资源包文件夹中,你还必须有一个pack.mcmeta文件和一个pack.png文件。你很可能已经熟悉了。自定义模型魔术
在你制作了一个基本的资源包之后,是时候为diamond hoe创建模型了,它将指向你的模型。这就是为什么你在上一步中将它命名为实际物品。
diamond_hoe.json
应该看起来像这样:字符串
predicate
修改器是告诉游戏什么时候应该显示不同的模型。This tool可以为您生成JSON。伤害值是您希望它在总耐久度上使用的任何伤害(例如,一个耐久度将是1/1561,等于0.000640614990391)。之后,只有一个自定义项目的布局应该看起来像这样:
型
同样,你可以用不同的方式来布局它。你可以在另一个名称空间中放置你的自定义内容。这就是我所做的。
要添加多个项目(例如三个以上的项目),请修改您的
diamond_hoe.json
,如下所示:型
Bukkit/Spigot插件
现在,在所有这些之后。是时候使用API了。是的,Bukkit API是你需要的。Spigot API包括Bukkit API,所以你应该使用Spigot API。如果你还没有使用它,请改用它。没有人再使用Bukkit服务器本身了。我假设你运行的是Spigot/Paper服务器。我假设你也使用最新的1.20.4版本。
听起来你对Spigot插件还很陌生,所以我们将从头开始制作一个插件。下面是Spigot插件的基本布局。你应该已经熟悉Java项目的基本布局,但下面是这个项目最终应该看起来的样子:
型
使用您最喜欢的Java IDE(最好是IntelliJ而不是Eclipse或其他任何东西)来创建Java项目,但如果您有IntelliJ,只需安装
Minecraft Development
插件并创建Minecraft项目。它会为您创建plugin.yml
和构建脚本。您可以使用任何您想要的构建系统。我喜欢Gradle,但我会向您展示两者的依赖关系应该是什么样子。Gradle:
型
梅文:
型
现在,你的主类应该看起来像这样:
型
注意它是如何扩展
JavaPlugin
的。这就是它如何成为一个插件的。onEnable
和onDisable
方法在每次服务器启动或停止时运行。onEnable
中的这行代码将我们的命令Giveitem
分配给它的执行器,GiveItem
类。它将是为我们提供自定义项的命令。如果您还没有创建命令文件夹,请创建命令文件夹。然后,GiveItem
类。最终将如下所示:型
如果你想知道为什么我们不能只使用
give
,那将覆盖游戏内置的/give
命令,我们不想这样做。请记住,你可以以任何方式获得你的物品,无论是从命令,小游戏,或者一个GUI商店。我们只是想得到你的物品。这就是为什么我们从这个基本命令开始。这就是Spigot API的酷之处。你可以构建你的Minecraft梦想。* 几乎 * 任何你能想象的。不管怎样,你的plugin.yml应该看起来像这样:
型
这是使你的插件成为官方的东西。它还告诉服务器应该为这个插件创建的任何命令。
测试时间!
最后,构建你的插件(应该已经在IntelliJ中准备好了)。如果你正在使用其他东西,请使用Maven的
package
命令和Gradle的build
命令。将插件放入你的服务器plugin
文件夹。它应该在Maven的target
文件夹和Gradle的build/libs
文件夹中。确保您的资源包在正确的位置。启动Minecraft并启用您的资源包。然后,启动您的服务器,登录后,运行我们使用
/giveitem
创建的giveitem
命令,您应该有您的自定义项目!请记住,你可以在不替换现有物品的情况下制作成千上万的自定义物品。从1.14版本开始,他们引入了
custom_model_data
修改器,允许更多的模型。尽管谁会制作那么多模型呢!其中一些是我从this guide得到的。现在有点过时了,但是如果你知道最新的API,它就能工作。哎呀,虽然有些是不正确的。也许我应该修复它.