MCgLTF анимация и загрузка моделей

Версия Minecraft
1.16.5
190
9
43
Дня доброго! Подскажите как зарендерить новую модель при беге игрока. Использую библиотеку MCgLTF для загрузки gltf моделек.
Ивентом меняю модель, выдает нулл исключение, потому что 2 переменные в рендере не иницаилизируются, не понимаю как вызывать инициализацию
Java:
    @SubscribeEvent
    public static void anim(RenderPlayerEvent.Pre event) {
        AbstractClientPlayerEntity player = Minecraft.getInstance().player;
        boolean isSprinting = player.isSprinting();

        if (isSprinting) {
            event.setCanceled(true);
            ModelRender exampleEntityRenderer = new ModelRender(event.getRenderer().getDispatcher());
            exampleEntityRenderer.render(event.getEntity(), 0, event.getPartialRenderTick(), event.getMatrixStack(), event.getBuffers(), event.getLight());

        }
    }

Рендер модели:
public class ModelRender extends EntityRenderer implements IGltfModelReceiver {

    protected RenderedGltfScene renderedScene;

    protected List<List<InterpolatedChannel>> animations;

    public ModelRender(EntityRendererManager p_i46179_1_) {
        super(p_i46179_1_);
    }

    @Override
    public ResourceLocation getModelLocation() {
        return new ResourceLocation("mcgltf", "models/entity/cesium_man.gltf");
    }

    @Override
    public void onReceiveSharedModel(RenderedGltfModel renderedModel) {
        renderedScene = renderedModel.renderedGltfScenes.get(0);
        List<AnimationModel> animationModels = renderedModel.gltfModel.getAnimationModels();
        animations = new ArrayList<List<InterpolatedChannel>>(animationModels.size());
        for(AnimationModel animationModel : animationModels) {
            animations.add(GltfAnimationCreator.createGltfAnimation(animationModel));
        }
    }

    @Override
    public void render(Entity p_225623_1_, float p_225623_2_, float p_225623_3_, MatrixStack p_225623_4_, IRenderTypeBuffer p_225623_5_, int p_225623_6_) {
        float time = Animation.getWorldTime(p_225623_1_.level, p_225623_3_);
        //Play every animation clips simultaneously
        System.out.println("before running the loop in the render method");
        for (List<InterpolatedChannel> animation : animations) {
            System.out.println("inside the loop in the render method");
            animation.parallelStream().forEach((channel) -> {
                float[] keys = channel.getKeys();
                channel.update(time % keys[keys.length - 1]);
            });
        }

        GL11.glPushMatrix();
        GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);

        GL11.glEnable(GL11.GL_LIGHTING);
        GL11.glShadeModel(GL11.GL_SMOOTH);
        GL11.glEnable(GL12.GL_RESCALE_NORMAL);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glEnable(GL11.GL_COLOR_MATERIAL);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

        RenderSystem.multMatrix(p_225623_4_.last().pose());
        GL11.glRotatef(MathHelper.rotLerp(p_225623_3_, p_225623_1_.yRotO, p_225623_1_.yRot), 0.0F, 1.0F, 0.0F);

        GL13.glMultiTexCoord2s(GL13.GL_TEXTURE2, (short)(p_225623_6_ & '\uffff'), (short)(p_225623_6_ >> 16 & '\uffff'));

        if(MCglTF.getInstance().isShaderModActive()) {
            renderedScene.renderForShaderMod();
        }
        else {
            GL13.glActiveTexture(GL13.GL_TEXTURE2);
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            GL13.glActiveTexture(GL13.GL_TEXTURE0);
            renderedScene.renderForVanilla();
        }

        GL11.glPopAttrib();
        GL11.glPopMatrix();
        super.render(p_225623_1_, p_225623_2_, p_225623_3_, p_225623_4_, p_225623_5_, p_225623_6_);
    }



    @Override
    public ResourceLocation getTextureLocation(Entity p_110775_1_) {
        return null;
    }
 
яж писал, включаешь отладку, а лучше перед этим посмотреть видео на ютуб как с НЕЙ работать в Intellij IDEA. А потом по стэку вызовов смотришь как работает в оригинале. И сразу найдешь причину, почему у тебя работает не так как в оригинальном моде.
Там ещё надо БУДЕТ скомпилить либу, чтобы у конечного игрока это всё заработало.
Там много всяких нюансов, ну либо заказывать.
 
Назад
Сверху