- 190
- 9
- 43
Дня доброго! Подскажите как зарендерить новую модель при беге игрока. Использую библиотеку MCgLTF для загрузки gltf моделек.
Ивентом меняю модель, выдает нулл исключение, потому что 2 переменные в рендере не иницаилизируются, не понимаю как вызывать инициализацию
Ивентом меняю модель, выдает нулл исключение, потому что 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;
}