- 771
- 5
Есть рендер, который рендерит мою модель и предмет в слоте тайла.
У меня тайл сам через определенное время кладет в слот предмет.
Так вот, когда в слоте уже есть предмет, то рендер его не рендерит, надо открыть гуи и только потом рендерится предмет.
Аналогично и если предмет был в гуи и его вытянули, то рендер не обновляется.
Что тут нужно делать?
Код:
public class TileEntityRelicRenderer extends TileEntitySpecialRenderer{
private ModelRelic relicModel;
private RenderItem renderItems;
private Minecraft mc;
public TileEntityRelicRenderer(){
relicModel = new ModelRelic();
mc = FMLClientHandler.instance().getClient();
renderItems = new RenderItem();
renderItems.setRenderManager(RenderManager.instance);
}
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) {
if(tileEntity == null || !(tileEntity instanceof TileEntityRelic)) {
return;
}
TileEntityRelic relic = (TileEntityRelic)tileEntity;
renderRelic(relic, x, y, z);
renderStackInSlot(relic, x, y, z);
}
public void renderStackInSlot(TileEntityRelic relic, double x, double y, double z){
if(relic.getWorldObj().getBlock(relic.xCoord, relic.yCoord + 1, relic.zCoord) == Blocks.air && relic.getWorldObj().getClosestPlayer(relic.xCoord, relic.yCoord, relic.zCoord, 15) != null && !mc.isGamePaused()){
ItemStack toRender;
if(relic.getStackInSlot(0) == null){
return;
}
toRender = relic.getStackInSlot(0).copy();
toRender.stackSize = 1;
EntityItem entityItem = new EntityItem(relic.getWorldObj(), relic.xCoord, relic.yCoord + 1, relic.zCoord, toRender);
entityItem.hoverStart = 0f;
if(!EsotericConfigurationMisc.relicFancyRenderer){
GL11.glPushMatrix();
switch(relic.getBlockMetadata()){
case 0:
GL11.glTranslated(x + 0.5, y + 0.9, z + 0.32);
break;
case 1:
GL11.glTranslated(x + 0.68, y + 0.9, z + 0.5);
GL11.glRotated(-90, 0, 1, 0);
break;
case 2:
GL11.glTranslated(x + 0.5, y + 0.9, z + 0.68);
GL11.glRotated(-180, 0, 1, 0);
break;
case 3:
GL11.glTranslated(x + 0.32, y + 0.9, z + 0.5);
GL11.glRotated(-270, 0, 1, 0);
break;
}
RenderItem.renderInFrame = true;
GL11.glRotatef(180, 0, 1, 1);
RenderManager.instance.renderEntityWithPosYaw(entityItem, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F);
RenderItem.renderInFrame = false;
GL11.glPopMatrix();
}else{
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 0.9, z + 0.5);
float rotational = (Minecraft.getSystemTime()) / (3000.0F) * 300.0F;
GL11.glPushMatrix();
GL11.glRotatef(rotational / EsotericConfigurationMisc.relicSpeedFactor, 0F, 1.0F, 0F);
renderItems.doRender(entityItem, 0, 0, 0, 0, 0);
GL11.glPopMatrix();
GL11.glPopMatrix();
}
}
}
public void renderRelic(TileEntityRelic relic, double x, double y, double z){
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5);
mc.renderEngine.bindTexture(new ResourceLocation(Esoteric.MOD_ID.toLowerCase(), "textures/blocks/relic.png"));
GL11.glPushMatrix();
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
int angle = relic.getBlockMetadata() * 90;
GL11.glRotatef(angle, 0.0F, 1.0F, 0.0F);
relicModel.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
GL11.glPopMatrix();
GL11.glPopMatrix();
}
}
У меня тайл сам через определенное время кладет в слот предмет.
Так вот, когда в слоте уже есть предмет, то рендер его не рендерит, надо открыть гуи и только потом рендерится предмет.
Аналогично и если предмет был в гуи и его вытянули, то рендер не обновляется.
Что тут нужно делать?