-
-
Notifications
You must be signed in to change notification settings - Fork 17
/
Challenge.java
111 lines (102 loc) · 5.34 KB
/
Challenge.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package io.github.thatsmusic99.headsplus.inventories.icons.content;
import io.github.thatsmusic99.headsplus.HeadsPlus;
import io.github.thatsmusic99.headsplus.api.HPPlayer;
import io.github.thatsmusic99.headsplus.config.ConfigInventories;
import io.github.thatsmusic99.headsplus.config.MessagesManager;
import io.github.thatsmusic99.headsplus.inventories.icons.Content;
import io.github.thatsmusic99.headsplus.util.HPUtils;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
public class Challenge extends Content {
private io.github.thatsmusic99.headsplus.api.Challenge challenge;
private String reward;
public Challenge(io.github.thatsmusic99.headsplus.api.Challenge challenge, Player player) {
super(challenge.isComplete(player) ? challenge.getCompleteIcon().clone() : challenge.getIcon().clone());
this.challenge = challenge;
this.reward = challenge.getReward().getRewardString(player, challenge.getDifficulty());
initNameAndLore("challenge", player);
}
public Challenge() {
super();
}
@Override
public boolean onClick(Player player, InventoryClickEvent event) {
try {
if (event.isLeftClick()) {
if (!challenge.isComplete(player)) {
challenge.canComplete(player).thenAcceptAsync(result -> {
if (result) {
challenge.complete(player);
item.setType(challenge.getCompleteIcon().getType());
initNameAndLore("challenge", player);
event.getInventory().setItem(event.getSlot(), item);
} else {
MessagesManager.get().sendMessage("commands.challenges.cant-complete-challenge", player);
}
}, HeadsPlus.sync);
} else {
MessagesManager.get().sendMessage("commands.challenges.already-complete-challenge", player);
}
} else {
HPPlayer hpPlayer = HPPlayer.getHPPlayer(player.getUniqueId());
if (hpPlayer.hasChallengePinned(challenge)) {
hpPlayer.removeChallengePin(challenge);
} else {
hpPlayer.addChallengePin(challenge);
}
initNameAndLore("challenge", player);
event.getInventory().setItem(event.getSlot(), item);
}
} catch (NullPointerException ignored) {
}
return false;
}
@Override
public String getId() {
return "challenge";
}
@Override
public void initNameAndLore(String id, Player player) {
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(MessagesManager.get().formatMsg(ConfigInventories.get().getString("icons.challenge" +
".display-name")
.replaceAll("\\{challenge-name}", challenge.getChallengeHeader()), player));
List<String> lore = new ArrayList<>();
for (String loreStr : ConfigInventories.get().getStringList("icons.challenge.lore")) {
if (loreStr.contains("{challenge-lore}")) {
for (String loreStr2 : challenge.getDescription()) {
lore.add(MessagesManager.get().formatMsg(loreStr2, player));
}
} else {
HPUtils.parseLorePlaceholders(lore, MessagesManager.get().formatMsg(loreStr, player),
new HPUtils.PlaceholderInfo("{completed}",
MessagesManager.get().getString("commands.challenges.challenge-completed", player),
challenge.isComplete(player)),
new HPUtils.PlaceholderInfo("{pinned}",
MessagesManager.get().getString("inventory.icon.challenge.pinned", player),
HPPlayer.getHPPlayer(player.getUniqueId()).hasChallengePinned(challenge)),
new HPUtils.PlaceholderInfo("{reward}", reward, true),
new HPUtils.PlaceholderInfo("{challenge-reward}", reward, true),
new HPUtils.PlaceholderInfo("{xp}", challenge.getGainedXP(), true),
new HPUtils.PlaceholderInfo("{challenge-xp}", challenge.getGainedXP(), true),
new HPUtils.PlaceholderInfo("{total}", challenge.getRequiredHeadAmount(), true),
new HPUtils.PlaceholderInfo("{heads}",
() -> {
try {
return String.valueOf(challenge.getStatSync(player.getUniqueId()));
} catch (ExecutionException | InterruptedException e) {
HeadsPlus.get().getLogger().warning("An internal error occurred showing the heads placeholder.");
e.printStackTrace();
return "Nothing to see here. Shh.";
}
}, true));
}
}
meta.setLore(lore);
item.setItemMeta(meta);
}
}