Minecraft 1.18.1、1.18.2模组开发 05.发射器+投掷物

本文详细介绍了如何在1.18.1版本的Minecraft中创建自定义投掷物和武器,包括模型制作、物品类和实体类的编写,以及纹理和渲染设置。通过实例展示如何实现投掷物效果和发射器功能,适合模组开发者参考。

1.12.2的霰弹枪教程:Minecraft 1.12.2模组开发(二十三) 霰弹枪!

1.16.5版本的投掷物教程:Minecraft 1.16.5模组开发(三十二) 自定义投掷物品实体

本期我们来介绍一下1.18.1版本下的武器与投掷物的具体制作教程。

1.投掷物模型制作

**1.18.1的投掷物的制作与1.16.5较为类似,需要制作投掷物的模型,渲染文件,制作与之对应的投掷物物品。
**
BlockBench下载地址
首先我们用blockbench制作投掷物的模型,然后导出为.json文件:
cr1.jpg

将导出的.json文件放入resources\assets\你的模组名称\models\item中:

cr2.jpg

将贴图放入textures/entity包中。
之后是Java包的工作(四个文件):

cr3.jpg

2.在Items包中新建一个我们的物品类ItemMoSpitter:

ItemMoSpitter.java

package com.joy187.re8joymod.items;

import com.joy187.re8joymod.Main;
import com.joy187.re8joymod.entity.EntityMoSpitter;

import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ArrowItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

public class ItemMoSpitter extends Item{
    public ItemMoSpitter(Item.Properties name) {
        super(name);
    }
    
    public ItemMoSpitter() {
    						//放到哪个物品栏 每个槽最多放几个
        super(new Properties().tab(Main.TUTORIAL_TAB).stacksTo(64));
    }

    public EntityMoSpitter createArrow(Level level, ItemStack stack, LivingEntity entityIn) {
    	//指明我们生成的投掷物实体
        EntityMoSpitter arrowentity = new EntityMoSpitter(level, entityIn);
        return arrowentity;
    }
    //如果有无限的附魔,就不消耗子弹
    public boolean isInfinite(ItemStack stack, ItemStack bow, net.minecraft.world.entity.player.Player player) {
        int enchant = net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY_ARROWS, bow);
        return enchant <= 0 ? false : this.getClass() == ItemMoSpitter.class;
     }
    
}
在Init包的ItemInit类中添加我们的投掷物物品声明:

ItemInit.java

public class ItemInit {
	public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS,
			Main.MOD_ID);

    //我们的投掷物品声明
    public static RegistryObject<Item> MOSPITTER = ITEMS.register("mospitter",()->
    {
        return new ItemMoSpitter();
    });
 
	private static <T extends Item> RegistryObject<T> register(final String name, final Supplier<T> item) {
		return ITEMS.register(name, item);
	}
		
}

3.在entity包中新建我们的投掷物实体类EntityMoSpitter

EntityMoSpitter.java

package com.joy187.re8joymod.entity;

import com.joy187.re8joymod.init.EntityInit;
import com.joy187.re8joymod.init.ItemInit;

import io.netty.buffer.Unpooled;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.animal.IronGolem;
import net.minecraft.world.entity.boss.enderdragon.EnderDragon;
import net.minecraft.world.entity.boss.wither.WitherBoss;
import net.minecraft.world.entity.monster.Ravager;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.entity.projectile.Arrow;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
import
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_fearless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值