package tc.oc.pgm.tutorial; import java.util.Collection; import javax.annotation.Nullable; import com.google.common.collect.ImmutableList; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TranslatableComponent; import tc.oc.commons.core.chat.Component; public class Tutorial { private final ImmutableList<TutorialStage> stages; Tutorial(Collection<TutorialStage> stages) { this.stages = ImmutableList.copyOf(stages); } boolean hasStages() { return !stages.isEmpty(); } @Nullable TutorialStage getNextStage(TutorialStage stage) { return this.getStage(stage, 1); } @Nullable TutorialStage getPreviousStage(TutorialStage stage) { return this.getStage(stage, -1); } @Nullable TutorialStage getStage(TutorialStage start, int offset) { int curIndex = start != null ? this.stages.indexOf(start) : -1; int nextIndex = curIndex + offset; if(nextIndex >= 0 && nextIndex < this.stages.size()) { return this.stages.get(nextIndex); } else { return null; } } BaseComponent renderNavigation(TutorialStage stage) { final TutorialStage next = getNextStage(stage); final TutorialStage prev = getPreviousStage(stage); final Component c = new Component(ChatColor.BOLD); if(prev != null) { c.extra(new Component(new TranslatableComponent("misc.leftClick"), ChatColor.DARK_GRAY)); c.extra(new Component(" \u00AB ", ChatColor.AQUA)); c.extra(new Component(prev.getTitle(), ChatColor.RED)); } if(prev != null && next != null) { c.extra(new Component(" \u23A5 ", ChatColor.AQUA)); } if(next != null) { c.extra(new Component(next.getTitle(), ChatColor.GREEN)); c.extra(new Component(" \u00BB ", ChatColor.AQUA)); c.extra(new Component(new TranslatableComponent("misc.rightClick"), ChatColor.DARK_GRAY)); } return c; } }