我知道这可能不是问这个问题的最佳地点,但是在伪造论坛上的家伙确实并没有提供太大帮助,我想我会在这里碰碰运气。我在使用实体注册表的新语法(特别是渲染实体)时遇到了麻烦。之前,您只需将RenderingRegistry.registerEntityRenderingHandler行添加到ClientProxy中,就是这样。但是现在,它要求我在preInit中使用RenderingRegistry.registerEntityRenderingHandler以及一个名为IRenderFactory的参数。我是新手,所以我不太确定IRenderFactory的工作方式或创建方式(如果需要),因此我真的很感谢您的帮助。有人告诉我,您可以使用方法引用将Render类的构造函数(RenderMyEntity :: new)作为IRenderFactory传递,但是我真的不知道该怎么做。就像我说的那样,我是一个非常新的程序员,这对我来说很陌生,但是我真的很想了解。我已经做了各种各样的研究,但是没有一个有意义。太谢谢你了我真的很感激!

这是我的MobExample类(RenderingRegistry.registerEntityRenderingHandler(RenderGelZombie.class,renderFactory)行仅在MobExample类的preInit中起作用,这就是为什么它在其中而不在ClientProxy中起作用):

package com.aideux.mobexample;

import com.aideux.basemod.BaseMod;

import net.minecraft.client.model.ModelZombie;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.registry.EntityRegistry;

public class MobExample
{
public static int currentEntityId = 0;

public static void preInit()
{
    createEntityWithEgg(EntityGelZombie.class, "CustomMob", 0x00FF00, 0xFF0000);
    RenderingRegistry.registerEntityRenderingHandler(RenderGelZombie.class, renderFactory);
}

public static void init()
{
    BaseMod.proxy.registerEntityRenderers();
}

public static void createEntityWithEgg(Class entityClass, String entityName, int solidColor, int spotColor)
{
    int entityId = currentEntityId++;
    EntityRegistry.registerModEntity(entityClass, entityName, entityId, BaseMod.instance, 250, 1, true, solidColor, spotColor);
}
}

最佳答案

Forge中的IRenderingFactory接口为您的实体创建Render类的实例。上面zapl链接的文档详细解释了接口是一个概念。

在这种情况下,您有一个名为RenderGelZombie的类,该类实际上处理游戏中的僵尸。 Forge在注册渲染器时曾经直接使用此类,但是现在它使用IRenderingFactory来创建渲染类的实例。您将需要一个这样的工厂类:

public class RenderGelZombieFactory implements IRenderFactory<EntityLiving> {

    public static final RenderGelZombieFactory INSTANCE = new RenderGelZombieFactory();

    @Override
    public Render<? super EntityLiving> createRenderFor(RenderManager manager) {
        // TODO Auto-generated method stub
        return new RenderGelZombie(manager, new ModelBiped(1.0f), 1.0f);
    }

}


现在,您已经拥有实现IRenderFactory的类,可以将其传递给新的实体呈现注册表方法:

RenderingRegistry.registerEntityRenderingHandler(EntityGelZombie.class, RenderGelZombieFactory.INSTANCE);


资料来源:我是iD Tech Camps Minecraft Modding课程的课程开发人员,看来您的某些代码可能来自那里!

07-27 13:47