aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java77
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java7
3 files changed, 51 insertions, 36 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java
index 5e3daf3c..75c516df 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java
@@ -9,6 +9,7 @@ import de.hysky.skyblocker.skyblock.FancyStatusBars;
import de.hysky.skyblocker.skyblock.dungeon.DungeonMap;
import de.hysky.skyblocker.skyblock.dungeon.DungeonScore;
import de.hysky.skyblocker.skyblock.dungeon.DungeonScoreHUD;
+import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
import de.hysky.skyblocker.skyblock.item.HotbarSlotLock;
import de.hysky.skyblocker.skyblock.item.ItemCooldowns;
import de.hysky.skyblocker.skyblock.item.ItemProtection;
@@ -91,7 +92,7 @@ public abstract class InGameHudMixin {
ci.cancel();
if (Utils.isInDungeons() && DungeonScore.isDungeonStarted()) {
- if (SkyblockerConfigManager.get().locations.dungeons.enableMap) DungeonMap.render(context.getMatrices());
+ if (SkyblockerConfigManager.get().locations.dungeons.enableMap && !DungeonManager.isInBoss()) DungeonMap.render(context.getMatrices());
if (SkyblockerConfigManager.get().locations.dungeons.dungeonScore.enableScoreHUD) DungeonScoreHUD.render(context);
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
index 293d301f..f2986ec0 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
@@ -4,48 +4,65 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.MapRenderer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.FilledMapItem;
import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
import net.minecraft.item.map.MapState;
-import net.minecraft.nbt.NbtCompound;
-import org.apache.commons.lang3.StringUtils;
public class DungeonMap {
+ private static final int DEFAULT_MAP_ID = 1024;
+ private static Integer cachedMapId = null;
+
+ public static void init() {
+ ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker")
+ .then(ClientCommandManager.literal("hud")
+ .then(ClientCommandManager.literal("dungeon")
+ .executes(Scheduler.queueOpenScreenCommand(DungeonMapConfigScreen::new))
+ )
+ )
+ ));
+ ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> reset());
+ }
+
public static void render(MatrixStack matrices) {
MinecraftClient client = MinecraftClient.getInstance();
if (client.player == null || client.world == null) return;
- ItemStack item = client.player.getInventory().main.get(8);
- NbtCompound tag = item.getNbt();
-
- if (tag != null && tag.contains("map")) {
- String tag2 = tag.asString();
- tag2 = StringUtils.substringBetween(tag2, "map:", "}");
- int mapid = Integer.parseInt(tag2);
- VertexConsumerProvider.Immediate vertices = client.getBufferBuilders().getEffectVertexConsumers();
- MapRenderer map = client.gameRenderer.getMapRenderer();
- MapState state = FilledMapItem.getMapState(mapid, client.world);
- float scaling = SkyblockerConfigManager.get().locations.dungeons.mapScaling;
- int x = SkyblockerConfigManager.get().locations.dungeons.mapX;
- int y = SkyblockerConfigManager.get().locations.dungeons.mapY;
-
- if (state == null) return;
- matrices.push();
- matrices.translate(x, y, 0);
- matrices.scale(scaling, scaling, 0f);
- map.draw(matrices, vertices, mapid, state, false, 15728880);
- vertices.draw();
- matrices.pop();
- }
+
+ int mapId = getMapId(client.player.getInventory().main.get(8));
+
+ MapState state = FilledMapItem.getMapState(mapId, client.world);
+ if (state == null) return;
+
+ int x = SkyblockerConfigManager.get().locations.dungeons.mapX;
+ int y = SkyblockerConfigManager.get().locations.dungeons.mapY;
+ float scaling = SkyblockerConfigManager.get().locations.dungeons.mapScaling;
+ VertexConsumerProvider.Immediate vertices = client.getBufferBuilders().getEffectVertexConsumers();
+ MapRenderer mapRenderer = client.gameRenderer.getMapRenderer();
+
+ matrices.push();
+ matrices.translate(x, y, 0);
+ matrices.scale(scaling, scaling, 0f);
+ mapRenderer.draw(matrices, vertices, mapId, state, false, LightmapTextureManager.MAX_LIGHT_COORDINATE);
+ vertices.draw();
+ matrices.pop();
}
- public static void init() { //Todo: consider renaming the command to a more general name since it'll also have dungeon score and maybe other stuff in the future
- ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker")
- .then(ClientCommandManager.literal("hud")
- .then(ClientCommandManager.literal("dungeonmap")
- .executes(Scheduler.queueOpenScreenCommand(DungeonMapConfigScreen::new))))));
+ public static int getMapId(ItemStack stack) {
+ if (stack.isOf(Items.FILLED_MAP)) {
+ @SuppressWarnings("DataFlowIssue")
+ int mapId = FilledMapItem.getMapId(stack);
+ cachedMapId = mapId;
+ return mapId;
+ } else return cachedMapId != null ? cachedMapId : DEFAULT_MAP_ID;
+ }
+
+ private static void reset() {
+ cachedMapId = null;
}
-} \ No newline at end of file
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
index a207ddc7..c1ab226d 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
@@ -15,6 +15,7 @@ import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.debug.Debug;
+import de.hysky.skyblocker.skyblock.dungeon.DungeonMap;
import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.Tickable;
import de.hysky.skyblocker.utils.Utils;
@@ -529,11 +530,7 @@ public class DungeonManager {
physicalEntrancePos = DungeonMapUtils.getPhysicalRoomPos(playerPos);
currentRoom = newRoom(Room.Type.ENTRANCE, physicalEntrancePos);
}
- ItemStack stack = client.player.getInventory().main.get(8);
- if (!stack.isOf(Items.FILLED_MAP)) {
- return;
- }
- MapState map = FilledMapItem.getMapState(FilledMapItem.getMapId(stack), client.world);
+ MapState map = FilledMapItem.getMapState(DungeonMap.getMapId(client.player.getInventory().main.get(8)), client.world);
if (map == null) {
return;
}