RadioMod

Версия Minecraft
1.7.10
222
5
28
Хочу попробовать сделать свой вариант радио мода ибо варианты из паблика меня нифига не устраивают.
Есть набросок, при запуске которого возникает пару проблем, но факт в том, что он работает.

Код:
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import net.minecraft.client.settings.KeyBinding;
import org.apache.logging.log4j.Logger;
import org.lwjgl.input.Keyboard;

@Mod(modid = Radio.MOD_ID, name = Radio.MOD_NAME, version = Radio.MOD_VERSION)
public class Radio {

    public static final String
            MOD_ID = "radio",
            MOD_NAME = "Radio",
            MOD_VERSION = "1.0";

    private final static KeyBinding playButton = new KeyBinding("key.playButton", Keyboard.KEY_NUMPAD5, "key.categories.radio");
    private final static KeyBinding stopButton = new KeyBinding("key.stopButton", Keyboard.KEY_NUMPAD4, "key.categories.radio");

    private MediaPlayerFX player;
    private static Logger logger;

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {

        logger = event.getModLog();

        if (event.getSide().isClient()) {
            ClientRegistry.registerKeyBinding(playButton);
            ClientRegistry.registerKeyBinding(stopButton);
            FMLCommonHandler.instance().bus().register(this);

            //Application.launch(MediaPlayerFX.class) - если сделать так, то инициализация клиента зависает на этом: http://joxi.ru/DrlVXLWIVJEw12

            Thread thread = new Thread(() -> Application.launch(MediaPlayerFX.class));
            thread.setName("Run JavaFX Application Thread");
            thread.start();

        }

    }

    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    public void key(InputEvent.KeyInputEvent event) {

        if (playButton.isPressed()) {
            MediaPlayerFX.instance.play();
        }

        if (stopButton.isPressed()) {
            MediaPlayerFX.instance.stopped();
        }

    }

    public static class MediaPlayerFX extends Application {

        private static MediaPlayerFX instance;
        private MediaPlayer player;

        public MediaPlayerFX() {
            instance = this;
        }

        @Override
        public void start(Stage stage) throws Exception {

            logger.info(Thread.currentThread().getName());

            this.player = new MediaPlayer(new Media("http://eptop128server.streamr.ru:8033/eptop128"));

            this.player.setOnReady(() -> {
                logger.info("onReady");
            });

            this.player.setOnError(() -> {
                logger.info("onError");
            });

            this.player.setOnStopped(() -> {
                logger.info("onStopped");
            });

            this.player.setOnEndOfMedia(() -> {
                logger.info("onEndOfMedia");
                this.player.stop();
            });

            this.player.setOnPaused(() -> {
                logger.info("onPause");
            });

        }

        private void play() {
            Platform.runLater(() -> this.player.play());
        }

        private void stopped() {
            Platform.runLater(() -> this.player.stop());
        }

    }

}

По факту клиент запускается и по кнопке NumPad 5 музыка играет и всё нормально, в логах после запуска я вижу следующие:
Java:
[13:40:53] [Client thread/WARN] [FML]: =============================================================
[13:40:53] [Client thread/WARN] [FML]: MOD HAS DIRECT REFERENCE System.exit() THIS IS NOT ALLOWED REROUTING TO FML!
[13:40:53] [Client thread/WARN] [FML]: Offendor: com/sun/javafx/application/LauncherImpl.abort(Ljava/lang/Throwable;Ljava/lang/String;[Ljava/lang/Object;)V
[13:40:53] [Client thread/WARN] [FML]: Use FMLCommonHandler.exitJava instead
[13:40:53] [Client thread/WARN] [FML]: =============================================================
[13:40:55] [JavaFX Application Thread/INFO] [radio]: JavaFX Application Thread
[13:40:56] [JavaFX Application Thread/INFO] [radio]: onReady
Т.е. факт того, что вроде всё работает норм, но ошибка выше напрягает и понятное дело может привести к чему то неожиданному в определённый момент, когда уже будет сделано много чего.

Может я поспешил с выбором библиотеки JavaFX для подобного? У кого-нибудь есть получше предложения что можно использовать?
 
Решение
Он ничего не предотвращал и он не пытался закрыться) Просто фордж когда видит в коде System.exit() кидает варн такой. Хотя, по сути, метод может вообще никогда не вызываться.

tox1cozZ

aka Agravaine
8,454
598
2,890
Он ничего не предотвращал и он не пытался закрыться) Просто фордж когда видит в коде System.exit() кидает варн такой. Хотя, по сути, метод может вообще никогда не вызываться.
 
222
5
28
Он ничего не предотвращал и он не пытался закрыться)
Господи, как же я сейчас ору, блин, я думала он закрыться пытается. Капец. Спасибо.
А что скажите в принципе по реализации радио через MediaPlayer из либы JavaFX?
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Без понятия, не занимался таким. Если все работает гладко, то думаю норм)
Посмотри что по ресурсам кушает еще, но по идее должно быть все хорошо.
Кстати, убрать варны можно добавив такой код в главный класс мода:
Java:
static {
    Launch.classLoader.addTransformerExclusion("javafx.");
    Launch.classLoader.addTransformerExclusion("com.sun.javafx.");
}
 
222
5
28
Посмотри что по ресурсам кушает еще
Брал либу с учётом на то, что она официальная, поэтому надеюсь что в ней всё по красоте сделали.

Кстати, убрать варны можно добавив такой код в главный класс мода:
Спасибо, не знал)
 
Сверху