Skip to content
This repository was archived by the owner on Feb 23, 2026. It is now read-only.
100 changes: 98 additions & 2 deletions src/main/java/me/Danker/DankersSkyblockMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import me.Danker.commands.*;
import me.Danker.gui.*;
import me.Danker.handlers.*;
import me.Danker.utils.DarkMonolithUtils;
import me.Danker.handlers.LocationHandler;
import me.Danker.utils.TicTacToeUtils;
import me.Danker.utils.Utils;
import net.minecraft.block.Block;
Expand Down Expand Up @@ -162,7 +164,14 @@ public class DankersSkyblockMod {
public static double alchemyXPGained = 0;
static double xpLeft = 0;
static double timeSinceGained = 0;


static String woodChest = "";
static String goldChest = "";
static String diamondChest = "";
static String emeraldChest = "";
static String obsidianChest = "";
static String bedrockChest = "";

public static String MAIN_COLOUR;
public static String SECONDARY_COLOUR;
public static String ERROR_COLOUR;
Expand Down Expand Up @@ -195,6 +204,7 @@ public class DankersSkyblockMod {
public void init(FMLInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(new PacketHandler());
MinecraftForge.EVENT_BUS.register(new LocationHandler());

ConfigHandler.reloadConfig();

Expand Down Expand Up @@ -1033,6 +1043,14 @@ else if (message.contains("Couldn't find a player") || message.contains("You can
witherDoors = 0;
dungeonDeaths = 0;
puzzleFails = 0;

//reset dungeon chest profit messages
woodChest = "";
goldChest = "";
diamondChest = "";
emeraldChest = "";
obsidianChest = "";
bedrockChest = "";
} else if (message.contains("The BLOOD DOOR has been opened!")) {
bloodOpenTime = System.currentTimeMillis() / 1000;
} else if (message.contains(" opened a WITHER door!")) {
Expand Down Expand Up @@ -1404,6 +1422,16 @@ public void renderEverything() {
new TextRenderer(mc, dungeonTimers, (int) (MoveCommand.dungeonTimerXY[0] + (80 * ScaleCommand.dungeonTimerScale)), MoveCommand.dungeonTimerXY[1], ScaleCommand.dungeonTimerScale);
}

if (ToggleCommand.chestProfitToggled && Utils.inDungeons) {
String profitText = EnumChatFormatting.GOLD + woodChest +
EnumChatFormatting.YELLOW + goldChest +
EnumChatFormatting.AQUA + diamondChest +
EnumChatFormatting.GREEN + emeraldChest +
EnumChatFormatting.DARK_PURPLE + obsidianChest +
EnumChatFormatting.BLACK + bedrockChest;
new TextRenderer(mc, profitText, MoveCommand.chestProfitXY[0], MoveCommand.chestProfitXY[1], ScaleCommand.chestProfitScale);
}

if (ToggleCommand.lividSolverToggled && foundLivid && livid != null) {
new TextRenderer(mc, livid.getName().replace("" + EnumChatFormatting.BOLD, ""), MoveCommand.lividHpXY[0], MoveCommand.lividHpXY[1], ScaleCommand.lividHpScale);
}
Expand Down Expand Up @@ -2535,6 +2563,7 @@ public void onTick(TickEvent.ClientTickEvent event) {
if (player != null) {
Utils.checkForSkyblock();
Utils.checkForDungeons();
if (Utils.inSkyblock) LocationHandler.sendLocraw();
}

if (DisplayCommand.auto && world != null && player != null) {
Expand Down Expand Up @@ -3013,6 +3042,10 @@ public void onRenderTick(TickEvent.RenderTickEvent event) {

@SubscribeEvent
public void onWorldRender(RenderWorldLastEvent event) {
if (ToggleCommand.monolithWaypointsToggled && LocationHandler.getLocation() != null) {
if (!LocationHandler.getLocation().equals("mining_3")) return;
DarkMonolithUtils.drawWaypoint(DarkMonolithUtils.findMonolith(), event.partialTicks);
}
if (ToggleCommand.blazeToggled) {
if (lowestBlaze != null) {
BlockPos stringPos = new BlockPos(lowestBlaze.posX, lowestBlaze.posY + 1, lowestBlaze.posZ);
Expand Down Expand Up @@ -3501,7 +3534,70 @@ public void onGuiOpen(GuiOpenEvent event) {
GuiChest chest = (GuiChest) event.gui;
IInventory inventory = ((ContainerChest) containerChest).getLowerChestInventory();
String inventoryName = inventory.getDisplayName().getUnformattedText();

List<Slot> invSlots = containerChest.inventorySlots;

//Dungeon Reward Chest Profit Calculator
if (ToggleCommand.chestProfitToggled && Utils.inDungeons && inventoryName.endsWith(" Chest")) {
System.out.println("Getting " + inventoryName + " Profit");
new Thread(() -> {
System.out.println(inventoryName + " profit checking thread opened");
try {
Thread.sleep(300);
if (invSlots.size() > 30 && invSlots.get(31).getStack() != null){
if (invSlots.get(31).getStack().getDisplayName().startsWith("§aOpen Reward Chest")) {
ItemStack openChest = invSlots.get(31).getStack();
List<String> chestTooltip = openChest.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
int chestCost = 0;
int chestValue = 0;
for (String lineUnclean : chestTooltip) {
String line = StringUtils.stripControlCodes(lineUnclean);
if (line.contains("FREE")) {
chestCost = 0;
break;
} else if (line.contains(" Coins")) {
chestCost = Integer.parseInt(line.substring(0, line.indexOf(" ")).replaceAll(",", ""));
break;
}
}
for (int i = 11; i < 16; i++) {
ItemStack chestLoot = invSlots.get(i).getStack();
String sbItemID = Utils.getSBItemID(chestLoot);
if (sbItemID != null) {
int binValue = Utils.getLowestBin(sbItemID);
chestValue += binValue;
}
}
int chestProfit = chestValue - chestCost;
String output = (inventoryName + ": " + NumberFormat.getInstance().format(chestProfit) + " coins profit\n");
System.out.println(output);
switch (inventoryName) {
case "Wood Chest":
woodChest = output;
break;
case "Gold Chest":
goldChest = output;
break;
case "Diamond Chest":
diamondChest = output;
break;
case "Emerald Chest":
emeraldChest = output;
break;
case "Obsidian Chest":
obsidianChest = output;
break;
case "Bedrock Chest":
bedrockChest = output;
break;
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}

if (ToggleCommand.swapToPickBlockToggled) {
if (inventoryName.startsWith("Chronomatron (") || inventoryName.startsWith("Superpairs (") || inventoryName.startsWith("Ultrasequencer (") || inventoryName.startsWith("What starts with:") || inventoryName.startsWith("Select all the") || inventoryName.startsWith("Navigate the maze!") || inventoryName.startsWith("Correct all the panes!") || inventoryName.startsWith("Click in order!") || inventoryName.startsWith("Harp -")) {
if (!pickBlockBindSwapped) {
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/me/Danker/commands/MoveCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class MoveCommand extends CommandBase {
public static int[] skillTrackerXY = {0, 0};
public static int[] waterAnswerXY = {0, 0};
public static int[] bonzoTimerXY = {0, 0};
public static int[] chestProfitXY = {0, 0};

@Override
public String getCommandName() {
Expand All @@ -30,7 +31,7 @@ public String getCommandName() {

@Override
public String getCommandUsage(ICommandSender arg0) {
return "/" + getCommandName() + " <coords/display/dungeontimer/skill50/lividhp/caketimer/skilltracker/wateranswer/bonzotimer> <x> <y>";
return "/" + getCommandName() + " <coords/display/dungeontimer/skill50/lividhp/caketimer/skilltracker/wateranswer/bonzotimer/chestprofit> <x> <y>";
}

@Override
Expand All @@ -41,7 +42,7 @@ public int getRequiredPermissionLevel() {
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer", "skill50", "lividhp", "caketimer", "skilltracker", "wateranswer", "bonzotimer");
return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer", "skill50", "lividhp", "caketimer", "skilltracker", "wateranswer", "bonzotimer", "chestprofit");
}
return null;
}
Expand Down Expand Up @@ -119,6 +120,13 @@ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandExc
ConfigHandler.writeIntConfig("locations", "bonzoTimerX", bonzoTimerXY[1]);
player.addChatMessage(new ChatComponentText(DankersSkyblockMod.MAIN_COLOUR + "Bonzo's Mask timer has been moved to " + DankersSkyblockMod.SECONDARY_COLOUR + arg1[1] + ", " + arg1[2]));
break;
case "chestprofit":
chestProfitXY[0] = Integer.parseInt(arg1[1]);
chestProfitXY[1] = Integer.parseInt(arg1[2]);
ConfigHandler.writeIntConfig("locations", "chestProfitX", chestProfitXY[0]);
ConfigHandler.writeIntConfig("locations", "chestProfitY", chestProfitXY[1]);
player.addChatMessage(new ChatComponentText(DankersSkyblockMod.MAIN_COLOUR + "Dungeon chest profit calculator has been moved to " + DankersSkyblockMod.SECONDARY_COLOUR + arg1[1] + ", " + arg1[2]));
break;
default:
player.addChatMessage(new ChatComponentText(DankersSkyblockMod.ERROR_COLOUR + "Usage: " + getCommandUsage(arg0)));
}
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/me/Danker/commands/ScaleCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class ScaleCommand extends CommandBase {
public static double skillTrackerScale;
public static double waterAnswerScale;
public static double bonzoTimerScale;
public static double chestProfitScale;

@Override
public String getCommandName() {
Expand All @@ -30,7 +31,7 @@ public String getCommandName() {

@Override
public String getCommandUsage(ICommandSender arg0) {
return "/" + getCommandName() + " <coords/display/dungeontimer/skill50/lividhp/caketimer/skilltracker/wateranswer/bonzotimer> <size (0.1 - 10)>";
return "/" + getCommandName() + " <coords/display/dungeontimer/skill50/lividhp/caketimer/skilltracker/wateranswer/bonzotimer/chestprofit> <size (0.1 - 10)>";
}

@Override
Expand All @@ -41,7 +42,7 @@ public int getRequiredPermissionLevel() {
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
if (args.length == 1) {
return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer", "skill50", "lividhp", "caketimer", "skilltracker", "wateranswer", "bonzotimer");
return getListOfStringsMatchingLastWord(args, "coords", "display", "dungeontimer", "skill50", "lividhp", "caketimer", "skilltracker", "wateranswer", "bonzotimer", "chestprofit");
}
return null;
}
Expand Down Expand Up @@ -107,6 +108,11 @@ public void processCommand(ICommandSender arg0, String[] arg1) throws CommandExc
ConfigHandler.writeDoubleConfig("scales", "bonzoTimerScale", bonzoTimerScale);
player.addChatMessage(new ChatComponentText(DankersSkyblockMod.MAIN_COLOUR + "Bonzo's Mask timer has been scaled to " + DankersSkyblockMod.SECONDARY_COLOUR + bonzoTimerScale + "x"));
break;
case "chestprofit":
chestProfitScale = scaleAmount;
ConfigHandler.writeDoubleConfig("scales", "chestProfitScale", chestProfitScale);
player.addChatMessage(new ChatComponentText(DankersSkyblockMod.MAIN_COLOUR + "Dungeon chest profit has been scaled to " + DankersSkyblockMod.SECONDARY_COLOUR + chestProfitScale + "x"));
break;
default:
player.addChatMessage(new ChatComponentText(DankersSkyblockMod.ERROR_COLOUR + "Usage: " + getCommandUsage(arg0)));
}
Expand Down
Loading