Рендер модели игрока

Версия Minecraft
1.7.10
586
1
2
Всем привет.Недавно решил изменить модель игрока,при помощи эффекта.Полазив по интернету нашел этот гайд.
Сделал по нём и заменил на Зомби(ModelZombie).Добавил проверку на эффект.Моделька заменилась.Но когда эффект пропадает получается от такая фигня:
[attachment=63]
Кто знает как починить модель игрока без эффекта?
 

Вложения

  • 2016-09-09_22.28.02.png
    2016-09-09_22.28.02.png
    402.7 KB · Просмотры: 118
586
1
2
mercury написал(а):
А пробовал сразу после окончания эффекта поставить прежнюю модель? Без кода ничего не понятно)

Там тупо копи паст кода с тутора.
Код:
public class RenderZombiePlayer extends RenderPlayer{

public ResourceLocation texture = new ResourceLocation(Main.MODID + "путь к текстурке");
public ModelZombie tutModel;
public RenderTutorialPlayer() {
super();
this.mainModel = new ModelZombie(0.0F);
this.modelBipedMain = (ModelZombie) this.mainModel;
this.modelArmorChestplate = new ModelZombie(1.0F);
this.modelArmor = new ModelZombie(0.5F);
this.tutModel = new ModelZombie(0.5f);
}
@Override
public void renderModel(EntityLivingBase entity, float par2, float par3, float par4, float par5, float par6, float par7){
super.renderModel(entity, par2, par3, par4, par5, par6, par7);
if(Если на игроке активен эффект){
ModelZombie modelBiped;
for (int i = 0; i < 4; ++i)
{
modelBiped = this.tutModel;

GL11.glColor4f(1, 1, 1, 1);
this.bindTexture(texture);
modelBiped.bipedHead.showModel = i == 0;
modelBiped.bipedHeadwear.showModel = i == 0;
modelBiped.bipedBody.showModel = i == 1 || i == 2;
modelBiped.bipedRightArm.showModel = i == 1;
modelBiped.bipedLeftArm.showModel = i == 1;
modelBiped.bipedRightLeg.showModel = i == 2 || i == 3;
modelBiped.bipedLeftLeg.showModel = i == 2 || i == 3;
modelBiped.onGround = this.mainModel.onGround;
modelBiped.isRiding = this.mainModel.isRiding;
modelBiped.isChild = this.mainModel.isChild;
if (this.mainModel instanceof ModelZombie)
{
modelBiped.heldItemLeft = ((ModelZombie) this.mainModel).heldItemLeft;
modelBiped.heldItemRight = ((ModelZombie) this.mainModel).heldItemRight;
modelBiped.isSneak = ((ModelZombie) this.mainModel).isSneak;
modelBiped.aimedBow = ((ModelZombie) this.mainModel).aimedBow;
}
modelBiped.setLivingAnimations(entity, par2, par3, 0.0F);
modelBiped.render(entity, par2, par3, par4, par5, par6, par7);

// Start alpha render
GL11.glDisable(GL11.GL_LIGHTING);
this.bindTexture(texture);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_BLEND);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.0F);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
float time = entity.ticksExisted / 10.0F;
float sTime = (float) Math.sin(time) * 0.5F + 0.5F;

float r = 0.2F * sTime;
float g = 1.0F * sTime;
float b = 0.2F * sTime;


modelBiped.render(entity, par2, par3, par4, par5, par6, par7);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1, 1, 1, 1);
GL11.glEnable(GL11.GL_LIGHTING);

}
}

}


}
}


Регистрация в КлиентПрокси:
RenderingRegistry.registerEntityRenderingHandler(EntityPlayer.class, new RenderZombiePlayer());
Пробовал приравнивать [font=Monaco, Consolas, Courier, monospace]mainModel к ModelBiped.Но тогда происходит дубликация(появляется сам игрок и зомби).[/font]
 
7,099
324
1,509
Ну рендерь как обычную модель, при действия игрока воспроизводи анимацию
 
586
1
2
hohserg написал(а):
Ну рендерь как обычную модель, при действия игрока воспроизводи анимацию

Мне нужно тупо поменять модель на кастомку.Да ещё и что бы держать/носить предмет и бронью нельзя было...
У меня получалось,но тогда или человек(модель ванильная) в червя превращался или он был в роле кастомке но при попытке взять шмот он отображался как у модели игрока.
 
7,099
324
1,509
Если совсем все хреново - начни писать с нуля эту часть мода
 
586
1
2
hohserg написал(а):
Если совсем все хреново - начни писать с нуля эту часть мода

Я уже 3 раз переписываю с нуля)))
Возможно ли евентом отменить модель игрока и отрендерить новую?Пробовал setCanceled,но у меня почему то не получалось отрендерить новую...
 
7,099
324
1,509
А если просто зарегистрировать новый рендер поверх ванильного?
 
7,099
324
1,509
Ок, тогда рефлексией удали ванильный рендер(они, наверное, в каком-то листе лежат)


Кстати, можешь скинуть, как ты используешь регистрацию рендера? Этот подход много, где советуют, но у мя че-то не пашет для игрока вообще
 
586
1
2
hohserg написал(а):
Ок, тогда рефлексией удали ванильный рендер(они, наверное, в каком-то листе лежат)

Опять повторяюсь.Ванильный рендер можно отменить евентом,но у меня не получается вставить новый.(То есть ты прозрачный и всё вместе с тобой).
 
7,099
324
1,509
Если у тебя что-то типо
void myRenderr(RenderLivingEvent.Pre e){
e.setCanceled();
myModel.reder();//это добавить
}
 
7,099
324
1,509
Ну если ты рисуешь модель без рендера, то зачем регистрировать его?


nickita45 написал(а):
Опять повторяюсь.Ванильный рендер можно отменить евентом,но у меня не получается вставить новый.(То есть ты прозрачный и всё вместе с тобой).
Вот именно, оно отменяет работу всех зарегистрированных рендеров. А тебе нужно только одного. Сделай это через рефлексию при инициализации, или в этом же эвенте, если он может передать класс рендера(или еще как-то отличить твой от ванильного)
 
586
1
2
hohserg написал(а):
Ну если ты рисуешь модель без рендера, то зачем регистрировать его?


nickita45 написал(а):
Опять повторяюсь.Ванильный рендер можно отменить евентом,но у меня не получается вставить новый.(То есть ты прозрачный и всё вместе с тобой).
Вот именно, оно отменяет работу всех зарегистрированных рендеров. А тебе нужно только одного. Сделай это через рефлексию при инициализации, или в этом же эвенте, если он может передать класс рендера(или еще как-то отличить твой от ванильного)


Cделал вот так:

Код:
@SubscribeEvent
    public void preRenderPlayer(RenderLivingEvent.Pre event)
    {
 if (event.entity instanceof EntityPlayer)
         {
       
         final Render modelRenderer = new RenderZombie();
        modelRenderer.doRender(event.entity, event.x,  event.y, event.z, 0F, 0F);


  
          
        }
   }
Крашит со словами что игрок не может быть зомби :/
 
586
1
2
hohserg написал(а):
Потому, что нужно писать СВОЙ рендер

Окей...Рендер с первого сообщения подойдёт?


Я попробовал использовать свой с первого предложения,результата 0 и крашит(ругается на нулл если даже игрока есть проверка).
 
7,099
324
1,509
Возьми Ванильный рендер игрока, прикрути свою модельку.

"Там тупо копи паст кода с тутора." - плохой подход
 
Сверху