Skip to content

Commit

Permalink
feat: add crystal hud
Browse files Browse the repository at this point in the history
  • Loading branch information
Morazzer committed Nov 18, 2024
1 parent d3e140f commit b8c2f45
Show file tree
Hide file tree
Showing 32 changed files with 525 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,10 @@ private void addMiningConfig(CookiesTranslationBuilder translationBuilder) {
translationBuilder.addConfig(CONFIG_MINING_MOD_HELPER,
"Mod Helper",
"Enables the mines of divan chest helper.");
translationBuilder.addConfig(
CONFIG_MINING_MOD_CRYSTAL_HUD,
"Crystal Hud",
"Enables the crystal hud, shows information about current crystal status, parts available and tools available.\n\n§cRequires the crystal player list widget to be active!");
translationBuilder.addConfig(CONFIG_MINING_PUZZLER_SOLVER,
"Puzzler solver",
"Highlight the correct block for the puzzler.");
Expand Down Expand Up @@ -588,7 +592,7 @@ private void addDungeonConfig(CookiesTranslationBuilder translationBuilder) {
"Use class colors",
"Uses the class colors instead of the default color.");
translationBuilder.addConfig(CONFIG_DUNGEON_GLOW_CLASS_COLOR,
"Glow teammates by class colors",
"Class based glow color",//"Glow teammates by class colors",
"Overrides the default hypixel glowing by rank to glow by class color.");
translationBuilder.addConfig(CONFIG_DUNGEON_CLASS_COLOR,
"Class colors",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.21.3 2024-11-17T23:09:20.9370947 cookies-mod/Language (en_us)
9f18fc62d9f1688bfa5af6de8a9d7f91b600ea9c assets\cookies-mod\lang\en_us.json
// 1.21.3 2024-11-18T21:50:02.348035 cookies-mod/Language (en_us)
c4ccaf30006997855f4e249ad734e937b167f02f assets/cookies-mod/lang/en_us.json
4 changes: 3 additions & 1 deletion src/main/generated/assets/cookies-mod/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@
"cookies.config.dev.show_plot_price_breakdown.tooltip": "Shows a breakdown of how much compost you need to unlock all plots.",
"cookies.config.dev.tooltip": "Development related config entries.",
"cookies.config.dungeon.name": "Dungeon Config",
"cookies.config.dungeon.player_glow_by_class_color.name": "Glow teammates by class colors",
"cookies.config.dungeon.player_glow_by_class_color.name": "Class based glow color",
"cookies.config.dungeon.player_glow_by_class_color.tooltip": "Overrides the default hypixel glowing by rank to glow by class color.",
"cookies.config.dungeon.puzzle.creeper_beams.name": "Creeper Beams",
"cookies.config.dungeon.puzzle.creeper_beams.tooltip": "Enables the creeper beams puzzle solver.",
Expand Down Expand Up @@ -244,6 +244,8 @@
"cookies.config.item_search.show_museum.tooltip": "Shows the status of museum items.",
"cookies.config.item_search.tooltip": "All item search related settings",
"cookies.config.mining.categories.hotm": "HOTM",
"cookies.config.mining.crystal_hud.name": "Crystal Hud",
"cookies.config.mining.crystal_hud.tooltip": "Enables the crystal hud, shows information about current crystal status, parts available and tools available.\n\n§cRequires the crystal player list widget to be active!",
"cookies.config.mining.highlight_disabled_hotm_perks.name": "Highlight disabled",
"cookies.config.mining.highlight_disabled_hotm_perks.tooltip": "Change disabled perks to redstone.",
"cookies.config.mining.mod_helper.name": "Mod Helper",
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/codes/cookies/mod/CookiesMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@
import codes.cookies.mod.repository.Repository;
import codes.cookies.mod.repository.constants.RepositoryConstants;
import codes.cookies.mod.screen.search.ItemSearchScreen;
import codes.cookies.mod.services.mining.CrystalStatusService;
import codes.cookies.mod.utils.UpdateChecker;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import codes.cookies.mod.utils.skyblock.MayorUtils;
import codes.cookies.mod.utils.skyblock.tab.PlayerListUtils;
import codes.cookies.mod.utils.skyblock.playerlist.PlayerListUtils;
import lombok.Getter;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
Expand Down Expand Up @@ -79,6 +80,7 @@ public void onInitializeClient() {
UpdateChecker.init();
PlayerListUtils.init();
HudManager.load();
CrystalStatusService.register();
this.registerKeyBindings();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import codes.cookies.mod.config.categories.mining.powder.PowderTrackerHudFoldable;
import codes.cookies.mod.config.categories.mining.shaft.ShaftConfig;
import codes.cookies.mod.config.system.Category;
import codes.cookies.mod.config.system.HudSetting;
import codes.cookies.mod.config.system.Parent;
import codes.cookies.mod.config.system.Row;
import codes.cookies.mod.config.system.options.BooleanOption;
import codes.cookies.mod.config.system.options.TextDisplayOption;
import codes.cookies.mod.features.mining.hollows.CrystalRunHud;
import codes.cookies.mod.features.mining.hollows.MinesOfDivanHelper;

import java.util.function.Predicate;
Expand All @@ -30,6 +32,8 @@ public class MiningConfig extends Category {

public ShaftConfig shaftConfig = new ShaftConfig();
public PowderTrackerHudFoldable powderTrackerHud = new PowderTrackerHudFoldable();
@HudSetting(CrystalRunHud.class)
public BooleanOption crystalHud = new BooleanOption(CONFIG_MINING_MOD_CRYSTAL_HUD, true);

@Parent
public TextDisplayOption hotmParentDisplay = new TextDisplayOption(CONFIG_MINING_CATEGORIES_HOTM);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package codes.cookies.mod.data.mining.crystal;

import com.mojang.serialization.Codec;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.StringIdentifiable;

/**
* All types of crystal status, and their display name.
*/
@RequiredArgsConstructor
@Getter
public enum CrystalStatus implements StringIdentifiable {

NOT_FOUND(Text.literal("✖ Not Placed").formatted(Formatting.RED)),
FOUND(Text.literal("✔ Found").formatted(Formatting.GREEN)),
PLACED(Text.literal("✔ Placed").formatted(Formatting.YELLOW));

public static final Codec<CrystalStatus> CODEC = StringIdentifiable.createCodec(CrystalStatus::values);
private final Text text;

public static CrystalStatus getCrystalStatusFromText(String text) {
return switch (text) {
case "✖ Not Placed", "✔ Found" -> FOUND;
case "✔ Placed" -> PLACED;
default -> NOT_FOUND;
};
}

@Override
public String asString() {
return name();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package codes.cookies.mod.data.mining.crystal;

import codes.cookies.mod.utils.json.CodecJsonSerializable;
import com.mojang.serialization.Codec;
import org.slf4j.Logger;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
* Data about the different crystal types and their respective status.
*/
public class CrystalStatusData implements CodecJsonSerializable<Map<CrystalType, CrystalStatus>> {
private static final Codec<Map<CrystalType, CrystalStatus>> CODEC = Codec.unboundedMap(CrystalType.CODEC, CrystalStatus.CODEC);

private final Map<CrystalType, CrystalStatus> map = new HashMap<>();

public CrystalStatus getStatus(CrystalType type) {
return Objects.requireNonNullElse(map.get(type), CrystalStatus.NOT_FOUND);
}

public void setStatus(CrystalType type, CrystalStatus status) {
map.put(type, Objects.requireNonNullElse(status, CrystalStatus.NOT_FOUND));
}

@Override
public Codec<Map<CrystalType, CrystalStatus>> getCodec() {
return CODEC;
}

@Override
public void load(Map<CrystalType, CrystalStatus> value) {
map.putAll(value);
}

@Override
public Map<CrystalType, CrystalStatus> getValue() {
return map;
}

@Override
public Logger getLogger() {
return logger;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package codes.cookies.mod.data.mining.crystal;

import java.util.Optional;

import codes.cookies.mod.utils.skyblock.playerlist.widgets.crystal.CrystalOrigin;
import com.mojang.serialization.Codec;
import lombok.AllArgsConstructor;
import lombok.Getter;

import net.minecraft.util.Formatting;
import net.minecraft.util.StringIdentifiable;

/**
* All crystal types in the game plus their respective formatting.
*/
@Getter
@AllArgsConstructor
public enum CrystalType implements StringIdentifiable {

JADE(CrystalOrigin.CRYSTAL_HOLLOWS, Formatting.GREEN),
AMBER(CrystalOrigin.CRYSTAL_HOLLOWS, Formatting.GOLD),
AMETHYST(CrystalOrigin.CRYSTAL_HOLLOWS, Formatting.DARK_PURPLE),
SAPPHIRE(CrystalOrigin.CRYSTAL_HOLLOWS, Formatting.AQUA),
TOPAZ(CrystalOrigin.CRYSTAL_HOLLOWS, Formatting.YELLOW),
JASPER(CrystalOrigin.MISC, Formatting.LIGHT_PURPLE),
RUBY(CrystalOrigin.MISC, Formatting.RED), // Misc crystals
OPAL(CrystalOrigin.CRIMSON_ISLE, Formatting.WHITE), // Crimson isle
AQUAMARINE(CrystalOrigin.GLACITE_TUNNELS, Formatting.BLUE),
PERIDOT(CrystalOrigin.GLACITE_TUNNELS, Formatting.DARK_GREEN),
CITRINE(CrystalOrigin.GLACITE_TUNNELS, Formatting.DARK_RED),
ONYX(CrystalOrigin.GLACITE_TUNNELS, Formatting.DARK_GRAY); // Tunnels

public static final Codec<CrystalType> CODEC = StringIdentifiable.createCodec(CrystalType::values);
private final CrystalOrigin crystalOrigin;
private final Formatting formatting;

public static Optional<CrystalType> getCrystalTypeByDisplayName(String displayName) {
if (displayName == null) {
return Optional.empty();
}

for (CrystalType value : values()) {
if (value.name().equalsIgnoreCase(displayName)) {
return Optional.of(value);
}
}

return Optional.empty();
}

@Override
public String asString() {
return name();
}
}
2 changes: 2 additions & 0 deletions src/main/java/codes/cookies/mod/data/profile/ProfileData.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import codes.cookies.mod.data.farming.squeakymousemat.SqueakyMousematData;
import codes.cookies.mod.data.mining.PowderData;
import codes.cookies.mod.data.mining.crystal.CrystalStatusData;
import codes.cookies.mod.data.player.PlayerStorage;
import codes.cookies.mod.data.profile.profile.GlobalProfileStorage;
import codes.cookies.mod.data.profile.profile.GlobalProfileData;
Expand Down Expand Up @@ -58,6 +59,7 @@ public class ProfileData {
private PlotData plotData = new PlotData();
private SqueakyMousematData squeakyMousematData = SqueakyMousematData.getDefault();
private PowderData powderData = new PowderData();
private CrystalStatusData crystalStatus = new CrystalStatusData();

/**
* Create a profile.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import codes.cookies.mod.utils.cookies.CookiesEventUtils;

import codes.cookies.mod.utils.skyblock.tab.widgets.PlayerListWidget;
import codes.cookies.mod.utils.skyblock.playerlist.widgets.PlayerListWidget;

import codes.cookies.mod.utils.skyblock.tab.widgets.PlayerListWidgets;
import codes.cookies.mod.utils.skyblock.playerlist.widgets.PlayerListWidgets;

import net.fabricmc.fabric.api.event.Event;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import codes.cookies.mod.features.dungeons.solver.puzzle.PuzzleSolverInstance;
import codes.cookies.mod.features.dungeons.solver.puzzle.WaterBoardPuzzleSolver;
import codes.cookies.mod.utils.skyblock.PartyUtils;
import codes.cookies.mod.utils.skyblock.tab.PlayerListUtils;
import codes.cookies.mod.utils.skyblock.playerlist.PlayerListUtils;

import java.util.ArrayList;
import java.util.Collection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import codes.cookies.mod.features.Loader;
import codes.cookies.mod.features.mining.commissions.CommissionCompletionHighlighter;
import codes.cookies.mod.features.mining.hollows.CrystalRunHud;
import codes.cookies.mod.features.mining.hollows.MinesOfDivanHelper;
import codes.cookies.mod.features.mining.shafts.CorpseWaypoints;
import codes.cookies.mod.features.mining.shafts.MineshaftAnnouncements;
Expand All @@ -25,6 +26,7 @@ static void load() {
Loader.load("PowderHud", PowderHud::new);
Loader.load("ShaftFeatures", ShaftFeatures::load);
Loader.load("MineshaftCorpseMessages", MineshaftAnnouncements::register);
Loader.load("CrystalRunHud", CrystalRunHud::new);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import codes.cookies.mod.render.hud.HudManager;
import codes.cookies.mod.render.hud.elements.MultiLineTextHudElement;
import codes.cookies.mod.render.hud.internal.HudEditAction;
import codes.cookies.mod.services.powder.PowderEntry;
import codes.cookies.mod.services.powder.PowderService;
import codes.cookies.mod.services.mining.powder.PowderEntry;
import codes.cookies.mod.services.mining.powder.PowderService;
import codes.cookies.mod.utils.cookies.CookiesUtils;
import codes.cookies.mod.utils.maths.InterpolatedInteger;
import codes.cookies.mod.utils.maths.LinearInterpolatedInteger;
Expand Down
Loading

0 comments on commit b8c2f45

Please sign in to comment.