创建物品
在物品注册类中新增
public static final RegistryObject<Item> BlogTestItem = ITEMS.register("blog_test_item", () -> new BlogTestItem(new Item.Properties().tab(GodStickModelTab)));
并新建对应的物品类
public class BlogTestItem extends Item {
public BlogTestItem(Properties p_41383_) {
super(p_41383_);
}
}
为物品添加文字简介
输入app后使用回车快速生成重写方法
@Override
public void appendHoverText(@NotNull ItemStack itemStack, @Nullable Level level, List<Component> componentList, @NotNull TooltipFlag tooltipFlag) {
super.appendHoverText(itemStack, level, componentList, tooltipFlag);
}
操作componentList添加描述
在方法中加入代码
componentList.add(2, Component.literal("能力1").withStyle(ChatFormatting.GREEN).append(Component.literal(":右键飞行").withStyle(ChatFormatting.RESET).withStyle(ChatFormatting.WHITE)));
代码解析
Component.literal()
:源码有多层嵌套就不解析了,大概的意思就是括号中的内容就是会展示的内容
.withStyle()
:编辑展示文字的颜色、字体等,其中的值为ChatFormatting
枚举中的值,具体可以看我之前的博客:Forge-MDK我的世界模组-枚举类整理(1.19)
.append()
:可以实现拼接文字,建议在拼接文字后接.withStyle(ChatFormatting.RESET)
重置文字样式,不然可能展示的和你想要的效果不一致
实现主手时右键飞行
输入app后使用回车快速生成重写方法
@Override
public @NotNull InteractionResultHolder<ItemStack> use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand interactionHand) {
return super.use(level, player, interactionHand);
}
添加具体的执行代码
if (level.isClientSide() && interactionHand.equals(InteractionHand.MAIN_HAND)) {
// 使玩家位移
player.setDeltaMovement(player.getViewVector(5).x, player.getViewVector(5).y, player.getViewVector(5).z);
// 设置使用右键的冷却(20tick : 1s)
player.getCooldowns().addCooldown(this, 1);
}
代码解析
实现右键飞行的要素:客户端在物品在主手的时候使用右键用户位移
level.isClientSide()
:判断当前是否是客户端操作
interactionHand.equals(InteractionHand.MAIN_HAND)
:判断是否在主手
player.setDeltaMovement()
:通过三维设置玩家位移,即通过x、y、z三个维度设置位移
player.getViewVector(5)
:获取玩家视线坐标,可以使用.x
、.y
、.z
获取对应的坐标,输入的5作为计算坐标的依据,输入的值越大获取到的结果越远
player.getCooldowns().addCooldown(this, 1)
:设置使用该物品的冷却,在MC中1秒=20tick,设置的冷却是tick,其中this
代表当前物品,冷却时间为1tick