2019-01-20 23:01:26 +01:00
|
|
|
package world.bentobox.challenges.panel.user;
|
|
|
|
|
|
|
|
|
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.World;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import world.bentobox.bentobox.api.panels.PanelItem;
|
|
|
|
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
|
|
|
|
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
|
|
|
|
import world.bentobox.bentobox.api.user.User;
|
|
|
|
import world.bentobox.challenges.ChallengesAddon;
|
|
|
|
import world.bentobox.challenges.ChallengesManager;
|
2019-01-23 15:09:38 +01:00
|
|
|
import world.bentobox.challenges.database.object.Challenge;
|
2019-01-20 23:01:26 +01:00
|
|
|
import world.bentobox.challenges.panel.CommonGUI;
|
|
|
|
import world.bentobox.challenges.panel.TryToComplete;
|
2019-01-26 13:46:03 +01:00
|
|
|
import world.bentobox.challenges.utils.GuiUtils;
|
2019-01-24 22:29:56 +01:00
|
|
|
import world.bentobox.challenges.utils.LevelStatus;
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This is UserGUI class. It contains everything necessary for user to use it.
|
|
|
|
*/
|
|
|
|
public class ChallengesGUI extends CommonGUI
|
|
|
|
{
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Constructors
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Default constructor that inits panels with minimal requirements, without parent panel.
|
|
|
|
*
|
|
|
|
* @param addon Addon where panel operates.
|
|
|
|
* @param world World from which panel was created.
|
|
|
|
* @param user User who created panel.
|
|
|
|
* @param topLabel Command top label which creates panel (f.e. island or ai)
|
|
|
|
* @param permissionPrefix Command permission prefix (f.e. bskyblock.)
|
|
|
|
*/
|
|
|
|
public ChallengesGUI(ChallengesAddon addon,
|
|
|
|
World world,
|
|
|
|
User user,
|
|
|
|
String topLabel,
|
|
|
|
String permissionPrefix)
|
|
|
|
{
|
|
|
|
super(addon, world, user, topLabel, permissionPrefix);
|
|
|
|
this.challengesManager = this.addon.getChallengesManager();
|
|
|
|
|
|
|
|
this.levelStatusList = this.challengesManager.getChallengeLevelStatus(this.user, this.world);
|
2019-01-22 08:12:12 +01:00
|
|
|
|
2019-01-24 23:59:06 +01:00
|
|
|
for (LevelStatus levelStatus : this.levelStatusList)
|
2019-01-22 08:12:12 +01:00
|
|
|
{
|
2019-01-24 23:59:06 +01:00
|
|
|
if (levelStatus.isUnlocked())
|
2019-01-22 08:12:12 +01:00
|
|
|
{
|
2019-01-24 23:59:06 +01:00
|
|
|
this.lastSelectedLevel = levelStatus;
|
2019-01-22 08:12:12 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Methods
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method builds all necessary elements in GUI panel.
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public void build()
|
|
|
|
{
|
2019-02-05 07:43:58 +01:00
|
|
|
// Do not open gui if there is no challenges.
|
|
|
|
if (this.challengesManager.getAllChallenges(this.world).isEmpty())
|
|
|
|
{
|
|
|
|
this.addon.getLogger().severe("There are no challenges set up!");
|
|
|
|
this.user.sendMessage("general.errors.general");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-01-20 23:01:26 +01:00
|
|
|
PanelBuilder panelBuilder = new PanelBuilder().user(this.user).
|
2019-02-12 00:38:16 +01:00
|
|
|
name(this.user.getTranslation("challenges.gui.title.challenges"));
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
// TODO: get last completed level.
|
|
|
|
|
2019-01-27 12:10:43 +01:00
|
|
|
int nextItemIndex = 0;
|
|
|
|
|
2019-01-20 23:01:26 +01:00
|
|
|
if (this.addon.getChallengesSettings().isFreeChallengesFirst())
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
this.addFreeChallenges(panelBuilder, nextItemIndex);
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
// Start new row for challenges.
|
2019-01-27 12:10:43 +01:00
|
|
|
if (panelBuilder.nextSlot() % 9 != 0)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
nextItemIndex = panelBuilder.nextSlot() - panelBuilder.nextSlot() % 9 + 9;
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
2019-02-02 21:22:04 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
nextItemIndex = panelBuilder.nextSlot();
|
|
|
|
}
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
|
2019-01-27 12:10:43 +01:00
|
|
|
this.addChallenges(panelBuilder, nextItemIndex);
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
// Start new row for levels.
|
2019-01-27 12:10:43 +01:00
|
|
|
// Start new row for challenges.
|
|
|
|
if (panelBuilder.nextSlot() % 9 != 0)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
nextItemIndex = panelBuilder.nextSlot() - panelBuilder.nextSlot() % 9 + 9;
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
2019-02-02 21:22:04 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
nextItemIndex = panelBuilder.nextSlot();
|
|
|
|
}
|
2019-01-20 23:01:26 +01:00
|
|
|
|
2019-01-27 12:10:43 +01:00
|
|
|
this.addChallengeLevels(panelBuilder, nextItemIndex);
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
if (!this.addon.getChallengesSettings().isFreeChallengesFirst())
|
|
|
|
{
|
|
|
|
// Start new row for free challenges.
|
2019-01-27 12:10:43 +01:00
|
|
|
if (panelBuilder.nextSlot() % 9 != 0)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
nextItemIndex = panelBuilder.nextSlot() - panelBuilder.nextSlot() % 9 + 9;
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
2019-02-02 21:22:04 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
nextItemIndex = panelBuilder.nextSlot();
|
|
|
|
}
|
2019-01-20 23:01:26 +01:00
|
|
|
|
2019-01-27 12:10:43 +01:00
|
|
|
this.addFreeChallenges(panelBuilder, nextItemIndex);
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
panelBuilder.build();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method adds free challenges to panelBuilder.
|
|
|
|
* @param panelBuilder where free challenges must be added.
|
2019-01-27 12:10:43 +01:00
|
|
|
* @param firstItemIndex index of first element.
|
2019-01-20 23:01:26 +01:00
|
|
|
*/
|
2019-01-27 12:10:43 +01:00
|
|
|
private void addFreeChallenges(PanelBuilder panelBuilder, int firstItemIndex)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-23 16:30:30 +01:00
|
|
|
List<Challenge> freeChallenges = this.challengesManager.getFreeChallenges(this.world);
|
2019-01-20 23:01:26 +01:00
|
|
|
final int freeChallengesCount = freeChallenges.size();
|
|
|
|
|
|
|
|
if (freeChallengesCount > 18)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
int index = firstItemIndex;
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
if (this.freeChallengeIndex > 0)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index++, new PanelItemBuilder().
|
2019-01-20 23:01:26 +01:00
|
|
|
icon(Material.SIGN).
|
2019-01-25 23:12:42 +01:00
|
|
|
name(this.user.getTranslation("challenges.gui.buttons.previous")).
|
2019-01-20 23:01:26 +01:00
|
|
|
clickHandler((panel, user1, clickType, slot) -> {
|
|
|
|
this.freeChallengeIndex--;
|
|
|
|
this.build();
|
|
|
|
return true;
|
|
|
|
}).build());
|
|
|
|
}
|
|
|
|
|
|
|
|
int currentIndex = this.freeChallengeIndex;
|
|
|
|
|
2019-01-27 12:10:43 +01:00
|
|
|
while (panelBuilder.nextSlot() != firstItemIndex + 18 && currentIndex < freeChallengesCount)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index++, this.getChallengeButton(freeChallenges.get(currentIndex++)));
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Check if one challenge is left
|
|
|
|
if (currentIndex + 1 == freeChallengesCount)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index, this.getChallengeButton(freeChallenges.get(currentIndex)));
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
else if (currentIndex < freeChallengesCount)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index, new PanelItemBuilder().
|
2019-01-20 23:01:26 +01:00
|
|
|
icon(Material.SIGN).
|
2019-01-25 23:12:42 +01:00
|
|
|
name(this.user.getTranslation("challenges.gui.buttons.next")).
|
2019-01-20 23:01:26 +01:00
|
|
|
clickHandler((panel, user1, clickType, slot) -> {
|
|
|
|
this.freeChallengeIndex++;
|
|
|
|
this.build();
|
|
|
|
return true;
|
|
|
|
}).build());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-01-23 15:09:38 +01:00
|
|
|
for (Challenge challenge : freeChallenges)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
|
|
|
// there are no limitations. Just bunch insert.
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(firstItemIndex++, this.getChallengeButton(challenge));
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method adds last selected level challenges to panelBuilder.
|
|
|
|
* @param panelBuilder where last selected level challenges must be added.
|
2019-01-27 12:10:43 +01:00
|
|
|
* @param firstItemIndex index of first element.
|
2019-01-20 23:01:26 +01:00
|
|
|
*/
|
2019-01-27 12:10:43 +01:00
|
|
|
private void addChallenges(PanelBuilder panelBuilder, int firstItemIndex)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-22 08:12:12 +01:00
|
|
|
if (this.lastSelectedLevel != null)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-23 16:30:30 +01:00
|
|
|
List<Challenge> challenges = this.challengesManager.getLevelChallenges(this.lastSelectedLevel.getLevel());
|
2019-01-22 08:12:12 +01:00
|
|
|
final int challengesCount = challenges.size();
|
2019-01-20 23:01:26 +01:00
|
|
|
|
2019-01-22 08:12:12 +01:00
|
|
|
if (challengesCount > 18)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
int index = firstItemIndex;
|
2019-01-20 23:01:26 +01:00
|
|
|
|
2019-01-22 08:12:12 +01:00
|
|
|
if (this.pageIndex > 0)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index++, new PanelItemBuilder().
|
2019-01-22 08:12:12 +01:00
|
|
|
icon(Material.SIGN).
|
2019-01-25 23:12:42 +01:00
|
|
|
name(this.user.getTranslation("challenges.gui.buttons.previous")).
|
2019-01-22 08:12:12 +01:00
|
|
|
clickHandler((panel, user1, clickType, slot) -> {
|
|
|
|
this.pageIndex--;
|
|
|
|
this.build();
|
|
|
|
return true;
|
|
|
|
}).build());
|
|
|
|
}
|
2019-01-20 23:01:26 +01:00
|
|
|
|
2019-01-22 08:12:12 +01:00
|
|
|
int currentIndex = this.pageIndex;
|
2019-01-20 23:01:26 +01:00
|
|
|
|
2019-01-27 12:10:43 +01:00
|
|
|
while (panelBuilder.nextSlot() != firstItemIndex + 18 && currentIndex < challengesCount)
|
2019-01-22 08:12:12 +01:00
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index++, this.getChallengeButton(challenges.get(currentIndex++)));
|
2019-01-22 08:12:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Check if one challenge is left
|
|
|
|
if (currentIndex + 1 == challengesCount)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index, this.getChallengeButton(challenges.get(currentIndex)));
|
2019-01-22 08:12:12 +01:00
|
|
|
}
|
|
|
|
else if (currentIndex < challengesCount)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index, new PanelItemBuilder().
|
2019-01-22 08:12:12 +01:00
|
|
|
icon(Material.SIGN).
|
2019-01-25 23:12:42 +01:00
|
|
|
name(this.user.getTranslation("challenges.gui.buttons.next")).
|
2019-01-22 08:12:12 +01:00
|
|
|
clickHandler((panel, user1, clickType, slot) -> {
|
|
|
|
this.pageIndex++;
|
|
|
|
this.build();
|
|
|
|
return true;
|
|
|
|
}).build());
|
|
|
|
}
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
2019-01-22 08:12:12 +01:00
|
|
|
else
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-01-23 15:09:38 +01:00
|
|
|
for (Challenge challenge : challenges)
|
2019-01-22 08:12:12 +01:00
|
|
|
{
|
|
|
|
// there are no limitations. Just bunch insert.
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(firstItemIndex++, this.getChallengeButton(challenge));
|
2019-01-22 08:12:12 +01:00
|
|
|
}
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method adds challenge levels to panelBuilder.
|
|
|
|
* @param panelBuilder where challenge levels must be added.
|
2019-01-27 12:10:43 +01:00
|
|
|
* @param firstItemIndex index of first element.
|
2019-01-20 23:01:26 +01:00
|
|
|
*/
|
2019-01-27 12:10:43 +01:00
|
|
|
private void addChallengeLevels(PanelBuilder panelBuilder, int firstItemIndex)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-02-12 14:48:27 +01:00
|
|
|
final int levelCounts = this.levelStatusList.size();
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
if (levelCounts > 9)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
int index = firstItemIndex;
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
if (this.levelIndex > 0)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index++, new PanelItemBuilder().
|
2019-01-20 23:01:26 +01:00
|
|
|
icon(Material.SIGN).
|
2019-01-25 23:12:42 +01:00
|
|
|
name(this.user.getTranslation("challenges.gui.buttons.previous")).
|
2019-01-20 23:01:26 +01:00
|
|
|
clickHandler((panel, user1, clickType, slot) -> {
|
|
|
|
this.levelIndex--;
|
|
|
|
this.build();
|
|
|
|
return true;
|
|
|
|
}).build());
|
|
|
|
}
|
|
|
|
|
|
|
|
int currentIndex = this.levelIndex;
|
|
|
|
|
2019-01-27 12:10:43 +01:00
|
|
|
while (panelBuilder.nextSlot() != firstItemIndex + 9 && currentIndex < levelCounts)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
2019-02-12 14:48:27 +01:00
|
|
|
panelBuilder.item(index++, this.getLevelButton(this.levelStatusList.get(currentIndex++)));
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Check if one challenge is left
|
|
|
|
if (currentIndex + 1 == levelCounts)
|
|
|
|
{
|
2019-02-12 14:48:27 +01:00
|
|
|
panelBuilder.item(index, this.getLevelButton(this.levelStatusList.get(currentIndex)));
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
else if (currentIndex < levelCounts)
|
|
|
|
{
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(index, new PanelItemBuilder().
|
2019-01-20 23:01:26 +01:00
|
|
|
icon(Material.SIGN).
|
2019-01-25 23:12:42 +01:00
|
|
|
name(this.user.getTranslation("challenges.gui.buttons.next")).
|
2019-01-20 23:01:26 +01:00
|
|
|
clickHandler((panel, user1, clickType, slot) -> {
|
|
|
|
this.levelIndex++;
|
|
|
|
this.build();
|
|
|
|
return true;
|
|
|
|
}).build());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-02-12 14:48:27 +01:00
|
|
|
for (LevelStatus level : this.levelStatusList)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
|
|
|
// there are no limitations. Just bunch insert.
|
2019-01-27 12:10:43 +01:00
|
|
|
panelBuilder.item(firstItemIndex++, this.getLevelButton(level));
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Icon building
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method creates given challenges icon that on press tries to complete it.
|
|
|
|
* @param challenge which icon must be constructed.
|
|
|
|
* @return PanelItem icon for challenge.
|
|
|
|
*/
|
2019-01-23 15:09:38 +01:00
|
|
|
private PanelItem getChallengeButton(Challenge challenge)
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
|
|
|
return new PanelItemBuilder().
|
|
|
|
icon(challenge.getIcon()).
|
|
|
|
name(challenge.getFriendlyName().isEmpty() ? challenge.getUniqueId() : challenge.getFriendlyName()).
|
2019-02-12 12:03:13 +01:00
|
|
|
description(GuiUtils.stringSplit(this.generateChallengeDescription(challenge, this.user.getPlayer()),
|
2019-02-11 14:29:19 +01:00
|
|
|
this.addon.getChallengesSettings().getLoreLineLength())).
|
2019-01-20 23:01:26 +01:00
|
|
|
clickHandler((panel, user1, clickType, slot) -> {
|
2019-01-28 20:01:26 +01:00
|
|
|
if (TryToComplete.complete(this.addon,
|
2019-01-20 23:01:26 +01:00
|
|
|
this.user,
|
|
|
|
challenge,
|
|
|
|
this.world,
|
2019-01-24 22:29:56 +01:00
|
|
|
this.topLabel,
|
2019-01-28 20:01:26 +01:00
|
|
|
this.permissionPrefix))
|
|
|
|
{
|
2019-01-30 00:03:41 +01:00
|
|
|
panel.getInventory().setItem(slot, this.getChallengeButton(challenge).getItem());
|
2019-01-28 20:01:26 +01:00
|
|
|
}
|
|
|
|
|
2019-01-20 23:01:26 +01:00
|
|
|
return true;
|
|
|
|
}).
|
2019-02-12 15:18:21 +01:00
|
|
|
glow(this.addon.getChallengesSettings().isAddCompletedGlow() &&
|
|
|
|
this.challengesManager.isChallengeComplete(this.user, challenge)).
|
2019-01-20 23:01:26 +01:00
|
|
|
build();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method creates button for given level.
|
|
|
|
* @param level which button must be created.
|
|
|
|
* @return Button for given level.
|
|
|
|
*/
|
|
|
|
private PanelItem getLevelButton(LevelStatus level)
|
|
|
|
{
|
|
|
|
// Create a nice name for the level
|
|
|
|
String name = level.getLevel().getFriendlyName().isEmpty() ?
|
|
|
|
level.getLevel().getUniqueId() :
|
|
|
|
level.getLevel().getFriendlyName();
|
|
|
|
|
|
|
|
ItemStack icon;
|
|
|
|
List<String> description;
|
|
|
|
PanelItem.ClickHandler clickHandler;
|
2019-01-24 23:59:06 +01:00
|
|
|
boolean glow;
|
2019-01-20 23:01:26 +01:00
|
|
|
|
2019-02-12 14:48:27 +01:00
|
|
|
if (level == this.lastSelectedLevel)
|
|
|
|
{
|
|
|
|
icon = level.getLevel().getIcon();
|
|
|
|
description = GuiUtils.stringSplit(
|
|
|
|
this.generateLevelDescription(level.getLevel(), user.getPlayer()),
|
|
|
|
this.addon.getChallengesSettings().getLoreLineLength());
|
|
|
|
clickHandler = null;
|
|
|
|
glow = true;
|
|
|
|
}
|
|
|
|
else if (level.isUnlocked())
|
2019-01-20 23:01:26 +01:00
|
|
|
{
|
|
|
|
icon = level.getLevel().getIcon();
|
2019-02-11 14:29:19 +01:00
|
|
|
description = GuiUtils.stringSplit(
|
2019-02-12 14:36:16 +01:00
|
|
|
this.generateLevelDescription(level.getLevel(), user.getPlayer()),
|
2019-02-11 14:29:19 +01:00
|
|
|
this.addon.getChallengesSettings().getLoreLineLength());
|
2019-01-20 23:01:26 +01:00
|
|
|
clickHandler = (panel, user1, clickType, slot) -> {
|
|
|
|
this.lastSelectedLevel = level;
|
|
|
|
|
2019-02-12 14:48:27 +01:00
|
|
|
// Reset page index for challenges.
|
2019-01-20 23:01:26 +01:00
|
|
|
this.pageIndex = 0;
|
|
|
|
|
|
|
|
this.build();
|
|
|
|
return true;
|
|
|
|
};
|
2019-02-12 15:18:21 +01:00
|
|
|
glow = this.addon.getChallengesSettings().isAddCompletedGlow() &&
|
|
|
|
this.challengesManager.isLevelCompleted(this.user, level.getLevel());
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
icon = new ItemStack(Material.BOOK);
|
|
|
|
|
2019-01-26 13:46:03 +01:00
|
|
|
description = GuiUtils.stringSplit(
|
2019-02-12 00:38:16 +01:00
|
|
|
this.user.getTranslation("challenges.gui.descriptions.level-locked",
|
|
|
|
"[count]", Integer.toString(level.getNumberOfChallengesStillToDo()),
|
|
|
|
"[level]", level.getPreviousLevel().getFriendlyName()),
|
2019-02-11 14:29:19 +01:00
|
|
|
this.addon.getChallengesSettings().getLoreLineLength());
|
2019-01-20 23:01:26 +01:00
|
|
|
|
|
|
|
clickHandler = null;
|
2019-01-24 23:59:06 +01:00
|
|
|
glow = false;
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
|
2019-01-24 23:59:06 +01:00
|
|
|
return new PanelItem(icon, name, description, glow, clickHandler, false);
|
2019-01-20 23:01:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Variables
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This will be used if free challenges are more then 18.
|
|
|
|
*/
|
|
|
|
private int freeChallengeIndex = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This will be used if levels are more then 9.
|
|
|
|
*/
|
|
|
|
private int levelIndex;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This list contains all information about level completion in current world.
|
|
|
|
*/
|
|
|
|
private List<LevelStatus> levelStatusList;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This indicate last selected level.
|
|
|
|
*/
|
|
|
|
private LevelStatus lastSelectedLevel;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Challenge Manager object.
|
|
|
|
*/
|
|
|
|
private ChallengesManager challengesManager;
|
|
|
|
}
|