User Tools

Site Tools


zh_cn:tutorial:entity

This is an old revision of the document!


添加一个实体

介绍

实体是下一步采取增加一个项目,方后。 要添加实体,您将需要3个主要类:

  • 实体类,为您的生物提供逻辑/ AI
  • Renderer类,它允许您将实体连接到模型
  • Model类,这是您的玩家在游戏中看到的

我们将创建一个cookie爬虫,当它爆炸时,它将在所有地方启动cookie。

注册一个实体

与积木和物品不同,您基本上总是想要一个完全专用于您的实体的类。 我们正在创建爬虫克隆,因此将使我们的实体类扩展CreeperEntity:

public class CookieCreeperEntity extends CreeperEntity {
    [...]
}

您的IDE应该指示您创建与超级匹配的构造函数-立即执行此操作。

要注册您的实体,我们将使用Registry.ENTITY_TYPE。 要获取所需的注册表实例,可以使用EntityType.Builder或FabricEntityTypeBuilder-我们建议使用第二个实例。

  1. public static final EntityType<CookieCreeperEntity> COOKIE_CREEPER =
  2. Registry.register(
  3. Registry.ENTITY_TYPE,
  4. new Identifier("wiki-entity", "cookie-creeper"),
  5. FabricEntityTypeBuilder.create(EntityCategory.AMBIENT, CookieCreeperEntity::new).size(EntityDimensions.fixed(1, 2)).build()
  6. );

The size() method allows you to set the hitbox of your entity. A creeper is 1 block wide and 2 blocks tall, so we'll use (1, 2).

If you load up your game at this point, you will be able to use /summon to see your creation. If all went right, it should appear as a normal creeper. I would not recommend going into survival.

创建一个渲染器

我们的Cookie爬虫自动具有模型,因为它扩展了Creeper类。 我们将皮肤更改为Cookie皮肤,而不是普通的绿色迷彩。

首先,创建一个MobEntityRenderer类。 MobEntityRenderer具有2个通用类型:实体和模型。 因为我们使用的是Creeper模型,所以我们还必须通过为其指定类型来告诉Creeper模型这不是Creeper实体。

  1. public class CookieCreeperRenderer extends MobEntityRenderer<CookieCreeperEntity, CreeperEntityModel<CookieCreeperEntity>> {
  2. [...]
  3. }

您需要重写getTexture方法并添加构造函数。 默认情况下,构造函数具有3个参数(EntityRenderDispatcher,EntityModel,float),但是我们可以删除最后两个参数并自己创建它们:

public CookieCreeperRenderer(EntityRenderDispatcher entityRenderDispatcher_1)
{
    super(entityRenderDispatcher_1, new CreeperEntityModel<>(), 1);
}

对于getTexture方法,您需要返回模型的纹理。 如果为null,则您的实体将不可见。 这是100%保证的方法,可以花费3个小时来弄清楚模型为何不起作用。 为方便起见,我创建了一个Cookie爬行器纹理,所有人均可使用,您可以从此处下载。 默认的实体纹理文件夹约定为:textures/entity/entity_name/entity.png。 这是一个示例实现: <code java [enable_line_numbers=“true”]> @Override protected Identifier getTexture(CookieCreeperEntity cookieCreeperEntity) { return new Identifier(“wiki-entity:textures/entity/cookie_creeper/creeper.png”); } </code> 文件存储在resources/assets/wiki-entity/textures/entity/cookie_creeper/creeper.png. 最后,您需要将实体连接到渲染器。 由于渲染仅发生在客户端,因此您应始终在ClientModInitializer中执行以下工作: <code java> EntityRendererRegistry.INSTANCE.register(CookieCreeperEntity.class, (entityRenderDispatcher, context) → new CookieCreeperRenderer(entityRenderDispatcher)); </code> 这会将我们的实体链接到我们的新渲染器类。 如果您载入游戏,应该会看到我们的新朋友: https://i.imgur.com/8Gfc2sV.jpg 如果要使用自己的模型,则可以创建一个扩展EntityModel的新类,并在我们的渲染器中为其交换Creeper模型。 这相当复杂,将在单独的教程中介绍。

zh_cn/tutorial/entity.1576751768.txt.gz · Last modified: 2019/12/19 10:36 by lightcolour