- 222
- 5
- 28
Хочу попробовать сделать свой вариант радио мода ибо варианты из паблика меня нифига не устраивают.
Есть набросок, при запуске которого возникает пару проблем, но факт в том, что он работает.
По факту клиент запускается и по кнопке NumPad 5 музыка играет и всё нормально, в логах после запуска я вижу следующие:
Т.е. факт того, что вроде всё работает норм, но ошибка выше напрягает и понятное дело может привести к чему то неожиданному в определённый момент, когда уже будет сделано много чего.
Может я поспешил с выбором библиотеки JavaFX для подобного? У кого-нибудь есть получше предложения что можно использовать?
Есть набросок, при запуске которого возникает пару проблем, но факт в том, что он работает.
Код:
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 для подобного? У кого-нибудь есть получше предложения что можно использовать?