2017-12-29 05:39:07 +01:00
|
|
|
package bskyblock.addon.challenges.panel;
|
2017-11-27 08:13:17 +01:00
|
|
|
|
2018-02-20 04:50:34 +01:00
|
|
|
import java.util.Arrays;
|
2017-11-27 08:13:17 +01:00
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
|
2017-12-29 05:39:07 +01:00
|
|
|
import bskyblock.addon.challenges.Challenges;
|
|
|
|
import bskyblock.addon.challenges.ChallengesManager;
|
|
|
|
import bskyblock.addon.challenges.ChallengesManager.LevelStatus;
|
2018-02-20 04:50:34 +01:00
|
|
|
import bskyblock.addon.challenges.database.object.ChallengesData;
|
2018-02-23 08:52:39 +01:00
|
|
|
import bskyblock.addon.challenges.database.object.ChallengesData.ChallengeType;
|
2017-12-29 05:39:07 +01:00
|
|
|
import us.tastybento.bskyblock.api.commands.User;
|
|
|
|
import us.tastybento.bskyblock.api.panels.ClickType;
|
|
|
|
import us.tastybento.bskyblock.api.panels.Panel;
|
|
|
|
import us.tastybento.bskyblock.api.panels.PanelItem;
|
|
|
|
import us.tastybento.bskyblock.api.panels.builders.PanelBuilder;
|
|
|
|
import us.tastybento.bskyblock.api.panels.builders.PanelItemBuilder;
|
2017-11-27 08:13:17 +01:00
|
|
|
|
2017-12-29 05:39:07 +01:00
|
|
|
|
|
|
|
public class ChallengesPanels {
|
2018-02-23 08:52:39 +01:00
|
|
|
private static final boolean DEBUG = true;
|
|
|
|
private Challenges addon;
|
2017-11-27 08:13:17 +01:00
|
|
|
private ChallengesManager manager;
|
|
|
|
|
|
|
|
public ChallengesPanels(Challenges plugin, ChallengesManager manager){
|
2018-02-23 08:52:39 +01:00
|
|
|
this.addon = plugin;
|
2017-11-27 08:13:17 +01:00
|
|
|
this.manager = manager;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-12-29 05:39:07 +01:00
|
|
|
* @param user
|
2017-11-27 08:13:17 +01:00
|
|
|
* @return
|
|
|
|
*/
|
2017-12-29 05:39:07 +01:00
|
|
|
public void getChallenges(User user) {
|
|
|
|
getChallenges(user, "");
|
2017-11-27 08:13:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Dynamically creates an inventory of challenges for the player showing the
|
|
|
|
* level
|
|
|
|
*/
|
2017-12-29 05:39:07 +01:00
|
|
|
public void getChallenges(User user, String level) {
|
2018-02-23 08:52:39 +01:00
|
|
|
addon.getLogger().info("DEBUG: level requested = " + level);
|
2017-12-29 05:39:07 +01:00
|
|
|
PanelBuilder panelBuilder = new PanelBuilder()
|
|
|
|
.setName(user.getTranslation("challenges.guiTitle"));
|
2018-02-23 08:52:39 +01:00
|
|
|
|
|
|
|
addChallengeItems(panelBuilder, user, level);
|
|
|
|
addFreeChallanges(panelBuilder);
|
|
|
|
addNavigation(panelBuilder, user);
|
|
|
|
|
|
|
|
// Create the panel
|
|
|
|
addon.getLogger().info("DEBUG: panel created");
|
|
|
|
Panel panel = panelBuilder.build();
|
|
|
|
panel.open(user);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void addFreeChallanges(PanelBuilder panelBuilder) {
|
|
|
|
/*
|
|
|
|
// Add the free challenges if not already shown (which can happen if all of the challenges are done!)
|
|
|
|
if (!level.equals("") && challengeList.containsKey("")) {
|
|
|
|
for (String freeChallenges: challengeList.get("")) {
|
|
|
|
CPItem item = createItem(freeChallenges, player);
|
|
|
|
if (item != null) {
|
|
|
|
cp.add(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private void addChallengeItems(PanelBuilder panelBuilder, User user, String level) {
|
|
|
|
|
2018-02-20 04:50:34 +01:00
|
|
|
List<ChallengesData> levelChallenges = manager.getChallenges(level);
|
2017-11-27 08:13:17 +01:00
|
|
|
// Do some checking
|
|
|
|
if (DEBUG)
|
2018-02-23 08:52:39 +01:00
|
|
|
addon.getLogger().info("DEBUG: Opening level " + level + " with " + levelChallenges.size() + " challenges");
|
|
|
|
|
2017-11-27 08:13:17 +01:00
|
|
|
// Only show a control panel for the level requested.
|
2018-02-20 04:50:34 +01:00
|
|
|
for (ChallengesData challenge : levelChallenges) {
|
2018-02-23 08:52:39 +01:00
|
|
|
addon.getLogger().info("DEBUG: Adding challenge " + challenge.getUniqueId());
|
|
|
|
// Check completion
|
|
|
|
boolean completed = manager.isChallengeComplete(user, challenge.getUniqueId());
|
|
|
|
addon.getLogger().info("DEBUG: challenge completed = " + completed);
|
|
|
|
// If challenge is removed after completion, remove it
|
|
|
|
if (completed && challenge.isRemoveWhenCompleted()) {
|
|
|
|
addon.getLogger().info("DEBUG: ignored completed");
|
2017-11-27 08:13:17 +01:00
|
|
|
continue;
|
2018-02-23 08:52:39 +01:00
|
|
|
}
|
2017-12-29 05:39:07 +01:00
|
|
|
PanelItem item = new PanelItemBuilder()
|
2018-02-20 04:50:34 +01:00
|
|
|
.icon(challenge.getIcon())
|
|
|
|
.name(challenge.getFriendlyName().isEmpty() ? challenge.getUniqueId() : challenge.getFriendlyName())
|
|
|
|
.description(challenge.getDescription())
|
|
|
|
.glow(completed)
|
|
|
|
.clickHandler(new PanelItem.ClickHandler() {
|
2017-12-29 05:39:07 +01:00
|
|
|
@Override
|
2018-02-20 04:50:34 +01:00
|
|
|
public boolean onClick(User user, ClickType click) {
|
2018-02-23 08:52:39 +01:00
|
|
|
if (!challenge.getChallengeType().equals(ChallengeType.ICON)) {
|
|
|
|
new TryToComplete(addon, user, manager, challenge);
|
|
|
|
}
|
|
|
|
return true;
|
2017-12-29 05:39:07 +01:00
|
|
|
}
|
|
|
|
})
|
2017-11-27 08:13:17 +01:00
|
|
|
.build();
|
2018-02-23 08:52:39 +01:00
|
|
|
addon.getLogger().info("requested slot" + challenge.getSlot());
|
2017-12-29 05:39:07 +01:00
|
|
|
panelBuilder.addItem(challenge.getSlot(),item);
|
2017-11-27 08:13:17 +01:00
|
|
|
}
|
2018-02-23 08:52:39 +01:00
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private void addNavigation(PanelBuilder panelBuilder, User user) {
|
|
|
|
// TODO Auto-generated method stub
|
2017-11-27 08:13:17 +01:00
|
|
|
// Add navigation to other levels
|
2017-12-29 05:39:07 +01:00
|
|
|
for (LevelStatus status: manager.getChallengeLevelStatus(user)) {
|
2017-11-27 08:13:17 +01:00
|
|
|
String name = ChatColor.GOLD + (status.getLevel().getFriendlyName().isEmpty() ? status.getLevel().getUniqueId() : status.getLevel().getFriendlyName());
|
|
|
|
if (status.isComplete() || status.getPreviousLevel() == null) {
|
|
|
|
// Clicking on this icon will open up this level's challenges
|
2017-12-29 05:39:07 +01:00
|
|
|
PanelItem item = new PanelItemBuilder()
|
2018-02-20 04:50:34 +01:00
|
|
|
.icon(new ItemStack(Material.BOOK_AND_QUILL))
|
|
|
|
.name(name)
|
|
|
|
.description(Arrays.asList(user.getTranslation("challenges.navigation","[level]",name)))
|
|
|
|
.clickHandler(new PanelItem.ClickHandler() {
|
2018-02-23 08:52:39 +01:00
|
|
|
|
2017-12-29 05:39:07 +01:00
|
|
|
@Override
|
2018-02-20 04:50:34 +01:00
|
|
|
public boolean onClick(User user, ClickType click) {
|
|
|
|
// TODO Auto-generated method stub
|
2017-12-29 05:39:07 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
})
|
|
|
|
//.setCommand(CHALLENGE_COMMAND + " c " + status.getLevel().getUniqueId())
|
2017-11-27 08:13:17 +01:00
|
|
|
.build();
|
2017-12-29 05:39:07 +01:00
|
|
|
panelBuilder.addItem(item);
|
2017-11-27 08:13:17 +01:00
|
|
|
} else {
|
|
|
|
// Clicking on this icon will do nothing because the challenge is not unlocked yet
|
|
|
|
String previousLevelName = ChatColor.GOLD + (status.getPreviousLevel().getFriendlyName().isEmpty() ? status.getPreviousLevel().getUniqueId() : status.getPreviousLevel().getFriendlyName());
|
2017-12-29 05:39:07 +01:00
|
|
|
PanelItem item = new PanelItemBuilder()
|
2018-02-20 04:50:34 +01:00
|
|
|
.icon(new ItemStack(Material.BOOK))
|
|
|
|
.name(name)
|
|
|
|
.description(Arrays.asList(user.getTranslation("challenges.toComplete", "[challengesToDo]",String.valueOf(status.getNumberOfChallengesStillToDo()), "[thisLevel]", previousLevelName)))
|
2017-11-27 08:13:17 +01:00
|
|
|
.build();
|
|
|
|
panelBuilder.addItem(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-29 05:39:07 +01:00
|
|
|
/*
|
2017-11-27 08:13:17 +01:00
|
|
|
@EventHandler(priority = EventPriority.LOWEST)
|
|
|
|
public void onInventoryClick(InventoryClickEvent event) {
|
|
|
|
Player player = (Player) event.getWhoClicked(); // The player that
|
|
|
|
// clicked the item
|
|
|
|
//UUID playerUUID = player.getUniqueId();
|
|
|
|
Inventory inventory = event.getInventory(); // The inventory that was
|
|
|
|
// clicked in
|
|
|
|
// Check this is the right panel
|
|
|
|
if (inventory.getName() == null || !inventory.getName().equals(plugin.getLocale(player).get("challenges.guiTitle"))) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
event.setCancelled(true);
|
|
|
|
if (!event.getClick().equals(ClickType.LEFT)) {
|
|
|
|
inventory.clear();
|
|
|
|
player.closeInventory();
|
|
|
|
player.updateInventory();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
int slot = event.getRawSlot();
|
|
|
|
if (slot == -999) {
|
|
|
|
inventory.clear();
|
|
|
|
player.closeInventory();
|
|
|
|
event.setCancelled(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// TODO: Deal with the clicking
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST)
|
|
|
|
public void onInventoryClose(InventoryCloseEvent event) {
|
|
|
|
challengePanels.remove(event.getPlayer().getUniqueId());
|
|
|
|
plugin.getLogger().info("DEBUG: removing inv " + challengePanels.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Clean up the hashmap should the player open up another inventory
|
|
|
|
* @param event
|
|
|
|
*/
|
2017-12-29 05:39:07 +01:00
|
|
|
/*
|
2017-11-27 08:13:17 +01:00
|
|
|
@EventHandler(priority = EventPriority.LOWEST)
|
|
|
|
public void onInventoryOpen(InventoryOpenEvent event) {
|
|
|
|
Player player = (Player) event.getPlayer();
|
|
|
|
UUID playerUUID = player.getUniqueId();
|
|
|
|
Inventory inventory = event.getInventory(); // The inventory that was
|
|
|
|
if (inventory.getName() == null || !inventory.getName().equals(plugin.getLocale(player).get("challenges.guiTitle"))) {
|
|
|
|
challengePanels.remove(playerUUID);
|
|
|
|
plugin.getLogger().info("DEBUG: removing inv " + challengePanels.size());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.NORMAL)
|
|
|
|
public void onLogOut(PlayerQuitEvent event) {
|
|
|
|
challengePanels.remove(event.getPlayer().getUniqueId());
|
|
|
|
plugin.getLogger().info("DEBUG: removing inv " + challengePanels.size());
|
|
|
|
}
|
2018-02-23 08:52:39 +01:00
|
|
|
*/
|
2017-11-27 08:13:17 +01:00
|
|
|
}
|