Files
PictureSign/common/src/main/java/eu/midnightdust/picturesign/util/WaterMediaHandler.java
Martin Prokoph 1196cf05bf Make MediaHandler an abstract system
- Allows for alternative multimedia backend implementations (i.e. #23)
2024-06-27 14:13:27 +02:00

88 lines
2.4 KiB
Java

package eu.midnightdust.picturesign.util;
import me.srrapero720.watermedia.api.player.SyncBasePlayer;
import me.srrapero720.watermedia.api.player.SyncMusicPlayer;
import me.srrapero720.watermedia.api.player.SyncVideoPlayer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
public class WaterMediaHandler extends MediaHandler {
private SyncBasePlayer player;
WaterMediaHandler(Identifier id, BlockPos pos) {
super(id, pos);
mediaHandlers.put(id, this);
}
@Override
void setVolume(int volume) {
player.setVolume((int) (volume * MinecraftClient.getInstance().options.getSoundVolume(SoundCategory.MASTER)));
}
@Override
public void closePlayer() {
if (player != null) {
player.stop();
player.release();
}
//mediaPlayers.remove(id);
player = null;
}
@Override
public void stop() {
player.stop();
isDeactivated = true;
}
@Override
public boolean isStopped() {
return player.isStopped();
}
@Override
public boolean isPaused() {
return player.isPaused();
}
@Override
public void pause() {
player.pause();
}
@Override
public void restart() {
player.play();
}
@Override
public void play(String url, boolean isVideo) {
this.player = isVideo ? new SyncVideoPlayer(MinecraftClient.getInstance()) : new SyncMusicPlayer();
mediaHandlers.put(id, this);
if (player.isBroken()) return;
player.start(url);
this.playbackStarted = true;
}
@Override
public boolean hasMedia() {
return player != null && player.isPlaying();
}
@Override
public void setRepeat(boolean value) {
player.setRepeatMode(true);
}
@Override
public long getTime() {
return player.getTime();
}
@Override
public void setTime(long value) {
player.seekTo(value);
}
@Override
public int getTexture() {
if (player instanceof SyncVideoPlayer videoPlayer) return videoPlayer.getGlTexture();
return -1;
}
public boolean isWorking() {
return mediaHandlers.containsKey(id) && mediaHandlers.get(id) instanceof WaterMediaHandler waterMediaHandler
&& waterMediaHandler.player != null && !waterMediaHandler.player.isBroken();
}
}