aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/Danker/features
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/Danker/features')
-rw-r--r--src/main/java/me/Danker/features/AbilityCooldowns.java129
-rw-r--r--src/main/java/me/Danker/features/Alerts.java119
-rw-r--r--src/main/java/me/Danker/features/ArachneESP.java15
-rw-r--r--src/main/java/me/Danker/features/AutoAcceptReparty.java36
-rw-r--r--src/main/java/me/Danker/features/AutoDisplay.java69
-rw-r--r--src/main/java/me/Danker/features/AutoJoinSkyblock.java41
-rw-r--r--src/main/java/me/Danker/features/AutoSwapToPickBlock.java25
-rw-r--r--src/main/java/me/Danker/features/BlockPlacingFlowers.java45
-rw-r--r--src/main/java/me/Danker/features/BlockWrongSlayer.java42
-rw-r--r--src/main/java/me/Danker/features/BonzoMaskTimer.java5
-rw-r--r--src/main/java/me/Danker/features/CakeTimer.java4
-rw-r--r--src/main/java/me/Danker/features/ColouredNames.java178
-rw-r--r--src/main/java/me/Danker/features/CrystalHollowWaypoints.java204
-rw-r--r--src/main/java/me/Danker/features/CustomMusic.java224
-rw-r--r--src/main/java/me/Danker/features/DungeonScore.java200
-rw-r--r--src/main/java/me/Danker/features/DungeonTimer.java4
-rw-r--r--src/main/java/me/Danker/features/EndOfFarmAlert.java40
-rw-r--r--src/main/java/me/Danker/features/GemstonesLore.java77
-rw-r--r--src/main/java/me/Danker/features/GiantHPDisplay.java8
-rw-r--r--src/main/java/me/Danker/features/GolemSpawningAlert.java4
-rw-r--r--src/main/java/me/Danker/features/HidePlayerArmour.java51
-rw-r--r--src/main/java/me/Danker/features/HighlightSkeletonMasters.java3
-rw-r--r--src/main/java/me/Danker/features/NecronNotifications.java79
-rw-r--r--src/main/java/me/Danker/features/NoF3Coords.java4
-rw-r--r--src/main/java/me/Danker/features/PetColours.java24
-rw-r--r--src/main/java/me/Danker/features/Skill50Display.java60
-rw-r--r--src/main/java/me/Danker/features/SkillTracker.java183
-rw-r--r--src/main/java/me/Danker/features/SlayerESP.java21
-rw-r--r--src/main/java/me/Danker/features/SpiritBootsFix.java32
-rw-r--r--src/main/java/me/Danker/features/TetherDisplay.java4
-rw-r--r--src/main/java/me/Danker/features/UpdateChecker.java2
-rw-r--r--src/main/java/me/Danker/features/loot/BlazeTracker.java184
-rw-r--r--src/main/java/me/Danker/features/loot/CatacombsTracker.java725
-rw-r--r--src/main/java/me/Danker/features/loot/EndermanTracker.java178
-rw-r--r--src/main/java/me/Danker/features/loot/FishingTracker.java413
-rw-r--r--src/main/java/me/Danker/features/loot/GhostTracker.java60
-rw-r--r--src/main/java/me/Danker/features/loot/LootDisplay.java1294
-rw-r--r--src/main/java/me/Danker/features/loot/LootTracker.java1148
-rw-r--r--src/main/java/me/Danker/features/loot/MythologicalTracker.java101
-rw-r--r--src/main/java/me/Danker/features/loot/SpiderTracker.java110
-rw-r--r--src/main/java/me/Danker/features/loot/WolfTracker.java112
-rw-r--r--src/main/java/me/Danker/features/loot/ZombieTracker.java145
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/ArrowTerminalSolver.java55
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/BlazeSolver.java82
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/BlockWrongTerminalClicks.java93
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/BoulderSolver.java3
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/ChronomatronSolver.java37
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/ClickInOrderSolver.java5
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/CreeperSolver.java8
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/IceWalkSolver.java7
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/LividSolver.java6
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/SameColourSolver.java153
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/SelectAllColourSolver.java3
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/SilverfishSolver.java3
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/StartsWithSolver.java3
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/SuperpairsSolver.java5
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/TeleportPadSolver.java45
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/ThreeManSolver.java5
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/TicTacToeSolver.java3
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/UltrasequencerSolver.java30
-rw-r--r--src/main/java/me/Danker/features/puzzlesolvers/WaterSolver.java4
61 files changed, 5147 insertions, 1805 deletions
diff --git a/src/main/java/me/Danker/features/AbilityCooldowns.java b/src/main/java/me/Danker/features/AbilityCooldowns.java
new file mode 100644
index 0000000..e98660e
--- /dev/null
+++ b/src/main/java/me/Danker/features/AbilityCooldowns.java
@@ -0,0 +1,129 @@
+package me.Danker.features;
+
+import me.Danker.commands.MoveCommand;
+import me.Danker.commands.ScaleCommand;
+import me.Danker.commands.ToggleCommand;
+import me.Danker.events.RenderOverlayEvent;
+import me.Danker.handlers.TextRenderer;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.inventory.ContainerChest;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StringUtils;
+import net.minecraftforge.client.event.ClientChatReceivedEvent;
+import net.minecraftforge.event.world.WorldEvent;
+import net.minecraftforge.fml.common.eventhandler.EventPriority;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AbilityCooldowns {
+
+ static List<Ability> cooldowns = new ArrayList<>();
+ static double mageReduction = 0D;
+
+ @SubscribeEvent(priority = EventPriority.LOW)
+ public void onChat(ClientChatReceivedEvent event) {
+ if (!Utils.inSkyblock || !ToggleCommand.abilityCooldowns) return;
+
+ if (event.type == 2) {
+ String[] actionBarSections = StringUtils.stripControlCodes(event.message.getUnformattedText()).split(" {3,}");
+
+ for (String section : actionBarSections) {
+ if (section.charAt(0) == '-' && section.contains("(") && section.charAt(section.length() - 1) == ')') {
+ String ability = section.substring(section.indexOf("(") + 1, section.length() - 1);
+
+ for (Ability cooldown : cooldowns) {
+ if (cooldown.ability.equals(ability)) return;
+ }
+
+ cooldowns.add(new Ability(ability, Utils.getCooldownFromAbility(ability) * (1D - mageReduction)));
+ }
+ }
+ } else {
+ String message = StringUtils.stripControlCodes(event.message.getUnformattedText());
+
+ if (Utils.inDungeons && message.startsWith("[Mage] Cooldown Reduction ")) {
+ mageReduction = Integer.parseInt(message.substring(message.indexOf(">") + 2, message.length() - 1)) / 100D;
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void renderPlayerInfo(RenderOverlayEvent event) {
+ if (ToggleCommand.abilityCooldowns && Utils.inSkyblock) {
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = cooldowns.size() - 1; i >= 0; i--) {
+ Ability ability = cooldowns.get(i);
+
+ if (ability.getCooldown() <= 0) {
+ cooldowns.remove(i);
+ continue;
+ }
+
+ sb.insert(0, ability.getTimer() + "\n");
+ }
+
+ new TextRenderer(Minecraft.getMinecraft(), sb.toString(), MoveCommand.abilityCooldownsXY[0], MoveCommand.abilityCooldownsXY[1], ScaleCommand.abilityCooldownsScale);
+ }
+ }
+
+ @SubscribeEvent
+ public void onTick(TickEvent.ClientTickEvent event) {
+ if (event.phase != TickEvent.Phase.START) return;
+
+ Minecraft mc = Minecraft.getMinecraft();
+ EntityPlayerSP player = mc.thePlayer;
+ if (mc.currentScreen instanceof GuiChest) {
+ if (player == null) return;
+ ContainerChest chest = (ContainerChest) player.openContainer;
+ List<Slot> invSlots = ((GuiChest) mc.currentScreen).inventorySlots.inventorySlots;
+ String chestName = chest.getLowerChestInventory().getDisplayName().getUnformattedText().trim();
+
+ if (ToggleCommand.abilityCooldowns && Utils.inDungeons && chestName.startsWith("Catacombs - ")) {
+ ItemStack mage = invSlots.get(30).getStack();
+ if (mage == null || mage.getDisplayName() == null) return;
+ if (mage.isItemEnchanted()) {
+ String display = mage.getDisplayName();
+ mageReduction = Utils.getCooldownReductionFromLevel(Integer.parseInt(display.substring(display.indexOf(" ") + 1, display.indexOf("]"))));
+ } else {
+ mageReduction = 0D;
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onWorldChange(WorldEvent.Load event) {
+ cooldowns.clear();
+ mageReduction = 0D;
+ }
+
+ public static class Ability {
+
+ public final String ability;
+ private final long cooldown;
+
+ public Ability(String ability, double cooldown) {
+ this.ability = ability;
+ this.cooldown = (long) (System.currentTimeMillis() + cooldown * 1000L);
+ }
+
+ public String getTimer() {
+ return EnumChatFormatting.GREEN + ability + ": " + EnumChatFormatting.YELLOW + getCooldown() + "s";
+ }
+
+ public double getCooldown() {
+ return (cooldown - System.currentTimeMillis()) / 1000D;
+ }
+
+ }
+
+}
diff --git a/src/main/java/me/Danker/features/Alerts.java b/src/main/java/me/Danker/features/Alerts.java
new file mode 100644
index 0000000..aab99b3
--- /dev/null
+++ b/src/main/java/me/Danker/features/Alerts.java
@@ -0,0 +1,119 @@
+package me.Danker.features;
+
+import com.google.gson.GsonBuilder;
+import me.Danker.commands.ToggleCommand;
+import me.Danker.utils.Utils;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StringUtils;
+import net.minecraftforge.client.event.ClientChatReceivedEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+import java.awt.*;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Alerts {
+
+ public static List<Alert> alerts = new ArrayList<>();
+ public static String configFile;
+
+ @SubscribeEvent
+ public void onChat(ClientChatReceivedEvent event) {
+ if (!ToggleCommand.alerts || event.type == 2) return;
+
+ String message = StringUtils.stripControlCodes(event.message.getUnformattedText());
+
+ for (Alert alert : alerts) {
+ if (!alert.toggled) continue;
+
+ boolean location;
+ switch (alert.location) {
+ case "Skyblock":
+ location = Utils.inSkyblock;
+ break;
+ case "Dungeons":
+ location = Utils.inDungeons;
+ break;
+ default:
+ location = true;
+ }
+ if (!location) continue;
+
+ boolean trigger;
+ switch (alert.mode) {
+ case "Starts With":
+ trigger = message.startsWith(alert.message);
+ break;
+ case "Contains":
+ trigger = message.contains(alert.message);
+ break;
+ case "Ends With":
+ trigger = message.endsWith(alert.message);
+ break;
+ default:
+ continue;
+ }
+
+ if (trigger) {
+ Utils.createTitle(EnumChatFormatting.RED + alert.alert.replace("&", "ยง"), 2);
+
+ if (alert.desktop) {
+ try {
+ final SystemTray tray = SystemTray.getSystemTray();
+ final Image image = Toolkit.getDefaultToolkit().createImage("icon.png");
+ final TrayIcon trayIcon = new TrayIcon(image, "Alert");
+ trayIcon.setImageAutoSize(true);
+ trayIcon.setToolTip("Alert");
+ tray.add(trayIcon);
+ trayIcon.displayMessage(StringUtils.stripControlCodes(alert.alert), message, TrayIcon.MessageType.INFO);
+ tray.remove(trayIcon);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ return;
+ }
+ }
+ }
+
+ public static void saveToFile() {
+ try (FileWriter writer = new FileWriter(configFile)) {
+ new GsonBuilder().create().toJson(alerts, writer);
+ writer.flush();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ public static class Alert {
+
+ public String mode;
+ public String location;
+ public String message;
+ public String alert;
+ public boolean desktop;
+ public boolean toggled;
+
+ public Alert(String mode, String location, String message, String alert, boolean desktop, boolean toggled) {
+ this.mode = mode;
+ this.location = location;
+ this.message = message;
+ this.alert = alert;
+ this.desktop = desktop;
+ this.toggled = toggled;
+ }
+
+ public void toggle() {
+ toggled = !toggled;
+ }
+
+ public void toggleDesktop() {
+ desktop = !desktop;
+ }
+
+ }
+
+}
diff --git a/src/main/java/me/Danker/features/ArachneESP.java b/src/main/java/me/Danker/features/ArachneESP.java
index c78c385..807cfb1 100644
--- a/src/main/java/me/Danker/features/ArachneESP.java
+++ b/src/main/java/me/Danker/features/ArachneESP.java
@@ -1,7 +1,7 @@
package me.Danker.features;
import me.Danker.commands.ToggleCommand;
-import me.Danker.handlers.ScoreboardHandler;
+import me.Danker.utils.RenderUtils;
import me.Danker.utils.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
@@ -30,19 +30,10 @@ public class ArachneESP {
arachne = null;
}
- public boolean inSpidersDen(List<String> scoreboard) {
- for (String s : scoreboard) {
- if (ScoreboardHandler.cleanSB(s).contains("Spiders Den")) {
- return true;
- }
- }
- return false;
- }
-
@SubscribeEvent
public void onChat(ClientChatReceivedEvent event) {
if (!Utils.inSkyblock) return;
- if (!inSpidersDen(ScoreboardHandler.getSidebarLines())) return;
+ if (!Utils.tabLocation.equals("Spider's Den")) return;
String message = StringUtils.stripControlCodes(event.message.getUnformattedText());
if (message.contains("Something is awakening")){
arachneActive = true;
@@ -66,7 +57,7 @@ public class ArachneESP {
if (arachne != null) {
if (arachneActive && ToggleCommand.highlightArachne) {
AxisAlignedBB aabb = new AxisAlignedBB(arachne.posX - 0.75, arachne.posY - 1, arachne.posZ - 0.75, arachne.posX + 0.75, arachne.posY, arachne.posZ + 0.75);
- Utils.draw3DBox(aabb, ARACHANE_COLOUR, event.partialTicks);
+ RenderUtils.draw3DBox(aabb, ARACHANE_COLOUR, event.partialTicks);
}
}
}
diff --git a/src/main/java/me/Danker/features/AutoAcceptReparty.java b/src/main/java/me/Danker/features/AutoAcceptReparty.java
new file mode 100644
index 0000000..b2e563d
--- /dev/null
+++ b/src/main/java/me/Danker/features/AutoAcceptReparty.java
@@ -0,0 +1,36 @@
+package me.Danker.features;
+
+import me.Danker.commands.ToggleCommand;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.StringUtils;
+import net.minecraftforge.client.event.ClientChatReceivedEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+public class AutoAcceptReparty {
+
+ String partyLeader = null;
+ long lastDisband = 0;
+
+ @SubscribeEvent(receiveCanceled = true)
+ public void onChat(ClientChatReceivedEvent event) {
+
+ if (ToggleCommand.autoAcceptReparty) {
+ String message = StringUtils.stripControlCodes(event.message.getUnformattedText());
+
+ if (message.contains(":")) return;
+
+ String[] split = message.split("\\s");
+
+ if (message.contains("has disbanded the party!")) {
+ lastDisband = System.currentTimeMillis() / 1000;
+ partyLeader = split[0].contains("[") ? split[1] : split[0];
+ } else if (message.contains("has invited you to join their party!")) {
+ String inviter = split[1].contains("[") ? split[2] : split[1];
+ if (inviter.equals(partyLeader) && System.currentTimeMillis() / 1000 - lastDisband <= 120) {
+ Minecraft.getMinecraft().thePlayer.sendChatMessage("/party accept " + partyLeader);
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/me/Danker/features/AutoDisplay.java b/src/main/java/me/Danker/features/AutoDisplay.java
index 182c0b4..7f86035 100644
--- a/src/main/java/me/Danker/features/AutoDisplay.java
+++ b/src/main/java/me/Danker/features/AutoDisplay.java
@@ -4,8 +4,10 @@ import me.Danker.DankersSkyblockMod;
import me.Danker.features.loot.LootDisplay;
import me.Danker.handlers.ConfigHandler;
import me.Danker.handlers.ScoreboardHandler;
+import me.Danker.utils.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -37,24 +39,47 @@ public class AutoDisplay {
} else if (sCleaned.contains("Revenant Horror")) {
LootDisplay.display = "zombie";
found = true;
+ } else if (sCleaned.contains("Voidgloom Seraph")) {
+ LootDisplay.display = "enderman";
+ found = true;
+ } else if (sCleaned.contains("Inferno Demonlord")) {
+ LootDisplay.display = "blaze";
+ found = true;
} else if (sCleaned.contains("The Mist")){
LootDisplay.display = "ghost";
found = true;
- } else if (sCleaned.contains("The Catacombs (")) {
- if (sCleaned.contains("F1")) {
- LootDisplay.display = "catacombs_floor_one";
- } else if (sCleaned.contains("F2")) {
- LootDisplay.display = "catacombs_floor_two";
- } else if (sCleaned.contains("F3")) {
- LootDisplay.display = "catacombs_floor_three";
- } else if (sCleaned.contains("F4")) {
- LootDisplay.display = "catacombs_floor_four";
- } else if (sCleaned.contains("F5")) {
- LootDisplay.display = "catacombs_floor_five";
- } else if (sCleaned.contains("F6")) {
- LootDisplay.display = "catacombs_floor_six";
- } else if (sCleaned.contains("F7")) {
- LootDisplay.display = "catacombs_floor_seven";
+ } else if (Utils.inDungeons) {
+ switch (Utils.currentFloor) {
+ case F1:
+ LootDisplay.display = "catacombs_floor_one";
+ break;
+ case F2:
+ LootDisplay.display = "catacombs_floor_two";
+ break;
+ case F3:
+ LootDisplay.display = "catacombs_floor_three";
+ break;
+ case F4:
+ LootDisplay.display = "catacombs_floor_four";
+ break;
+ case F5:
+ LootDisplay.display = "catacombs_floor_five";
+ break;
+ case F6:
+ LootDisplay.display = "catacombs_floor_six";
+ break;
+ case F7:
+ LootDisplay.display = "catacombs_floor_seven";
+ break;
+ case M1:
+ case M2:
+ case M3:
+ case M4:
+ case M5:
+ case M6:
+ case M7:
+ LootDisplay.display = "catacombs_master";
+ break;
}
found = true;
}
@@ -65,6 +90,20 @@ public class AutoDisplay {
if (hotbarItem.getDisplayName().contains("Ancestral Spade")) {
LootDisplay.display = "mythological";
found = true;
+ break;
+ } else if (hotbarItem.getItem() == Items.fishing_rod) {
+ List<String> lore = hotbarItem.getTooltip(player, mc.gameSettings.advancedItemTooltips);
+ for (int j = lore.size() - 1; j >= 0; j--) { // reverse
+ if (lore.get(j).contains("FISHING ROD")) {
+ if (Utils.tabLocation.equals("Crimson Isle")) {
+ LootDisplay.display = "fishing_lava";
+ } else {
+ LootDisplay.display = "fishing";
+ }
+ found = true;
+ break;
+ }
+ }
}
}
if (!found) LootDisplay.display = "off";
diff --git a/src/main/java/me/Danker/features/AutoJoinSkyblock.java b/src/main/java/me/Danker/features/AutoJoinSkyblock.java
new file mode 100644
index 0000000..91d6039
--- /dev/null
+++ b/src/main/java/me/Danker/features/AutoJoinSkyblock.java
@@ -0,0 +1,41 @@
+package me.Danker.features;
+
+import me.Danker.commands.ToggleCommand;
+import me.Danker.utils.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.network.FMLNetworkEvent;
+
+public class AutoJoinSkyblock {
+
+ static boolean joinedServer = false;
+
+ @SubscribeEvent
+ public void onConnect(FMLNetworkEvent.ClientConnectedToServerEvent event) {
+ if (ToggleCommand.autoJoinSkyblock && !joinedServer) {
+ joinedServer = true;