Есть ли фордж-ивент отвечающий за "жизнь" мода?

Версия Minecraft
1.12.2
10
0
В чем суть, мне надо чтобы конкретное условие каждую секунду проверялось и если все подходит выполнялась моя функция. Пробовал сделать с тик-ивентом, но что-то не вышло. Буду рад любой помощи.
 
7,099
324
1,510
Расскажи подробнее про задачу, покажи, как пытался реализовать
 
10
0
Задача:
У меня есть функция которая отслеживает видео/стрим по VIDEO-ID, используя youtube api. Также есть две команды, /id и /configure. Конфигур отвечает за установление команды, которая будет исполняться при изменении определенного параметра (в моем случае лайков), а айди за установление id отслеживаемого видео/стрима. И теперь мне необходимо данную функцию куда-то впихнуть, чтобы постоянно проверялись условия установлен ли айди стрима и сама команда для исполнения и если все прошло удачно выполняется метод. Кидаю как пытался реализовать я:
 
10
0
Java:
@EventHandler
    public void onTick(TickEvent e) throws InterruptedException {
        while (true) {
            if (configureCommand.getSender() != null && configureCommand.getConfig() != null && urlCommand.getUrl() != null) {
                logger.info("Пытаюсь подключиться к стриму...");
                try {
                    streamViewer.view(urlCommand.getUrl(), configureCommand.getConfig(), configureCommand.getSender());
                    logger.info("Получилось!");
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                    logger.info("Не получилось!");
                }
            }
        }
    }
 
7,099
324
1,510
10
0
Java:
@Mod(modid = Main.MODID, name = Main.NAME, version = Main.VERSION)
public class Main {

    UrlCommand urlCommand = new UrlCommand();
    ConfigureCommand configureCommand = new ConfigureCommand();
    StreamViewer streamViewer = new StreamViewer();

    public static final String MODID = "lim";
    public static final String NAME = "LikesMod";
    public static final String VERSION = "1.0";

    private static Logger logger;

    public void preInit(FMLPreInitializationEvent event) {
        logger = event.getModLog();
    }

    public void load(FMLInitializationEvent event) {
        logger.info(NAME + " " + VERSION + " успешно активирован!");
    }
    @EventHandler
    public void postInit(FMLPostInitializationEvent e){
        MinecraftForge.EVENT_BUS.register(this);
    }

    public void serverStart(FMLServerStartingEvent e) {
        MinecraftServer server = e.getServer();
        ICommandManager command = server.getCommandManager();
        ServerCommandManager manager = (ServerCommandManager) command;
        manager.registerCommand(new UrlCommand());
        manager.registerCommand(new ConfigureCommand());
    }
    @SubscribeEvent
    public void onTick(TickEvent e) throws InterruptedException {
            if (configureCommand.getSender() != null && configureCommand.getConfig() != null && urlCommand.getUrl() != null) {
                logger.info("Пытаюсь подключиться к стриму...");
                try {
                    streamViewer.view(urlCommand.getUrl(), configureCommand.getConfig(), configureCommand.getSender());
                    logger.info("Получилось!");
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                    logger.info("Не получилось!");
                }
            }
        }
    }

Переделал так, где и что исправить?
 

tox1cozZ

aka Agravaine
8,456
598
2,893
Это полюбому дорогая операция и ее вообще нельзя выполнять в основном потоке игры.
Создай другой поток, там сделай while(true) и пытайся подключиться. Чтобы сделать задержку - Thread.sleep(1000) в миллисекундах.
 
Сверху