diff --git a/src/main/java/me/night0721/lilase/Lilase.java b/src/main/java/me/night0721/lilase/Lilase.java index 777495a..0b57cdd 100644 --- a/src/main/java/me/night0721/lilase/Lilase.java +++ b/src/main/java/me/night0721/lilase/Lilase.java @@ -23,7 +23,7 @@ import net.minecraftforge.fml.common.gameevent.TickEvent; public class Lilase { public static final String MOD_NAME = "Lilase"; public static final String MODID = "Lilase"; - public static final String VERSION = "1.0.0"; + public static final String VERSION = "1.0.1-beta"; static int tickAmount; public static AuctionHouse auctionHouse; public static AHConfig config; @@ -39,6 +39,7 @@ public class Lilase { ConfigUtils.register(); auctionHouse = new AuctionHouse(); KeyBindingManager.registerKeyBindings(); + ConfigUtils.checkWebhookAndAPI(); } @Subscribe diff --git a/src/main/java/me/night0721/lilase/features/ah/AuctionHouse.java b/src/main/java/me/night0721/lilase/features/ah/AuctionHouse.java index b9ab9e3..9e8c152 100644 --- a/src/main/java/me/night0721/lilase/features/ah/AuctionHouse.java +++ b/src/main/java/me/night0721/lilase/features/ah/AuctionHouse.java @@ -29,7 +29,7 @@ public class AuctionHouse { private static long lastAction; private static Thread thread; private Boolean open = false; - private final DiscordWebhook webhook; + private static final DiscordWebhook webhook = new DiscordWebhook(ConfigUtils.getString("main", "Webhook")); private final List items = new ArrayList<>(); private final List temp_items = new ArrayList<>(); private final List posted = new ArrayList<>(); @@ -40,14 +40,14 @@ public class AuctionHouse { // items.add(new Item("Aspect of the Void", ItemType.WEAPON, 8000000, ItemTier.EPIC)); // items.add(new Item("Bal", ItemType.MISC, 10000000, ItemTier.EPIC)); // items.add(new Item(" ", ItemType.ANY, 1000, ItemTier.ANY)); - if (ConfigUtils.getString("item1", "Name") != "") + + if (!ConfigUtils.getString("item1", "Name").equals("") && !ConfigUtils.getString("item1", "Type").equals("") && !ConfigUtils.getString("item1", "Tier").equals("") && ConfigUtils.getInt("item1", "Price") != 0) items.add(new Item(ConfigUtils.getString("item1", "Name"), ItemType.valueOf(ConfigUtils.getString("item1", "Type")), ConfigUtils.getInt("item1", "Price"), ItemTier.valueOf(ConfigUtils.getString("item1", "Tier")))); - if (ConfigUtils.getString("item2", "Name") != "") + if (!ConfigUtils.getString("item2", "Name").equals("") && !ConfigUtils.getString("item2", "Type").equals("") && !ConfigUtils.getString("item2", "Tier").equals("") && ConfigUtils.getInt("item2", "Price") != 0) items.add(new Item(ConfigUtils.getString("item2", "Name"), ItemType.valueOf(ConfigUtils.getString("item2", "Type")), ConfigUtils.getInt("item2", "Price"), ItemTier.valueOf(ConfigUtils.getString("item2", "Tier")))); - if (ConfigUtils.getString("item3", "Name") != "") + if (!ConfigUtils.getString("item3", "Name").equals("") && !ConfigUtils.getString("item3", "Type").equals("") && !ConfigUtils.getString("item3", "Tier").equals("") && ConfigUtils.getInt("item3", "Price") != 0) items.add(new Item(ConfigUtils.getString("item3", "Name"), ItemType.valueOf(ConfigUtils.getString("item3", "Type")), ConfigUtils.getInt("item3", "Price"), ItemTier.valueOf(ConfigUtils.getString("item3", "Tier")))); - webhook = new DiscordWebhook(ConfigUtils.getString("main", "Webhook")); webhook.setUsername("Lilase - Auction House"); webhook.setAvatarUrl("https://wallpapercave.com/wp/wp2412537.jpg"); } @@ -71,7 +71,17 @@ public class AuctionHouse { } private void getItem() throws IOException, JSONException { - if (items.size() == 0) return; + if (ConfigUtils.getString("main", "APIKey").equals("") || ConfigUtils.getString("main", "Webhook").equals("")) { + Utils.sendMessage("Missing APIKey or Webhook, stopping"); + toggleAuction(); + return; + } + if (items.size() == 0 && open == false) return; + if (items.size() == 0) { + Utils.sendMessage("No Item queued, stopping"); + toggleAuction(); + return; + } URL url = new URL("https://api.hypixel.net/skyblock/auctions"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestProperty("Content-Type", "application/json"); @@ -130,15 +140,9 @@ public class AuctionHouse { Pattern pattern = Pattern.compile("ยง[0-9a-z]", Pattern.MULTILINE); Matcher matcher = pattern.matcher(auction.getString("item_lore")); String updated = matcher.replaceAll(""); - webhook.addEmbed(new DiscordWebhook.EmbedObject().setTitle("Item Is On Low Price").setAuthor("night0721", "https://github.com/night0721", "https://avatars.githubusercontent.com/u/77528305?v=4").setDescription(updated.replace("\n", "\\n")).addField("Item", auction.getString("item_name"), true).addField("Price", format.format(auction.getInt("starting_bid")) + " coins", true).addField("Seller", profile.getJSONObject("player").getString("displayname"), true).addField("Started for", toDuration(System.currentTimeMillis() - auction.getLong("start")), true).addField("Ends in", getTimeSinceDate(auction.getLong("end") - System.currentTimeMillis()), true).setUrl("https://www.brandonfowler.me/skyblockah/?uuid=" + auction.getString("uuid")).setColor(Color.decode("#003153"))); + webhook.addEmbed(new DiscordWebhook.EmbedObject().setTitle("Bought an item on low price").setUrl("https://sky.coflnet.com/auction/" + auction.getString("uuid")).setAuthor("night0721", "https://github.com/night0721", "https://avatars.githubusercontent.com/u/77528305?v=4").setDescription(updated.replace("\n", "\\n")).addField("Item", auction.getString("item_name"), true).addField("Price", format.format(auction.getInt("starting_bid")) + " coins", true).addField("Seller", profile.getJSONObject("player").getString("displayname"), true).addField("Started for", toDuration(System.currentTimeMillis() - auction.getLong("start")), true).addField("Ends in", getTimeSinceDate(auction.getLong("end") - System.currentTimeMillis()), true).setColor(Color.decode("#003153"))); webhook.setContent(auction.getString("item_name") + " is sale at " + format.format(auction.getInt("starting_bid")) + "! `" + "/viewauction " + auction.getString("uuid") + "`"); - new Thread(() -> { - try { - webhook.execute(); - } catch (IOException e) { - e.printStackTrace(); - } - }).start(); + uuid = auction.getString("uuid"); message_toSend = "Auction House: " + auction.getString("item_name") + " is sale for " + format.format(auction.getInt("starting_bid")) + "!"; clickState = States.OPEN; @@ -187,12 +191,13 @@ public class AuctionHouse { public void toggleAuction() { if (open) { Utils.sendMessage("Stopped Auction House"); - items.forEach(item -> temp_items.add(item)); + temp_items.addAll(items); items.clear(); open = false; } else { if (Utils.checkInHub()) { Utils.sendMessage("Started Auction House"); + items.addAll(temp_items); thread = new Thread(() -> { while (true) { try { @@ -204,9 +209,7 @@ public class AuctionHouse { }); thread.start(); open = true; - } else { - Utils.sendMessage("Detected not in hub, please go to hub to start"); - } + } else Utils.sendMessage("Detected not in hub, please go to hub to start"); } } @@ -221,14 +224,24 @@ public class AuctionHouse { case CONFIRM: if (System.currentTimeMillis() - lastAction < 500) return; PlayerUtils.mc.playerController.windowClick(PlayerUtils.mc.thePlayer.openContainer.windowId, 11, 0, 0, PlayerUtils.mc.thePlayer); + lastAction = System.currentTimeMillis(); clickState = States.NONE; break; case OPEN: AuctionHouse.sendAuction(); lastAction = System.currentTimeMillis(); clickState = States.CLICK; - case STOP: - thread = null; + break; + case EXECUTE: + new Thread(() -> { + try { + webhook.execute(); + } catch (IOException e) { + e.printStackTrace(); + } + }).start(); + clickState = States.NONE; + break; case NONE: break; } @@ -237,12 +250,12 @@ public class AuctionHouse { enum ItemTier { - ANY, COMMON, UNCOMMON, RARE, EPIC, LEGENDARY, MYTHIC, DIVINE, SPECIAL, VERY_SPECIAL, + ANY, COMMON, UNCOMMON, RARE, EPIC, LEGENDARY, MYTHIC, DIVINE, SPECIAL, VERY_SPECIAL } enum ItemType { - ANY("any"), WEAPON("weapon"), ARMOR("armor"), ACCESSORIES("accessories"), CONSUMABLES("consumables"), BLOCKS("blocks"), MISC("misc"), - ; + ANY("any"), WEAPON("weapon"), ARMOR("armor"), ACCESSORIES("accessories"), CONSUMABLES("consumables"), BLOCKS("blocks"), MISC("misc"); + public final String lowercase; public String getLowercase() { diff --git a/src/main/java/me/night0721/lilase/features/ah/States.java b/src/main/java/me/night0721/lilase/features/ah/States.java index 6fb818d..6cd15b3 100644 --- a/src/main/java/me/night0721/lilase/features/ah/States.java +++ b/src/main/java/me/night0721/lilase/features/ah/States.java @@ -1,5 +1,5 @@ package me.night0721.lilase.features.ah; public enum States { - OPEN, NONE, CLICK, CONFIRM, STOP + OPEN, NONE, CLICK, CONFIRM, EXECUTE } \ No newline at end of file diff --git a/src/main/java/me/night0721/lilase/gui/TextRenderer.java b/src/main/java/me/night0721/lilase/gui/TextRenderer.java new file mode 100644 index 0000000..3ccb7ea --- /dev/null +++ b/src/main/java/me/night0721/lilase/gui/TextRenderer.java @@ -0,0 +1,65 @@ +package me.night0721.lilase.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import org.lwjgl.opengl.GL11; + +import java.awt.*; + +public class TextRenderer { + public TextRenderer(Minecraft mc, String text, int x, int y, double scale) { + double scaleReset = Math.pow(scale, -1); + + GL11.glScaled(scale, scale, scale); + y -= mc.fontRendererObj.FONT_HEIGHT; + for (String line : text.split("\n")) { + y += mc.fontRendererObj.FONT_HEIGHT * scale; + /*if (ToggleCommand.outlineTextToggled) { + String noColorLine = StringUtils.stripControlCodes(line); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale) - 1, (int) Math.round(y / scale), 0x000000, false); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale) + 1, (int) Math.round(y / scale), 0x000000, false); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale), (int) Math.round(y / scale) - 1, 0x000000, false); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale), (int) Math.round(y / scale) + 1, 0x000000, false); + mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF, false); + } else {*/ + mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF, true); + //} + } + GL11.glScaled(scaleReset, scaleReset, scaleReset); + GlStateManager.color(1, 1, 1, 1); + } + + public TextRenderer(Minecraft mc, String text, int x, int y, double scale, Color color) { + double scaleReset = Math.pow(scale, -1); + + GL11.glScaled(scale, scale, scale); + y -= mc.fontRendererObj.FONT_HEIGHT; + for (String line : text.split("\n")) { + y += mc.fontRendererObj.FONT_HEIGHT * scale; + /*if (ToggleCommand.outlineTextToggled) { + String noColorLine = StringUtils.stripControlCodes(line); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale) - 1, (int) Math.round(y / scale), 0x000000, false); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale) + 1, (int) Math.round(y / scale), 0x000000, false); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale), (int) Math.round(y / scale) - 1, 0x000000, false); + mc.fontRendererObj.drawString(noColorLine, (int) Math.round(x / scale), (int) Math.round(y / scale) + 1, 0x000000, false); + mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), 0xFFFFFF, false); + } else {*/ + mc.fontRendererObj.drawString(line, (int) Math.round(x / scale), (int) Math.round(y / scale), color.getRGB(), true); + //} + } + GL11.glScaled(scaleReset, scaleReset, scaleReset); + GlStateManager.color(1, 1, 1, 1); + } + + public static void drawString(String text, int x, int y, double scale) { + new TextRenderer(Minecraft.getMinecraft(), text, x, y, scale); + } + + public static void drawString(String text, int x, int y, double scale, Color color) { + new TextRenderer(Minecraft.getMinecraft(), text, x, y, scale, color); + } + + public void drawCenteredString(String text, int x, int y, double scale) { + drawString(text, x - Minecraft.getMinecraft().fontRendererObj.getStringWidth(text) / 2, y - Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT / 2, 1); + } +} \ No newline at end of file diff --git a/src/main/java/me/night0721/lilase/managers/EventManager.java b/src/main/java/me/night0721/lilase/managers/EventManager.java index eb74e34..a9e403f 100644 --- a/src/main/java/me/night0721/lilase/managers/EventManager.java +++ b/src/main/java/me/night0721/lilase/managers/EventManager.java @@ -18,13 +18,17 @@ public class EventManager { PlayerUtils.mc.playerController.windowClick(PlayerUtils.mc.thePlayer.openContainer.windowId, 49, 0, 0, PlayerUtils.mc.thePlayer); // Close the window as could not buy } else if (message.equals("You don't have enough coins to afford this bid!")) { System.out.println("Failed to buy item, not enough money. Closing the menu"); - AuctionHouse.clickState = States.STOP; + AuctionHouse.clickState = States.NONE; PlayerUtils.mc.playerController.windowClick(PlayerUtils.mc.thePlayer.openContainer.windowId, 49, 0, 0, PlayerUtils.mc.thePlayer); // Close the window as could not buy } else if (message.contains("Your new API key is")) { System.out.println("Detected new API key, saving it to config"); Utils.sendMessage("Saved new API key to config"); String apiKey = message.replace("Your new API key is ", ""); ConfigUtils.writeStringConfig("main", "APIKey", apiKey); + } else if (message.equals("Claiming BIN auction...")) { + AuctionHouse.clickState = States.EXECUTE; + } else if (message.equals("This BIN sale is still in its grace period!")) { + AuctionHouse.clickState = States.CLICK; } } } diff --git a/src/main/java/me/night0721/lilase/managers/KeyBindingManager.java b/src/main/java/me/night0721/lilase/managers/KeyBindingManager.java index 2595843..12a250e 100644 --- a/src/main/java/me/night0721/lilase/managers/KeyBindingManager.java +++ b/src/main/java/me/night0721/lilase/managers/KeyBindingManager.java @@ -1,27 +1,20 @@ package me.night0721.lilase.managers; import me.night0721.lilase.Lilase; -import me.night0721.lilase.utils.PlayerUtils; -import net.minecraft.block.Block; import net.minecraft.client.settings.KeyBinding; -import net.minecraft.init.Blocks; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.InputEvent; import org.lwjgl.input.Keyboard; -import java.util.ArrayList; -import java.util.Arrays; - public class KeyBindingManager { private static final KeyBinding[] keyBindings = new KeyBinding[4]; - private static final ArrayList interactables = new ArrayList<>(Arrays.asList(Blocks.acacia_door, Blocks.anvil, Blocks.beacon, Blocks.bed, Blocks.birch_door, Blocks.brewing_stand, Blocks.command_block, Blocks.crafting_table, Blocks.chest, Blocks.dark_oak_door, Blocks.daylight_detector, Blocks.daylight_detector_inverted, Blocks.dispenser, Blocks.dropper, Blocks.enchanting_table, Blocks.ender_chest, Blocks.furnace, Blocks.hopper, Blocks.jungle_door, Blocks.lever, Blocks.noteblock, Blocks.powered_comparator, Blocks.unpowered_comparator, Blocks.powered_repeater, Blocks.unpowered_repeater, Blocks.standing_sign, Blocks.wall_sign, Blocks.trapdoor, Blocks.trapped_chest, Blocks.wooden_button, Blocks.stone_button, Blocks.oak_door, Blocks.skull)); +// private static final ArrayList interactables = new ArrayList<>(Arrays.asList(Blocks.acacia_door, Blocks.anvil, Blocks.beacon, Blocks.bed, Blocks.birch_door, Blocks.brewing_stand, Blocks.command_block, Blocks.crafting_table, Blocks.chest, Blocks.dark_oak_door, Blocks.daylight_detector, Blocks.daylight_detector_inverted, Blocks.dispenser, Blocks.dropper, Blocks.enchanting_table, Blocks.ender_chest, Blocks.furnace, Blocks.hopper, Blocks.jungle_door, Blocks.lever, Blocks.noteblock, Blocks.powered_comparator, Blocks.unpowered_comparator, Blocks.powered_repeater, Blocks.unpowered_repeater, Blocks.standing_sign, Blocks.wall_sign, Blocks.trapdoor, Blocks.trapped_chest, Blocks.wooden_button, Blocks.stone_button, Blocks.oak_door, Blocks.skull)); public static void registerKeyBindings() { - keyBindings[0] = new KeyBinding("Ghost Block Bind", Keyboard.KEY_G, Lilase.MOD_NAME); - keyBindings[1] = new KeyBinding("Hub", Keyboard.KEY_DIVIDE, Lilase.MOD_NAME); - keyBindings[2] = new KeyBinding("Auction House", Keyboard.KEY_END, Lilase.MOD_NAME); - keyBindings[3] = new KeyBinding("Config", Keyboard.KEY_MULTIPLY, Lilase.MOD_NAME); + //keyBindings[0] = new KeyBinding("Ghost Block Bind", Keyboard.KEY_G, Lilase.MOD_NAME); + keyBindings[0] = new KeyBinding("Auction House", Keyboard.KEY_END, Lilase.MOD_NAME); + keyBindings[1] = new KeyBinding("Config", Keyboard.KEY_MULTIPLY, Lilase.MOD_NAME); for (KeyBinding keyBinding : keyBindings) { ClientRegistry.registerKeyBinding(keyBinding); } @@ -29,21 +22,28 @@ public class KeyBindingManager { @SubscribeEvent public void onKeyPress(InputEvent.KeyInputEvent event) { - if (keyBindings[0].isKeyDown()) { - if (PlayerUtils.mc.objectMouseOver.getBlockPos() == null) return; - Block block = PlayerUtils.mc.theWorld.getBlockState(PlayerUtils.mc.objectMouseOver.getBlockPos()).getBlock(); - if (!interactables.contains(block)) { - PlayerUtils.mc.theWorld.setBlockToAir(PlayerUtils.mc.objectMouseOver.getBlockPos()); - } - } - if (keyBindings[1].isKeyDown()) { - PlayerUtils.mc.thePlayer.sendChatMessage("/hub"); - } - if (keyBindings[2].isPressed()) { +// if (keyBindings[0].isKeyDown()) { +// if (PlayerUtils.mc.objectMouseOver.getBlockPos() == null) return; +// Block block = PlayerUtils.mc.theWorld.getBlockState(PlayerUtils.mc.objectMouseOver.getBlockPos()).getBlock(); +// if (!interactables.contains(block)) { +// PlayerUtils.mc.theWorld.setBlockToAir(PlayerUtils.mc.objectMouseOver.getBlockPos()); +// } +// } +// if (keyBindings[1].isKeyDown()) { +// List lines = new ArrayList<>(); +// lines.add("X: " + Math.round(PlayerUtils.mc.thePlayer.posX)); +// lines.add("Y: " + Math.round(PlayerUtils.mc.thePlayer.posY)); +// lines.add("Z: " + Math.round(PlayerUtils.mc.thePlayer.posZ)); +// for (String line : lines) { +// TextRenderer.drawString(line, 0, 0, 1); +// } +// } + if (keyBindings[0].isPressed()) { Lilase.auctionHouse.toggleAuction(); } - if (keyBindings[3].isPressed()) { + if (keyBindings[1].isPressed()) { Lilase.config.openGui(); } } + } diff --git a/src/main/java/me/night0721/lilase/utils/ConfigUtils.java b/src/main/java/me/night0721/lilase/utils/ConfigUtils.java index 3633343..47c220d 100644 --- a/src/main/java/me/night0721/lilase/utils/ConfigUtils.java +++ b/src/main/java/me/night0721/lilase/utils/ConfigUtils.java @@ -14,6 +14,21 @@ public class ConfigUtils { reloadConfig(); } + public static void checkWebhookAndAPI() { + new Thread(() -> { + while (true) { + try { + Thread.sleep(120000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (getString("main", "APIKey").equals("") || getString("main", "Webhook").equals("")) { + Utils.sendMessage("API Key or Webhook is not set, please set it in the menu (Press *)"); + } + } + }).start(); + } + public static void reloadConfig() { if (!hasKey("main", "APIKey")) writeStringConfig("main", "APIKey", ""); if (!hasKey("main", "Webhook")) writeStringConfig("main", "Webhook", ""); diff --git a/src/main/java/me/night0721/lilase/utils/Utils.java b/src/main/java/me/night0721/lilase/utils/Utils.java index 2c32bec..dcb29cb 100644 --- a/src/main/java/me/night0721/lilase/utils/Utils.java +++ b/src/main/java/me/night0721/lilase/utils/Utils.java @@ -9,6 +9,7 @@ import java.util.List; public class Utils { public static boolean inDungeon; + public static boolean inHub; public static String translateAlternateColorCodes(String text) { char[] b = text.toCharArray(); @@ -44,9 +45,10 @@ public class Utils { List scoreboard = ScoreboardUtils.getSidebarLines(); for (String s : scoreboard) { String sCleaned = ScoreboardUtils.cleanSB(s); - return sCleaned.contains("Forest") || sCleaned.contains("Village") || sCleaned.contains("Farm") || sCleaned.contains("Mountain") || sCleaned.contains("Wilderness") || sCleaned.contains("Community") || sCleaned.contains("Graveyard") || sCleaned.contains("Bazaar") || sCleaned.contains("Auction"); + if (sCleaned.contains("Forest") || sCleaned.contains("Village") || sCleaned.contains("Farm") || sCleaned.contains("Mountain") || sCleaned.contains("Wilderness") || sCleaned.contains("Community") || sCleaned.contains("Graveyard") || sCleaned.contains("Bazaar") || sCleaned.contains("Auction")) + inHub = true; } - return false; + return inHub; } public static void sendMessage(String message) {