package com.skcraft.playblock.player;
import net.minecraft.nbt.NBTTagCompound;
import com.skcraft.playblock.PlayBlock;
import com.skcraft.playblock.media.Media;
import com.skcraft.playblock.media.PlayingMedia;
import com.skcraft.playblock.queue.MediaQueue;
import com.skcraft.playblock.queue.QueueListener;
import com.skcraft.playblock.queue.QueueManager;
/**
* This class manages the server side of the media player.
*/
public class MediaPlayerHost extends MediaPlayer implements QueueListener {
private QueueManager queueManager;
private MediaQueue queue;
/**
* Construct a new instance.
*/
public MediaPlayerHost() {
queueManager = PlayBlock.getRuntime().getQueueManager();
}
/**
* Get the queue.
*
* @return the queue, or null if there is no queue
*/
public MediaQueue getQueue() {
return queue;
}
@Override
public void setQueueMode(boolean queueMode) {
// Create a queue if queue mode is turned on
if (queueManager != null && inQueueMode() != queueMode) {
if (queueMode) {
queue = queueManager.createQueue();
queue.addQueueListener(this);
} else {
queue.removeQueueListener(this);
queue.release();
queue = null;
}
}
super.setQueueMode(queueMode);
}
@Override
public void mediaComplete(Media media) {
}
@Override
public void mediaAdvance(Media media) {
NBTTagCompound tag = new NBTTagCompound();
if (media != null) {
tag.setString("playedUri", media.getUri());
tag.setInteger("position", 0);
} else {
tag.setString("playedUri", "");
}
fireNetworkedNbt(tag);
}
@Override
public void writeNetworkedNBT(NBTTagCompound tag) {
toSharedNbt(tag);
if (inQueueMode()) {
PlayingMedia playing = queue.getCurrentMedia();
if (playing != null) {
tag.setString("playedUri", playing.getMedia().getUri());
tag.setInteger("position", (int) playing.getPosition());
}
}
}
@Override
public void readNetworkedNBT(NBTTagCompound tag) {
// State NBT can only come from the server
}
}