Skip to content

Commit 998b45f

Browse files
committed
feat: Rusty
1 parent 14d3fc0 commit 998b45f

11 files changed

Lines changed: 1056 additions & 24 deletions

File tree

type.generic/src/main/java/net/swofty/type/generic/data/datapoints/DatapointToggles.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,11 @@ public enum ToggleType {
9999
HAS_SPOKEN_TO_JAX(false),
100100
HAS_REALLY_SPOKEN_TO_JAX(false),
101101
HAS_SPOKEN_TO_ALCHEMIST(false),
102-
HAS_FOUND_LAZY_MINER_PICKAXE(false),
103102
PAPER_ICONS(false),
104103
LOBBY_SHOW_PLAYERS(true),
105-
AUTO_ACCEPT_QUESTS(false)
104+
AUTO_ACCEPT_QUESTS(false),
105+
RUSTY_PURCHASE_CONFIRMATION(false),
106+
RUSTY_SORT_BY_RARITY(false),
106107
;
107108

108109
private final boolean defaultValue;

type.goldmine/src/main/java/net/swofty/type/goldmine/entity/EntityLostPickaxe.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,27 @@ public void spawn() {
4545
super.spawn();
4646
InteractionEntity interactionEntity = new InteractionEntity(width, height, (p, event) -> {
4747
SkyBlockPlayer player = (SkyBlockPlayer) p;
48-
boolean hasFound = player.getToggles().get(DatapointToggles.Toggles.ToggleType.HAS_FOUND_LAZY_MINER_PICKAXE);
48+
MissionData data = player.getMissionData();
49+
50+
if (!data.isCurrentlyActive(MissionFindLazyMinerPickaxe.class)) return;
51+
52+
boolean hasFound = player.getMissionData().hasCompleted(MissionFindLazyMinerPickaxe.class);
4953
if (hasFound) {
5054
player.sendMessage("§cYou have already picked that up!");
5155
return;
5256
}
5357

54-
// Set the toggle for backwards compatibility and special case handling
55-
player.getToggles().set(DatapointToggles.Toggles.ToggleType.HAS_FOUND_LAZY_MINER_PICKAXE, true);
5658
player.sendMessage("§aYou have found the Lazy Miner's Pickaxe!");
5759

58-
// End mission if active (this will start MissionTalkToLazyMiner)
59-
MissionData data = player.getMissionData();
60-
if (data.isCurrentlyActive(MissionFindLazyMinerPickaxe.class)) {
61-
data.endMission(MissionFindLazyMinerPickaxe.class);
62-
}
60+
data.endMission(MissionFindLazyMinerPickaxe.class);
6361

6462
SkyBlockItem pickaxe = new SkyBlockItem(ItemType.IRON_PICKAXE);
63+
pickaxe.getAttributeHandler().addEnchantment(
64+
new SkyBlockEnchantment(
65+
EnchantmentType.EFFICIENCY,
66+
1
67+
)
68+
);
6569
pickaxe.getAttributeHandler().addEnchantment(
6670
new SkyBlockEnchantment(
6771
EnchantmentType.SMELTING_TOUCH,

type.goldmine/src/main/java/net/swofty/type/goldmine/gui/GUIRusty.java renamed to type.goldmine/src/main/java/net/swofty/type/goldmine/gui/rusty/GUIRusty.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.swofty.type.goldmine.gui;
1+
package net.swofty.type.goldmine.gui.rusty;
22

33
import net.minestom.server.event.inventory.InventoryPreClickEvent;
44
import net.minestom.server.inventory.InventoryType;
@@ -23,7 +23,7 @@ public void onOpen(InventoryGUIOpenEvent event) {
2323
set(new GUIClickableItem(10) {
2424
@Override
2525
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
26-
26+
new GUIRustyWeaponsAndGear().open(player);
2727
}
2828

2929
@Override
@@ -42,13 +42,13 @@ public ItemStack.Builder getItem(HypixelPlayer player) {
4242
set(new GUIClickableItem(12) {
4343
@Override
4444
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
45-
45+
new GUIRustyPetsAndPetItems().open(player);
4646
}
4747

4848
@Override
4949
public ItemStack.Builder getItem(HypixelPlayer player) {
50-
return ItemStackCreator.getStack(
51-
"§aPets", Material.PLAYER_HEAD, 1,
50+
return ItemStackCreator.getStackHead(
51+
"§aPets", "4e794274c1bb197ad306540286a7aa952974f5661bccf2b725424f6ed79c7884", 1,
5252
"§7Contains pets, and some reobtainable",
5353
"§7pet items from all around SkyBlock",
5454
"§7",
@@ -60,13 +60,13 @@ public ItemStack.Builder getItem(HypixelPlayer player) {
6060
set(new GUIClickableItem(14) {
6161
@Override
6262
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
63-
63+
new GUIRustyAccessories().open(player);
6464
}
6565

6666
@Override
6767
public ItemStack.Builder getItem(HypixelPlayer player) {
68-
return ItemStackCreator.getStack(
69-
"§aAccessories", Material.PLAYER_HEAD, 1,
68+
return ItemStackCreator.getStackHead(
69+
"§aAccessories", "3ada666715bfd2aa9fbd81daef59b9fe1c96c4fa0d08dbc72eae5633177dbf88", 1,
7070
"§7Contains accessories and talismans",
7171
"§7from all around SkyBlock.",
7272
"§7",
@@ -78,7 +78,7 @@ public ItemStack.Builder getItem(HypixelPlayer player) {
7878
set(new GUIClickableItem(16) {
7979
@Override
8080
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
81-
81+
new GUIRustyMiscellaneous().open(player);
8282
}
8383

8484
@Override
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
package net.swofty.type.goldmine.gui.rusty;
2+
3+
import net.minestom.server.component.DataComponents;
4+
import net.minestom.server.event.inventory.InventoryPreClickEvent;
5+
import net.minestom.server.inventory.InventoryType;
6+
import net.minestom.server.item.ItemStack;
7+
import net.minestom.server.item.Material;
8+
import net.swofty.commons.StringUtility;
9+
import net.swofty.type.generic.data.datapoints.DatapointToggles;
10+
import net.swofty.type.generic.gui.inventory.HypixelPaginatedGUI;
11+
import net.swofty.type.generic.gui.inventory.ItemStackCreator;
12+
import net.swofty.type.generic.gui.inventory.item.GUIClickableItem;
13+
import net.swofty.type.generic.gui.inventory.item.GUIItem;
14+
import net.swofty.type.generic.user.HypixelPlayer;
15+
import net.swofty.type.generic.utility.PaginationList;
16+
import net.swofty.type.skyblockgeneric.gui.inventories.shop.GUIConfirmBuy;
17+
import net.swofty.type.skyblockgeneric.item.SkyBlockItem;
18+
import net.swofty.type.skyblockgeneric.item.updater.NonPlayerItemUpdater;
19+
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;
20+
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
import java.util.function.Function;
24+
25+
public class GUIRustyAccessories extends HypixelPaginatedGUI<GUIRustyAccessories.DisplayItem> {
26+
public GUIRustyAccessories() {
27+
super(InventoryType.CHEST_6_ROW);
28+
}
29+
30+
@Override
31+
public boolean allowHotkeying() {
32+
return false;
33+
}
34+
35+
@Override
36+
public void onBottomClick(InventoryPreClickEvent e) {
37+
e.setCancelled(true);
38+
}
39+
40+
@Override
41+
public int[] getPaginatedSlots() {
42+
return new int[]{
43+
10, 11, 12, 13, 14, 15, 16,
44+
19, 20, 21, 22, 23, 24, 25,
45+
28, 29, 30, 31, 32, 33, 34,
46+
37, 38, 39, 40, 41, 42, 43
47+
};
48+
}
49+
50+
@Override
51+
public PaginationList<DisplayItem> fillPaged(HypixelPlayer player, PaginationList<DisplayItem> paged) {
52+
List<DisplayItem> items = new ArrayList<>();
53+
SkyBlockPlayer skyblockPlayer = (SkyBlockPlayer) player;
54+
55+
for (MiscellaneousItems miscItem : MiscellaneousItems.values()) {
56+
boolean unlocked = miscItem.hasUnlocked.apply(skyblockPlayer);
57+
items.add(new DisplayItem(miscItem, unlocked));
58+
}
59+
60+
if (player.getToggles().get(DatapointToggles.Toggles.ToggleType.RUSTY_SORT_BY_RARITY)) {
61+
items.sort((item1, item2) -> {
62+
if (item1.unlocked && !item2.unlocked) return -1;
63+
if (!item1.unlocked && item2.unlocked) return 1;
64+
65+
int rarity1 = item1.miscItem.item.getAttributeHandler().getRarity().ordinal();
66+
int rarity2 = item2.miscItem.item.getAttributeHandler().getRarity().ordinal();
67+
return Integer.compare(rarity1, rarity2);
68+
});
69+
} else {
70+
items.sort((item1, item2) -> {
71+
if (item1.unlocked && !item2.unlocked) return -1;
72+
if (!item1.unlocked && item2.unlocked) return 1;
73+
return Integer.compare(item1.miscItem.ordinal(), item2.miscItem.ordinal());
74+
});
75+
}
76+
77+
paged.addAll(items);
78+
return paged;
79+
}
80+
81+
@Override
82+
public boolean shouldFilterFromSearch(String query, DisplayItem item) {
83+
return false;
84+
}
85+
86+
@Override
87+
public void performSearch(HypixelPlayer player, String query, int page, int maxPage) {
88+
border(ItemStackCreator.createNamedItemStack(Material.BLACK_STAINED_GLASS_PANE, ""));
89+
set(GUIClickableItem.getGoBackItem(49, new GUIRusty()));
90+
91+
set(new GUIClickableItem(48) {
92+
@Override
93+
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
94+
boolean purchaseConfirmation = player.getToggles().get(DatapointToggles.Toggles.ToggleType.RUSTY_PURCHASE_CONFIRMATION);
95+
player.getToggles().set(DatapointToggles.Toggles.ToggleType.RUSTY_PURCHASE_CONFIRMATION, !purchaseConfirmation);
96+
97+
GUIRustyMiscellaneous newGui = new GUIRustyMiscellaneous();
98+
newGui.open(player);
99+
}
100+
101+
@Override
102+
public ItemStack.Builder getItem(HypixelPlayer player) {
103+
return ItemStackCreator.getStack("§aShop Confirmations",
104+
player.getToggles().get(DatapointToggles.Toggles.ToggleType.RUSTY_PURCHASE_CONFIRMATION) ? Material.LIME_DYE : Material.LIGHT_GRAY_DYE,
105+
1, "§7Confirm when purchasing item worth", "§7at least a million coins.", "",
106+
"§eClick to " + (player.getToggles().get(DatapointToggles.Toggles.ToggleType.RUSTY_PURCHASE_CONFIRMATION) ? "disable" : "enable") + "!");
107+
}
108+
});
109+
110+
set(new GUIItem(50) {
111+
@Override
112+
public ItemStack.Builder getItem(HypixelPlayer player) {
113+
return ItemStackCreator.getStack("§aThe Janitor", Material.REDSTONE_TORCH, 1,
114+
"§7Rusty watches over the neatness of the §6Gold",
115+
"§6Mines§7, but really he watches over the whole of",
116+
"§aSkyBlock§7.",
117+
"",
118+
"§7If you misplace a §6one-time reward §7from a",
119+
"§7quest, it may be offered here!");
120+
}
121+
});
122+
123+
set(new GUIClickableItem(51) {
124+
@Override
125+
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
126+
boolean sortByRarity = player.getToggles().get(DatapointToggles.Toggles.ToggleType.RUSTY_SORT_BY_RARITY);
127+
player.getToggles().set(DatapointToggles.Toggles.ToggleType.RUSTY_SORT_BY_RARITY, !sortByRarity);
128+
129+
GUIRustyMiscellaneous newGui = new GUIRustyMiscellaneous();
130+
newGui.open(player);
131+
}
132+
133+
@Override
134+
public ItemStack.Builder getItem(HypixelPlayer player) {
135+
return ItemStackCreator.getStack("§aSort by Rarity",
136+
Material.ENDER_EYE, 1,
137+
"§7Enabled: " + (player.getToggles().get(DatapointToggles.Toggles.ToggleType.RUSTY_SORT_BY_RARITY) ? "§aYES" : "§cNO"),
138+
"",
139+
"§eClick to toggle!");
140+
}
141+
});
142+
143+
if (page > 1) {
144+
set(createNavigationButton(this, 45, query, page, false));
145+
}
146+
if (page < maxPage) {
147+
set(createNavigationButton(this, 53, query, page, true));
148+
}
149+
}
150+
151+
@Override
152+
protected String getTitle(HypixelPlayer player, String query, int page, PaginationList paged) {
153+
return "Rusty ➜ Accessories";
154+
}
155+
156+
@Override
157+
public GUIClickableItem createItemFor(DisplayItem displayItem, int slot, HypixelPlayer player) {
158+
MiscellaneousItems miscItem = displayItem.miscItem;
159+
boolean unlocked = displayItem.unlocked;
160+
161+
if (!unlocked) {
162+
return new GUIClickableItem(slot) {
163+
@Override
164+
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
165+
}
166+
167+
@Override
168+
public ItemStack.Builder getItem(HypixelPlayer player) {
169+
return ItemStackCreator.getStackHead("§c???",
170+
"5359d91277242fc01c309accb87b533f1929be176ecba2cde63bf635e05e699b",
171+
1);
172+
}
173+
};
174+
}
175+
176+
return new GUIClickableItem(slot) {
177+
@Override
178+
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
179+
SkyBlockPlayer skyblockPlayer = (SkyBlockPlayer) player;
180+
SkyBlockItem item = miscItem.item;
181+
int price = miscItem.price;
182+
183+
if (player.getToggles().get(DatapointToggles.Toggles.ToggleType.RUSTY_PURCHASE_CONFIRMATION) && price >= 1_000_000) {
184+
new GUIConfirmBuy(item, price).open(player);
185+
return;
186+
}
187+
188+
if (skyblockPlayer.getCoins() >= price) {
189+
skyblockPlayer.addAndUpdateItem(item);
190+
skyblockPlayer.removeCoins(price);
191+
192+
skyblockPlayer.sendMessage("§aYou bought " + item.getDisplayName() + " §afor §6" + price + " Coins§a!");
193+
} else {
194+
skyblockPlayer.sendMessage("§4You don't have enough coins!");
195+
}
196+
}
197+
198+
@Override
199+
public ItemStack.Builder getItem(HypixelPlayer player) {
200+
ItemStack.Builder itemStack = new NonPlayerItemUpdater(miscItem.item).getUpdatedItem();
201+
List<String> lore = new ArrayList<>(itemStack.build().get(DataComponents.LORE).stream().map(StringUtility::getTextFromComponent).toList());
202+
203+
lore.add("");
204+
lore.add("§7Cost");
205+
lore.add("§6" + StringUtility.commaify(miscItem.price) + " Coins");
206+
lore.add("");
207+
lore.add("§eClick to trade!");
208+
209+
return ItemStackCreator.updateLore(itemStack, lore);
210+
}
211+
};
212+
}
213+
214+
public record DisplayItem(MiscellaneousItems miscItem, boolean unlocked) {
215+
}
216+
217+
private enum MiscellaneousItems {
218+
219+
;
220+
221+
private final SkyBlockItem item;
222+
private final int price;
223+
private final Function<SkyBlockPlayer, Boolean> hasUnlocked;
224+
225+
MiscellaneousItems(SkyBlockItem item, int price, Function<SkyBlockPlayer, Boolean> hasUnlocked) {
226+
this.item = item;
227+
this.price = price;
228+
this.hasUnlocked = hasUnlocked;
229+
}
230+
}
231+
}

0 commit comments

Comments
 (0)