繁体   English   中英

使用 Minecraft Forge 1.16.5 注册实体渲染处理程序

[英]Registering entity rendering handler with Minecraft Forge 1.16.5

我正在按照本教程为我的 Minecraft mod 创建自定义实体。 不幸的是,本教程是为稍旧的 Minecraft (1.14) 版本编写的,有些部分不适用于最新版本。 当我收到此错误时,我正准备为实体注册渲染处理程序:

RenderRegistry.java:12: error: method registerEntityRenderingHandler in class RenderingRegistry cannot be applied to given types;
        RenderingRegistry.registerEntityRenderingHandler(GlowCowEntity.class, new GlowCowRender.RenderFactory());
                         ^
  required: EntityType<T>,IRenderFactory<? super T>
  found: Class<GlowCowEntity>,RenderFactory
  reason: cannot infer type-variable(s) T
    (argument mismatch; Class<GlowCowEntity> cannot be converted to EntityType<T>)
  where T is a type-variable:
    T extends Entity declared in method <T>registerEntityRenderingHandler(EntityType<T>,IRenderFactory<? super T>)

我尝试查看Minecraft Forge 文档,但它没有说明任何关于暴徒的信息,而且我找不到任何最新信息。 我已经将 Java 用于 Android 应用程序,但我对它不是很有经验。

RenderRegistry.java:

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.client.registry.RenderingRegistry;

@OnlyIn(Dist.CLIENT)
public class RenderRegistry {
    public static void registerEntityRenderers() {
        RenderingRegistry.registerEntityRenderingHandler(GlowCowEntity.class, new GlowCowRender.RenderFactory());
    }
}

GlowCowEntity.java:

import net.minecraft.entity.EntityType;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.RandomWalkingGoal;
import net.minecraft.entity.ai.goal.SwimGoal;
import net.minecraft.entity.monster.CreeperEntity;
import net.minecraft.entity.passive.CowEntity;
import net.minecraft.world.World;

public class GlowCowEntity extends CowEntity {
    public GlowCowEntity(EntityType<? extends CowEntity> p_i48567_1_, World p_i48567_2_) {
        super((EntityType<? extends CowEntity>) MyEntities.GLOW_COW_ENTITY, p_i48567_2_);
    }

    @Override
    protected void registerGoals() {
        this.goalSelector.addGoal(0, new SwimGoal(this));
        this.goalSelector.addGoal(1, new AvoidEntityGoal<>(this, CreeperEntity.class, 8.0F, 0.5F, 0.5F));
        this.goalSelector.addGoal(2, new RandomWalkingGoal(this, 5));
    }

}

GlowCowRender.java:

import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.LivingRenderer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.client.registry.IRenderFactory;

@OnlyIn(Dist.CLIENT)
public class GlowCowRender extends LivingRenderer<GlowCowEntity, GlowCowModel> {
    public GlowCowRender(EntityRendererManager manager) {
        super(manager, new GlowCowModel(), 0.5F);
    }

    @Override
    public ResourceLocation getTextureLocation(GlowCowEntity p_110775_1_) {
        return new ResourceLocation("textures/entity/glow_cow.png");
    }

    public static class RenderFactory implements IRenderFactory<GlowCowEntity> {

        @Override
        public EntityRenderer<? super GlowCowEntity> createRenderFor(EntityRendererManager manager) {
            return new GlowCowRender(manager);
        }
    }
}

我最终设法通过查看适用于 1.16 的其他 mod 使其工作,然后我替换了

RenderingRegistry.registerEntityRenderingHandler(GlowCowEntity.class, new GlowCowRender.RenderFactory());

RenderingRegistry.registerEntityRenderingHandler((EntityType<GlowCowEntity>) MyEntities.GLOW_COW_ENTITY, GlowCowRender::new);

编译器仍然对 EntityType<GlowCowEntity> 的强制转换产生警告,所以可能有更好的方法来做到这一点,但这仍然有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM