Анимация предмета

Версия Minecraft
1.12+
1,417
44
594
Добрый вечер.
Хотел спросить, как можно сделать анимацию предмета на данной версии? Т.е. что-то банальное, например - вращение предмета вокруг своей оси.
И сразу хотел бы спросить, как можно передать значение nbt из предмета в его рендер?
(Хочу уточнить какой метод надо использовать, для рендера предмета "вручную", например в 1.7.10 я мог рендерить по частям, вращать и т.п. через gl спокойно, но как на 1.12 - не оч понимаю)
 
5,018
47
783
Вот в реализме например, рендерю текст на предмете

Java:
public class CalendarEvent {
    public static String monthName;
    public static int page = 0;
    EntityRenderer er;
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void render(RenderSpecificHandEvent event){
        Minecraft mc = Minecraft.getMinecraft();
        World world = mc.world;

        GL11.glPushMatrix();
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glTranslatef(0.245F, -0.147F, -1.016F);
        GL11.glScalef(0.0033f, -0.0033f, 0.0033f);
        GL11.glRotatef(22F, 1 ,0, 0);
        GL11.glRotatef(0F, 0 ,1, 0);
        GL11.glRotatef(0F, 0 ,0, 1);
        if(page == 0){

            Minecraft mc2 = Minecraft.getMinecraft();
            EntityPlayer player = Minecraft.getMinecraft().player;
            IPlayerCap capabilities = Minecraft.getMinecraft().player.getCapability(PlayerCapProvider.LEVEL_CAP, null);
            World world2 = mc.world;
            IDate date = world.getCapability(DateProvider.DATE, null);
            IPlayerCap cap = Minecraft.getMinecraft().player.getCapability(PlayerCapProvider.LEVEL_CAP, null);

            FontRenderer fr = Minecraft.getMinecraft().fontRenderer;

            if (event.getItemStack().getItem() == RegItems.calendar && (event.getHand() == EnumHand.MAIN_HAND)){

                fr.drawString("Temp Body: " + capabilities.getTempBody(), 0, 0, 0x000000);
                fr.drawString("Water Level: " + capabilities.getWaterLevel(), 0, 10, 0x000000);
                fr.drawString("Day: "  + date.getDay(), 0, 20, 0x000000);
                fr.drawString("Month: "  + this.getMonthName(), 0, 30, 0x000000);
                fr.drawString("Year: "  + (date.getYear()) ,0, 40, 0x000000);
                fr.drawString("Hour: " + world.getWorldTime()/1000, 0, 50, 0x000000);
        //        fr.drawString("Tick: " + world.getWorldTime(), -60, 60, 0x000000);
        //        fr.drawString("Tick: " + world.getTotalWorldTime(), -60, 70, 0x000000);

            }
            if (event.getItemStack().getItem() == RegItems.calendar && (event.getHand() == EnumHand.OFF_HAND)){


                fr.drawString("Temp Body: " + capabilities.getTempBody(), -334, 0, 0x000000);
                fr.drawString("Water Level: " + capabilities.getWaterLevel(), -334, 10, 0x000000);
                fr.drawString("Day: "  + date.getDay(), -334, 20, 0x000000);
                fr.drawString("Month: "  + date.getMonth(), -334, 30, 0x000000);
                fr.drawString("Year: "  + date.getYear(),-334, 40, 0x000000);
                fr.drawString("Hour: " + world.getWorldTime()/1000, -330, 50, 0x000000);

            }

        }
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glPopMatrix();

    }
    
    public String getMonthName() {
        Minecraft mc = Minecraft.getMinecraft();
        World world = mc.world;
        IDate date = world.getCapability(DateProvider.DATE, null);
        String[] monthName = new String[] {"January","February","March","April","May","June","Jule","August","September","October","November","December"};
        
        return monthName[date.getMonth()];
    }
}
 
Сверху