Загрузка данных


```java
package com.mykvador.mixin;

import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {

    // --- НАСТРОЙКИ АНИМАЦИИ ---
    private static final int TOTAL_FRAMES = 30; // Укажите ТОЧНОЕ количество кадров, которое вы нарезали из GIF
    private static final int FRAME_DELAY = 50;  // Задержка между кадрами в миллисекундах (50 мс = 20 FPS). Меняйте для скорости.
    // --------------------------

    private static final Identifier LOGO = Identifier.of("mykvador", "textures/gui/title/logo.png");

    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "render", at = @At("HEAD"), cancellable = true)
    private void renderCustomTitle(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
        
        // --- ЛОГИКА АНИМАЦИИ ФОНА ---
        // Вычисляем текущий кадр на основе системного времени
        long currentTime = System.currentTimeMillis();
        int currentFrame = (int) ((currentTime / FRAME_DELAY) % TOTAL_FRAMES);
        
        // Формируем путь к текущему кадру: bg_0.png, bg_1.png и т.д.
        Identifier background = Identifier.of("mykvador", "textures/gui/title/bg_" + currentFrame + ".png");
        // ---------------------------

        // 1. Рисуем текущий кадр анимации
        context.drawTexture(background, 0, 0, 0, 0, this.width, this.height, this.width, this.height);

        // 2. Кастомный логотип (если он у вас есть)
        int logoWidth = 300; 
        int logoHeight = 100; 
        context.drawTexture(LOGO, (this.width / 2) - (logoWidth / 2), 30, 0, 0, logoWidth, logoHeight, logoWidth, logoHeight);

        // 3. Текст под логотипом
        context.drawCenteredTextWithShadow(this.textRenderer, Text.literal("Minecraft 1.21.11"), this.width / 2, 140, 0xAAAAAA);
        context.drawCenteredTextWithShadow(this.textRenderer, Text.literal("The sun of its parts!"), this.width / 2, 155, 0xFFFFFF);

        // 4. Нижний левый текст
        context.drawTextWithShadow(this.textRenderer, "Minecraft 1.21.11/Fabric (модифицировано) Mykvador 0.1.0 t.me/mykvador_tg", 2, this.height - 10, 0xFFFFFF);

        // 5. Нижний правый текст
        String rightFooter = "© Mojang AB. Распространение запрещено!";
        int rightWidth = this.textRenderer.getWidth(rightFooter);
        context.drawTextWithShadow(this.textRenderer, rightFooter, this.width - rightWidth - 2, this.height - 10, 0xFFFFFF);

        // 6. Водяной знак (как на скриншоте)
        String watermark = "MYKVADOR";
        int watermarkWidth = this.textRenderer.getWidth(watermark);
        context.drawTextWithShadow(this.textRenderer, watermark, this.width - watermarkWidth - 10, 10, 0xFFFFFF);

        // Отменяем стандартный рендер
        ci.cancel();
    }
}
```