package me.Danker; import java.awt.Image; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.client.ClientCommandHandler; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @Mod(modid = TheMod.MODID, version = TheMod.VERSION) public class TheMod { public static final String MODID = "Danker's Skyblock Mod"; public static final String VERSION = "1.3"; @EventHandler public void init(FMLInitializationEvent event) { FMLCommonHandler.instance().bus().register(this); MinecraftForge.EVENT_BUS.register(this); // Config init final ConfigHandler cf = new ConfigHandler(); if (!cf.hasKey("toggles", "GParty")) cf.writeBooleanConfig("toggles", "GParty", true); if (!cf.hasKey("toggles", "Coords")) cf.writeBooleanConfig("toggles", "Coords", true); if (!cf.hasKey("api", "APIKey")) cf.writeStringConfig("api", "APIKey", ""); // Wolf Loot if (!cf.hasKey("wolf", "svens")) cf.writeIntConfig("wolf", "svens", 0); if (!cf.hasKey("wolf", "spirit")) cf.writeIntConfig("wolf", "spirit", 0); if (!cf.hasKey("wolf", "book")) cf.writeIntConfig("wolf", "book", 0); if (!cf.hasKey("wolf", "egg")) cf.writeIntConfig("wolf", "egg", 0); if (!cf.hasKey("wolf", "couture")) cf.writeIntConfig("wolf", "couture", 0); if (!cf.hasKey("wolf", "bait")) cf.writeIntConfig("wolf", "bait", 0); if (!cf.hasKey("wolf", "flux")) cf.writeIntConfig("wolf", "flux", 0); if (!cf.hasKey("wolf", "timeRNG")) cf.writeIntConfig("wolf", "timeRNG", -1); if (!cf.hasKey("wolf", "bossRNG")) cf.writeIntConfig("wolf", "bossRNG", -1); // Spider Loot if (!cf.hasKey("spider", "tarantulas")) cf.writeIntConfig("spider", "tarantulas", 0); if (!cf.hasKey("spider", "bite")) cf.writeIntConfig("spider", "bite", 0); if (!cf.hasKey("spider", "catalyst")) cf.writeIntConfig("spider", "catalyst", 0); if (!cf.hasKey("spider", "book")) cf.writeIntConfig("spider", "book", 0); if (!cf.hasKey("spider", "swatter")) cf.writeIntConfig("spider", "swatter", 0); if (!cf.hasKey("spider", "talisman")) cf.writeIntConfig("spider", "talisman", 0); if (!cf.hasKey("spider", "mosquito")) cf.writeIntConfig("spider", "mosquito", 0); if (!cf.hasKey("spider", "timeRNG")) cf.writeIntConfig("spider", "timeRNG", -1); if (!cf.hasKey("spider", "bossRNG")) cf.writeIntConfig("spider", "bossRNG", -1); // Zombie Loot if (!cf.hasKey("zombie", "revs")) cf.writeIntConfig("zombie", "revs", 0); if (!cf.hasKey("zombie", "pestilence")) cf.writeIntConfig("zombie", "pestilence", 0); if (!cf.hasKey("zombie", "undeadCatalyst")) cf.writeIntConfig("zombie", "undeadCatalyst", 0); if (!cf.hasKey("zombie", "book")) cf.writeIntConfig("zombie", "book", 0); if (!cf.hasKey("zombie", "beheaded")) cf.writeIntConfig("zombie", "beheaded", 0); if (!cf.hasKey("zombie", "revCatalyst")) cf.writeIntConfig("zombie", "revCatalyst", 0); if (!cf.hasKey("zombie", "snake")) cf.writeIntConfig("zombie", "snake", 0); if (!cf.hasKey("zombie", "scythe")) cf.writeIntConfig("zombie", "scythe", 0); if (!cf.hasKey("zombie", "timeRNG")) cf.writeIntConfig("zombie", "timeRNG", -1); if (!cf.hasKey("zombie", "bossRNG")) cf.writeIntConfig("zombie", "bossRNG", -1); final ToggleCommand tf = new ToggleCommand(); tf.gpartyToggled = cf.getBoolean("toggles", "GParty"); tf.coordsToggled = cf.getBoolean("toggles", "Coords"); final LootCommand lc = new LootCommand(); // Wolf lc.wolfSvens = cf.getInt("wolf", "svens"); lc.wolfSpirits = cf.getInt("wolf", "spirit"); lc.wolfBooks = cf.getInt("wolf", "book"); lc.wolfEggs = cf.getInt("wolf", "egg"); lc.wolfCoutures = cf.getInt("wolf", "couture"); lc.wolfBaits = cf.getInt("wolf", "bait"); lc.wolfFluxes = cf.getInt("wolf", "flux"); lc.wolfTime = cf.getInt("wolf", "timeRNG"); lc.wolfBosses = cf.getInt("wolf", "bossRNG"); // Spider lc.spiderTarantulas = cf.getInt("spider", "tarantulas"); lc.spiderBites = cf.getInt("spider", "bite"); lc.spiderCatalysts = cf.getInt("spider", "catalyst"); lc.spiderBooks = cf.getInt("spider", "book"); lc.spiderSwatters = cf.getInt("spider", "swatter"); lc.spiderTalismans = cf.getInt("spider", "talisman"); lc.spiderMosquitos = cf.getInt("spider", "mosquito"); lc.spiderTime = cf.getInt("spider", "timeRNG"); lc.spiderBosses = cf.getInt("spider", "bossRNG"); // Zombie lc.zombieRevs = cf.getInt("zombie", "revs"); lc.zombiePestilences = cf.getInt("zombie", "pestilence"); lc.zombieUndeadCatas = cf.getInt("zombie", "undeadCatalyst"); lc.zombieBooks = cf.getInt("zombie", "book"); lc.zombieBeheadeds = cf.getInt("zombie", "beheaded"); lc.zombieRevCatas = cf.getInt("zombie", "revCatalyst"); lc.zombieSnakes = cf.getInt("zombie", "snake"); lc.zombieScythes = cf.getInt("zombie", "scythe"); lc.zombieTime = cf.getInt("zombie", "timeRNG"); lc.zombieBosses = cf.getInt("zombie", "bossRNG"); } @EventHandler public void preInit(final FMLPreInitializationEvent event) { ClientCommandHandler.instance.registerCommand(new ToggleCommand()); ClientCommandHandler.instance.registerCommand(new SetkeyCommand()); ClientCommandHandler.instance.registerCommand(new GetkeyCommand()); ClientCommandHandler.instance.registerCommand(new LootCommand()); } @SubscribeEvent public void onChat(final ClientChatReceivedEvent event) { final ToggleCommand tc = new ToggleCommand(); final boolean isGPartyToggled = tc.getToggle("gparty"); String message = event.message.getUnformattedText(); if (!message.contains(":")) { if (isGPartyToggled) { if (message.contains(" has invited all members of ")) { System.out.println(message); try { final SystemTray tray = SystemTray.getSystemTray(); final Image image = Toolkit.getDefaultToolkit().createImage("icon.png"); final TrayIcon trayIcon = new TrayIcon(image, "Guild Party Notifier"); trayIcon.setImageAutoSize(true); trayIcon.setToolTip("Guild Party Notifier"); tray.add(trayIcon); trayIcon.displayMessage("Guild Party", message, TrayIcon.MessageType.INFO); tray.remove(trayIcon); } catch (Exception ex) { System.err.print(ex); } } } // Time is stored as a 32-bit int in seconds, so if Skyblock // survives until 2038, I'll just update it then final LootCommand lc = new LootCommand(); final ConfigHandler cf = new ConfigHandler(); boolean wolfRNG = false; boolean spiderRNG = false; boolean zombieRNG = false; // T6 books if (message.contains("VERY RARE DROP! (Enchanted Book)")) { // Loop through scoreboard to see what boss you're doing List scoreboard = ScoreboardHandler.getSidebarLines(); for (String s : scoreboard) { String sCleaned = ScoreboardHandler.cleanSB(s); if (sCleaned.contains("Sven Packmaster")) { lc.wolfBooks++; cf.writeIntConfig("wolf", "book", lc.wolfBooks); } else if (sCleaned.contains("Tarantula Broodfather")) { lc.spiderBooks++; cf.writeIntConfig("spider", "book", lc.spiderBooks); } else if (sCleaned.contains("Revenant Horror")) { lc.zombieBooks++; cf.writeIntConfig("zombie", "book", lc.zombieBooks); } } } // Wolf if (message.contains("Talk to Maddox to claim your Wolf Slayer XP!")) { lc.wolfSvens++; cf.writeIntConfig("wolf", "svens", lc.wolfSvens); } if (message.contains("VERY RARE DROP! (◆ Spirit Rune ")) { lc.wolfSpirits++; cf.writeIntConfig("wolf", "spirit", lc.wolfSpirits); } if (message.contains("CRAZY RARE DROP! (Red Claw Egg)")) { wolfRNG = true; lc.wolfEggs++; cf.writeIntConfig("wolf", "egg", lc.wolfEggs); } if (message.contains("CRAZY RARE DROP! (◆ Couture Rune")) { wolfRNG = true; lc.wolfCoutures++; cf.writeIntConfig("wolf", "couture", lc.wolfCoutures); } // How did Skyblock devs even manage to make this item Rename Me if (message.contains("CRAZY RARE DROP! (Grizzly Bait)") || message.contains("CRAZY RARE DROP! (Rename Me)")) { wolfRNG = true; lc.wolfBaits++; cf.writeIntConfig("wolf", "bait", lc.wolfBaits); } if (message.contains("CRAZY RARE DROP! (Overflux Capacitor)")) { wolfRNG = true; lc.wolfFluxes++; cf.writeIntConfig("wolf", "flux", lc.wolfFluxes); } // Spider if (message.contains("Talk to Maddox to claim your Spider Slayer XP!")) { lc.spiderTarantulas++; cf.writeIntConfig("spider", "tarantulas", lc.spiderTarantulas); } if (message.contains("VERY RARE DROP! (◆ Bite Rune")) { lc.spiderBites++; cf.writeIntConfig("spider", "bite", lc.spiderBites); } if (message.contains("VERY RARE DROP! (Spider Catalyst)")) { lc.spiderCatalysts++; cf.writeIntConfig("spider", "catalyst", lc.spiderCatalysts); } // T3 Spider Book Drop if (message.contains("CRAZY RARE DROP! (Enchanted Book)")) { lc.spiderBooks++; cf.writeIntConfig("spider", "book", lc.spiderBooks); } if (message.contains("CRAZY RARE DROP! (Fly Swatter)")) { spiderRNG = true; lc.spiderSwatters++; cf.writeIntConfig("spider", "swatter", lc.spiderSwatters); } if (message.contains("CRAZY RARE DROP! (Tarantula Talisman")) { spiderRNG = true; lc.spiderTalismans++; cf.writeIntConfig("spider", "talisman", lc.spiderTalismans); } if (message.contains("CRAZY RARE DROP! (Digested Mosquito)")) { spiderRNG = true; lc.spiderMosquitos++; cf.writeIntConfig("spider", "mosquito", lc.spiderMosquitos); } // Zombie if (message.contains("Talk to Maddox to claim your Zombie Slayer XP!")) { lc.zombieRevs++; cf.writeIntConfig("zombie", "revs", lc.zombieRevs); } // I couldn't find a pic of someone getting this drop, so I'm assuming this works if (message.contains("VERY RARE DROP! (Revenant Catalyst)")) { lc.zombieRevCatas++; cf.writeIntConfig("zombie", "revCatalyst", lc.zombieRevCatas); } if (message.contains("VERY RARE DROP! (◆ Pestilence Rune")) { lc.zombiePestilences++; cf.writeIntConfig("zombie", "pestilence", lc.zombiePestilences); } if (message.contains("VERY RARE DROP! (Undead Catalyst)")) { lc.zombieUndeadCatas++; cf.writeIntConfig("zombie", "undeadCatalyst", lc.zombieUndeadCatas); } if (message.contains("CRAZY RARE DROP! (Beheaded Horror)")) { zombieRNG = true; lc.zombieBeheadeds++; cf.writeIntConfig("zombie", "beheaded", lc.zombieBeheadeds); } if (message.contains("CRAZY RARE DROP! (◆ Snake Rune")) { zombieRNG = true; lc.zombieSnakes++; cf.writeIntConfig("zombie", "snake", lc.zombieSnakes); } if (message.contains("CRAZY RARE DROP! (Scythe Blade)")) { zombieRNG = true; lc.zombieScythes++; cf.writeIntConfig("zombie", "scythe", lc.zombieScythes); } if (wolfRNG) { lc.wolfTime = (int) System.currentTimeMillis() / 1000; lc.wolfBosses = 0; cf.writeIntConfig("wolf", "timeRNG", lc.wolfTime); cf.writeIntConfig("wolf", "bossRNG", 0); } else { if (lc.wolfBosses != -1) { lc.wolfBosses++; } cf.writeIntConfig("wolf", "bossRNG", lc.wolfBosses); } if (spiderRNG) { lc.spiderTime = (int) System.currentTimeMillis() / 1000; lc.spiderBosses = 0; cf.writeIntConfig("spider", "timeRNG", lc.spiderTime); cf.writeIntConfig("spider", "bossRNG", 0); } else { if (lc.spiderBosses != -1) { lc.spiderBosses++; } cf.writeIntConfig("spider", "bossRNG", lc.spiderBosses); } if (zombieRNG) { lc.zombieTime = (int) System.currentTimeMillis() / 1000; lc.zombieBosses = 0; cf.writeIntConfig("zombie", "timeRNG", lc.zombieTime); cf.writeIntConfig("zombie", "bossRNG", 0); } else { if (lc.zombieBosses != -1) { lc.zombieBosses++; } cf.writeIntConfig("wolf", "bossRNG", lc.zombieBosses); } } } @SubscribeEvent public void renderPlayerInfo(final RenderGameOverlayEvent.Post event) { if (event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE) return; final ToggleCommand tc = new ToggleCommand(); final boolean isCoordsToggled = tc.getToggle("coords"); if (isCoordsToggled) { ScaledResolution scaled = new ScaledResolution(Minecraft.getMinecraft()); EntityPlayer player = Minecraft.getMinecraft().thePlayer; double xDir = (player.rotationYaw % 360 + 360) % 360; if (xDir > 180) xDir -= 360; xDir = (double) Math.round(xDir * 10d) / 10d; double yDir = (double) Math.round(player.rotationPitch * 10d) / 10d; String coordText = (int) player.posX + " / " + (int) player.posY + " / " + (int) player.posZ + " (" + xDir + " / " + yDir + ")"; int height = scaled.getScaledHeight(); new TextRenderer(Minecraft.getMinecraft(), coordText, 5, height - 25, Integer.parseInt("FFFFFF", 16)); } } }