package com.skcraft.playblock.projector;
import io.netty.buffer.ByteBufInputStream;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChatComponentText;
import com.sk89q.forge.AbstractBehavior;
import com.sk89q.forge.BehaviorPayload;
import com.skcraft.playblock.network.BehaviorType;
import com.skcraft.playblock.network.ProjectorUpdate;
import com.skcraft.playblock.player.MediaPlayer;
import com.skcraft.playblock.util.AccessList;
import com.skcraft.playblock.util.DoubleThresholdRange;
public class ProjectorOptions extends AbstractBehavior {
private final MediaPlayer mediaPlayer;
private final DoubleThresholdRange range;
private AccessList accessList = null;
public ProjectorOptions(MediaPlayer mediaPlayer, DoubleThresholdRange range) {
this.mediaPlayer = mediaPlayer;
this.range = range;
}
public void useAccessList(boolean use) {
if (use == true) {
if (accessList == null) {
accessList = new AccessList();
}
} else {
accessList = null;
}
}
public AccessList getAccessList() {
return accessList;
}
@Override
public void readPayload(EntityPlayer player, BehaviorPayload payload, ByteBufInputStream in) throws IOException {
if (payload.isType(BehaviorType.UPDATE)) {
if (getAccessList() == null || getAccessList().checkAndForget(player)) {
ProjectorUpdate update = new ProjectorUpdate();
update.read(in);
mediaPlayer.setUri(update.getUri());
mediaPlayer.setWidth(update.getWidth());
mediaPlayer.setHeight(update.getHeight());
range.setTriggerRange(update.getTriggerRange());
range.setFadeRange(update.getFadeRange());
// Update everyone
NBTTagCompound tag = new NBTTagCompound();
mediaPlayer.writeNetworkedNBT(tag);
range.writeNetworkedNBT(tag);
mediaPlayer.fireNetworkedNbt(tag);
} else {
player.addChatMessage(new ChatComponentText("Sorry, you don't have permission " + "to modify that projector."));
}
}
}
public void sendUpdate(String uri, float width, float height, float triggerRange, float fadeRange) {
ProjectorUpdate update = new ProjectorUpdate();
update.setUri(uri);
update.setWidth(width);
update.setHeight(height);
update.setTriggerRange(triggerRange);
update.setFadeRange(fadeRange);
firePayloadSend(new BehaviorPayload(BehaviorType.UPDATE, update), null);
}
}