Skip to content

Commit 1e62ff2

Browse files
authored
Rare Room Alerts (#2231)
1 parent be66666 commit 1e62ff2

File tree

4 files changed

+116
-0
lines changed

4 files changed

+116
-0
lines changed

src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,10 +755,12 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig
755755
.build())
756756
.build())
757757

758+
// Secret Sync
758759
.group(OptionGroup.createBuilder()
759760
.name(Component.translatable("skyblocker.config.dungeons.secretSync"))
760761
.collapsed(true)
761762
// TODO: Add description when labels work properly on MoulConfig
763+
// Soon?
762764
.option(Option.<Boolean>createBuilder()
763765
.name(Component.translatable("skyblocker.config.dungeons.secretSync.receiveMatchedRooms"))
764766
.tags(CommonTags.ADDED_IN_5_10_0)
@@ -785,6 +787,41 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig
785787
.build())
786788
.build())
787789

790+
// Rare Room Alert
791+
.group(OptionGroup.createBuilder()
792+
.name(Component.translatable("skyblocker.config.dungeons.rareRoomAlert"))
793+
.collapsed(true)
794+
.option(Option.<Boolean>createBuilder()
795+
.name(Component.translatable("skyblocker.config.dungeons.rareRoomAlert.enabled"))
796+
.description(Component.translatable("skyblocker.config.dungeons.rareRoomAlert.enabled.@Tooltip"))
797+
.binding(defaults.dungeons.rareRoomAlert.enabled,
798+
() -> config.dungeons.rareRoomAlert.enabled,
799+
newValue -> config.dungeons.rareRoomAlert.enabled = newValue)
800+
.controller(ConfigUtils.createBooleanController())
801+
.build())
802+
.option(Option.<Boolean>createBuilder()
803+
.name(Component.translatable("skyblocker.config.dungeons.rareRoomAlert.showForTrinity"))
804+
.binding(defaults.dungeons.rareRoomAlert.showForTrinity,
805+
() -> config.dungeons.rareRoomAlert.showForTrinity,
806+
newValue -> config.dungeons.rareRoomAlert.showForTrinity = newValue)
807+
.controller(ConfigUtils.createBooleanController())
808+
.build())
809+
.option(Option.<Boolean>createBuilder()
810+
.name(Component.translatable("skyblocker.config.dungeons.rareRoomAlert.showForTomioka"))
811+
.binding(defaults.dungeons.rareRoomAlert.showForTomioka,
812+
() -> config.dungeons.rareRoomAlert.showForTomioka,
813+
newValue -> config.dungeons.rareRoomAlert.showForTomioka = newValue)
814+
.controller(ConfigUtils.createBooleanController())
815+
.build())
816+
.option(Option.<Boolean>createBuilder()
817+
.name(Component.translatable("skyblocker.config.dungeons.rareRoomAlert.showForDuncan"))
818+
.binding(defaults.dungeons.rareRoomAlert.showForDuncan,
819+
() -> config.dungeons.rareRoomAlert.showForDuncan,
820+
newValue -> config.dungeons.rareRoomAlert.showForDuncan = newValue)
821+
.controller(ConfigUtils.createBooleanController())
822+
.build())
823+
.build())
824+
788825
// Mimic Message
789826
.group(OptionGroup.createBuilder()
790827
.name(Component.translatable("skyblocker.config.dungeons.mimicMessage"))

src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public class DungeonsConfig {
5757

5858
public SecretSync secretSync = new SecretSync();
5959

60+
public RareRoomAlert rareRoomAlert = new RareRoomAlert();
61+
6062
public MimicMessage mimicMessage = new MimicMessage();
6163

6264
public PrinceMessage princeMessage = new PrinceMessage();
@@ -250,6 +252,16 @@ public static class SecretSync {
250252
public boolean hideReceivedWaypoints = true;
251253
}
252254

255+
public static class RareRoomAlert {
256+
public boolean enabled = false;
257+
258+
public boolean showForTrinity = true;
259+
260+
public boolean showForTomioka = false;
261+
262+
public boolean showForDuncan = false;
263+
}
264+
253265
public static class MimicMessage {
254266
public boolean sendMimicMessage = true;
255267

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package de.hysky.skyblocker.skyblock.dungeon;
2+
3+
import de.hysky.skyblocker.annotations.Init;
4+
import de.hysky.skyblocker.config.SkyblockerConfigManager;
5+
import de.hysky.skyblocker.config.configs.DungeonsConfig;
6+
import de.hysky.skyblocker.events.DungeonEvents;
7+
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
8+
import de.hysky.skyblocker.utils.Constants;
9+
import de.hysky.skyblocker.utils.render.title.Title;
10+
import de.hysky.skyblocker.utils.render.title.TitleContainer;
11+
import net.minecraft.ChatFormatting;
12+
import net.minecraft.client.Minecraft;
13+
import net.minecraft.network.chat.Component;
14+
15+
import java.util.Locale;
16+
import java.util.function.Supplier;
17+
18+
public class RareRoomAlert {
19+
private static final Minecraft CLIENT = Minecraft.getInstance();
20+
private static final Supplier<DungeonsConfig.RareRoomAlert> CONFIG = () -> SkyblockerConfigManager.get().dungeons.rareRoomAlert;
21+
private static final String TRINITY_ROOM_NAME = "trinity-4";
22+
private static final String TOMIOKA_ROOM_NAME = "tomioka-0";
23+
private static final String DUNCAN_ROOM_NAME = "duncan-1";
24+
25+
@Init
26+
public static void init() {
27+
DungeonEvents.ROOM_MATCHED.register(room -> {
28+
if (!CONFIG.get().enabled) return;
29+
String roomName = room.getName();
30+
switch (roomName) {
31+
case TRINITY_ROOM_NAME -> {
32+
if (!CONFIG.get().showForTrinity) return;
33+
}
34+
case TOMIOKA_ROOM_NAME -> {
35+
if (!CONFIG.get().showForTomioka) return;
36+
}
37+
case DUNCAN_ROOM_NAME -> {
38+
if (!CONFIG.get().showForDuncan) return;
39+
}
40+
case null, default -> {
41+
return;
42+
}
43+
}
44+
showAlert(roomName);
45+
});
46+
}
47+
48+
private static void showAlert(String roomId) {
49+
if (CLIENT.player == null) return;
50+
51+
var roomData = DungeonManager.getRoomMetadata(roomId);
52+
String roomName = roomData != null ? roomData.name() : roomId;
53+
54+
TitleContainer.addTitle(new Title(Component.literal(roomName.toUpperCase(Locale.ENGLISH)).withStyle(ChatFormatting.LIGHT_PURPLE)), 100);
55+
TitleContainer.playNotificationSound();
56+
57+
CLIENT.player.displayClientMessage(Constants.PREFIX.get().append(Component.translatable("skyblocker.dungeons.rareRoomAlert.foundRoom", roomName)), false);
58+
}
59+
}

src/main/resources/assets/skyblocker/lang/en_us.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,13 @@
345345
"skyblocker.config.dungeons.puzzle.solveWaterboard": "Solve Waterboard Puzzle",
346346
"skyblocker.config.dungeons.puzzle.solveWaterboard.@Tooltip": "Click the indicated levers at the correct times to solve the puzzle.",
347347

348+
"skyblocker.config.dungeons.rareRoomAlert": "Rare Room Alert",
349+
"skyblocker.config.dungeons.rareRoomAlert.enabled": "Enabled",
350+
"skyblocker.config.dungeons.rareRoomAlert.enabled.@Tooltip": "Shows a title on screen and a message in chat when a rare room (below) is discovered by you or your party* in Dungeons.",
351+
"skyblocker.config.dungeons.rareRoomAlert.showForDuncan": "Show for 'Duncan'",
352+
"skyblocker.config.dungeons.rareRoomAlert.showForTomioka": "Show for 'Tomioka'",
353+
"skyblocker.config.dungeons.rareRoomAlert.showForTrinity": "Show for 'Trinity'",
354+
348355
"skyblocker.config.dungeons.salvageHelper": "Salvage Helper",
349356
"skyblocker.config.dungeons.salvageHelper.@Tooltip": "Highlights items picked up in dungeons that can be salvaged.",
350357
"skyblocker.config.dungeons.salvageHelper.onlyDonated": "Salvage Helper - Only Highlight Donated Items",
@@ -1535,6 +1542,7 @@
15351542
"skyblocker.dungeons.puzzle.boulder.noSolution": "No solution found!",
15361543
"skyblocker.dungeons.puzzle.waterboard.invalidDoors": "Doors are in an unrecognized state. Make sure exactly three doors are closed, then reset the solver.",
15371544
"skyblocker.dungeons.puzzle.waterboard.waterFound": "Water must be toggled off or it will interfere with the solution. Turn the water off and let it drain, then reset the solver.",
1545+
"skyblocker.dungeons.rareRoomAlert.foundRoom": "Found rare room %s!",
15381546
"skyblocker.dungeons.roomPreview.failedToLoad": "Failed to load room: %s",
15391547
"skyblocker.dungeons.roomPreview.invalidRoom": "Invalid room!",
15401548
"skyblocker.dungeons.roomPreview.joinMessage": "You are currently viewing %s.\nYou can fly around, modify your custom secret waypoints, and more!",

0 commit comments

Comments
 (0)