侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录
MC

Entity

Dettan
2021-07-10 / 0 评论 / 0 点赞 / 177 阅读 / 719 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
/ MC / Entity
java模型工具
不管是可怕的凋灵还是凋灵抛出去的火球,抑或是玩家还是玩家扔出去的末影之眼,小到掉落的经验球,大到飞翔的末影龙,快到在铁轨上飞奔的矿车,慢到在水中静止的钓鱼钩,在地上站立的盔甲架,在墙上悬挂的一幅画,在天上咆哮的闪电,在空中绚丽的烟花,和善如猪牛羊,恐怖如末影人,生物的掉落物品,末地的末影水晶,等等,全部都是实体完成的。

实体数据通过NBT存储
生物作为一种特殊的实体,核心是一个名为EntityLiving的类

常用的接口:
IAnimals表示动物,几乎所有生物对应的类都继承了这个接口
IMob表示怪物,注意怪物也是动物的一种
INpc表示像村民一样的NPC,可交易
IRangedAttackMob表示可以产生一定范围内的攻击的怪物,比如部分可以发射弹射物的怪物
IBossDisplayData表示这个怪物是一个可以显示血条的Boss
IEntityOwnable表示这个生物可以被驯服,比如豹猫和狼



net.minecraft.client.model.ModelCow
设置model,主要就是设置各个定点和面的材质偏移,还有设置个部位以及角度.

net.minecraft.client.renderer.entity.RenderCow

渲染相关
boolean shouldRender(T livingEntity, ICamera camera, double camX, double camY, double camZ) 是不是在视区内.
camera.isBoundingBoxInFrustum(entity.getRenderBoundingBox()) 是不是在Frustum截椎体内.
@SideOnly(Side.CLIENT)
public class RenderCow extends RenderLiving<EntityCow>
{
    private static final ResourceLocation COW_TEXTURES = new ResourceLocation("textures/entity/cow/cow.png");

    public RenderCow(RenderManager p_i47210_1_)
    {
        super(p_i47210_1_, new ModelCow(), 0.7F);
    }

    /**
     * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
     */
    protected ResourceLocation getEntityTexture(EntityCow entity)
    {
        return COW_TEXTURES;
    }
}
net.minecraft.entity.passive.EntityCow
程序逻辑.



net.minecraft.entity.EntityList
注册register(95, "wolf", EntityWolf.class, "Wolf");
但都注册到了net.minecraftforge.registries.GameData.registerEntity(id, resourcelocation, clazz, oldName);


net\minecraft\entity\MobEntity.java
protected final void updateEntityActionState() {
  ++this.idleTime;
  this.world.getProfiler().startSection("sensing");
  this.senses.tick();
  this.world.getProfiler().endSection();
  this.world.getProfiler().startSection("targetSelector");
  this.targetSelector.tick();
  this.world.getProfiler().endSection();
  this.world.getProfiler().startSection("goalSelector");
  this.goalSelector.tick();   //村民的状态机 在这里tick,  
  this.world.getProfiler().endSection();
  this.world.getProfiler().startSection("navigation");
  this.navigator.tick();
  this.world.getProfiler().endSection();
  this.world.getProfiler().startSection("mob tick");
  this.updateAITasks();
  this.world.getProfiler().endSection();
  this.world.getProfiler().startSection("controls");
  this.world.getProfiler().startSection("move");
  this.moveController.tick();
  this.world.getProfiler().endStartSection("look");
  this.lookController.tick();
  this.world.getProfiler().endStartSection("jump");
  this.jumpController.tick();
  this.world.getProfiler().endSection();
  this.world.getProfiler().endSection();
  this.sendDebugPackets();
}
0

评论区