forge-1.21.x模组开发(二)给物品添加功能
功能效果
创建一个兑换券
,当使用兑换券对着兑换机右键时,获得一条烤鱼
创建兑换券
创建ExchangeCouponsItem.java
,继承Item
,定义兑换券内容
public class ExchangeCouponsItem extends Item {
public ExchangeCouponsItem(Properties p_41383_) {
super(p_41383_);
}
@Override
public InteractionResult useOn(UseOnContext p_41383_) {
// 获取方块信息
Level level = p_41383_.getLevel();
BlockPos blockpos = p_41383_.getClickedPos();
BlockState blockstate = level.getBlockState(blockpos);
// 检查方块是否为自定义的方块
if (blockstate.getBlock() == TestMod.myblock.get()) {
// 获取玩家信息
Player player = p_41383_.getPlayer();
// 往物品栏添加一条烤鱼
player.addItem(new ItemStack(Items.COOKED_COD));
// 获取物品栏
ItemStack itemstack = p_41383_.getItemInHand();
// 将兑换券-1
itemstack.shrink(1);
// 返回成功
return InteractionResult.SUCCESS;
}
return super.useOn(p_41383_);
}
}
注册兑换券
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);
// 自定义兑换券物品
public static final RegistryObject<Item> exchangeCouponsItem = ITEMS.register("exchange_coupons",
() -> new ExchangeCouponsItem(new Item.Properties().setId(ITEMS.key("exchange_coupons"))));
public TestMod(FMLJavaModLoadingContext context) {
IEventBus modEventBus = context.getModEventBus();
ITEMS.register(modEventBus);
// 注册选项卡
modEventBus.addListener(this::addCreativeTab);
}
public void addCreativeTab(BuildCreativeModeTabContentsEvent event) {
// 将自定义物品放到功能方块下
if (event.getTabKey() == CreativeModeTabs.FUNCTIONAL_BLOCKS) {
event.accept(exchangeCouponsItem);
}
}
添加材质
在items创建exchange_coupons.json
文件
{
"model": {
"type": "minecraft:model",
"model": "testmod:item/exchange_coupons"
}
}
在lang创建en_us.json
和zh_cn.json
文件
{
"item.testmod.exchange_coupons" : "兑换卷"
}
在models.item添加exchange_coupons.json
文件
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "testmod:item/exchange_coupons"
}
}
在textures.item添加材质