Временный оверлэй

Версия Minecraft
1.20.1
API
Forge
4
1
0
Как сделать, чтоб после появления оверлэя он пропадал через 10 секунд или пропадал по нажатии кнопки?
 
Решение
Вопрос решен костылем:
В Классе блока нужно добавить:
Kostil:
public static int index_note = 0; //Индекс нажатия блока
public static void setIndex_note(){ //Класс для обнуления индекса
        index_note=0;
}
@Override
    public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {//Ивент на нажатие ПКМ
        super.use(blockstate, world, pos, entity, hand, hit);
        index_note = 1; //При нажатии пкм задаём индекс 1
        ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        executorService.schedule(NoteBlock::setIndex_note, 5, TimeUnit.SECONDS);//Эта и предыдущая строчка задержка на 5 секунд. Не используйте...
Вопрос решен костылем:
В Классе блока нужно добавить:
Kostil:
public static int index_note = 0; //Индекс нажатия блока
public static void setIndex_note(){ //Класс для обнуления индекса
        index_note=0;
}
@Override
    public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {//Ивент на нажатие ПКМ
        super.use(blockstate, world, pos, entity, hand, hit);
        index_note = 1; //При нажатии пкм задаём индекс 1
        ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        executorService.schedule(NoteBlock::setIndex_note, 5, TimeUnit.SECONDS);//Эта и предыдущая строчка задержка на 5 секунд. Не используйте TimeUnit без шедуледа!!! TimeUnit будет блочить весь мод и будут просадки фпс до 0
        return InteractionResult.SUCCESS;
    }
В классе оверлэя:
overlay:
@Mod.EventBusSubscriber({Dist.CLIENT})
public class NoteOverlay{
    @SubscribeEvent(priority = EventPriority.HIGHEST)
    public static void eventHandler(RenderGuiEvent.Pre event) {
        int w = event.getWindow().getGuiScaledWidth();
        int h = event.getWindow().getGuiScaledHeight();
        if (index_note == 1) { //Проверка индекса
            event.getGuiGraphics().drawString(Minecraft.getInstance().font, Component.translatable("Ваш текст"), w / 2 + -42, h - 40, -1, true);//Вывод оверлэя на экран
        }
    }
}
 
Последнее редактирование:
оно у тебя блочит, потому что запустил в мейн потоке. Почему нельзя зарендерить без ивента? Не используй "_" или другие знаки в названиях переменных. Зачем создавать целый метод для установки значения в переменную?
 
Последнее редактирование:
Назад
Сверху