45public class MysteryBoxEvent
extends TickableTask {
46 private final Player player;
47 private List<MysteryItem> items;
48 private List<MysteryItem> allItems;
53 MysteryBoxEvent(
Player player) {
56 this.items =
new ArrayList<>();
57 this.allItems =
new ArrayList<>();
58 this.speed =
Utility.random(30, 40);
59 this.mysteryBox = player.mysteryBox;
63 allItems.add(items.get(0));
66 allItems.remove(next);
73 if (!items.contains(item)) {
81 private double getItemProbability(
MysteryItem item) {
82 switch (item.rarity) {
98 private void reward() {
99 double randomValue = Math.random();
100 double cumulativeProbability = 0.0;
103 Collections.sort(items, Comparator.comparingDouble(this::getItemProbability).reversed());
106 double itemProbability = getItemProbability(item);
107 cumulativeProbability += itemProbability;
108 if (randomValue <= cumulativeProbability) {
115 reward = items.get(0);
118 World.
sendMessage(
"<icon=17><col=5739B3> Tarnish: <col=" + player.right.getColor() +
">" + player.getName() +
" </col>has won " +
Utility.
getAOrAn(reward.getName()) +
" <col=5739B3>" + reward.getName() +
" </col>from the <col=5739B3>" + mysteryBox.box.name() +
"</col>.");
121 player.locking.unlock();
122 player.inventory.add(reward.getId(), reward.getAmount());
123 player.message(
"Congratulations! You have won @red@" +
Utility.
getAOrAn(reward.getName()) +
" " + reward.getName() +
"!\nThis item falls in the rarity of " + reward.rarity.name().toLowerCase() +
".");
124 System.out.println(
"Rarity: " + reward.rarity.name().toLowerCase());
128 return player.mysteryBox.box !=
null;
132 player.dialogueFactory.clear();
133 player.locking.lock();
134 allItems.addAll(Arrays.asList(mysteryBox.box.rewards()));
135 player.inventory.remove(mysteryBox.box.item(), 1);
136 mysteryBox.count = player.inventory.computeAmountForId(mysteryBox.box.item());
137 Collections.shuffle(allItems);
138 for (
int index = 0; index < 11; index++) {
139 if (index >= allItems.size())
143 allItems.remove(index);
146 player.send(
new SendColor(59508, 0xF01616));
147 player.send(
new SendString(
"You have " + mysteryBox.count +
" mystery box available!", 59507));
151 protected void tick() {
158 player.inventory.add(mysteryBox.box.item(), 1);
void onCancel(boolean logout)