diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md
index 28cd6e6..150891f 100644
--- a/.github/CHANGELOG.md
+++ b/.github/CHANGELOG.md
@@ -36,4 +36,9 @@
- v2.0
- Added a config for disabling words and crabby
- Fixing cofl macro cannot open issue
- - Adding auto sell to cofl macro
\ No newline at end of file
+ - Adding auto sell to cofl macro
+- v2.0.1
+ - Fix webhook issues, now it would send when soneone bought your item
+ - Remove sniper option, only cofl macro exist now
+ - Added purse to webhook
+ - Added many more stuff to debug
\ No newline at end of file
diff --git a/.github/README.md b/.github/README.md
index c7a3951..6f4e35e 100644
--- a/.github/README.md
+++ b/.github/README.md
@@ -1,6 +1,6 @@
Auction House Flipper - Lilase
-
+
# Introduction:
@@ -9,11 +9,9 @@ If you have any questions please join [Discord Server](https://night0721.me/disc
For how to use, see **[here](https://github.com/night0721/lilase#how-to-use)**
# Features:
-- Auto buy any item you want, with query customised by yourself
- Auto walk to the auction house
- Auto sell after buying with profit check, so profit is ensured
-- Can customise fetch time (the faster, the higher chance to get the item you want)
-- Webhook system to send you that an item has been bought
+- Webhook system to send you that an item has been bought, sold, flipped
- Failsafe in Limbo
- Auto reconnect to server when disconnected
- Auto skip confirmation screen
@@ -25,6 +23,7 @@ For how to use, see **[here](https://github.com/night0721/lilase#how-to-use)**
- Modules toggleable in game
- Check maximum profit percentage before buying so duped items won't be bought
- COFL macro
+- auto sell to cofl macro
- Server ID on scoreboard hider
- page flipper [WIP]
@@ -39,57 +38,24 @@ For how to use, see **[here](https://github.com/night0721/lilase#how-to-use)**
8. save the file and press END key to start auction house sniper(or change it in control settings)
9. For example configuration, see [here](https://github.com/night0721/Lilase#example-config)
-# **IMPORTANT INFO**
-
-List of things you can put in Tier section
-```
-ANY, COMMON, UNCOMMON, RARE, EPIC, LEGENDARY, MYTHIC, DIVINE, SPECIAL, VERY_SPECIAL
-```
-List of things you can put in Type section
-```
-ANY, WEAPON, ARMOR, ACCESSORIES, CONSUMABLES, BLOCKS, MISC
-```
# Changelog:
[ChangeLog](https://github.com/night0721/Lilase/blob/master/.github/CHANGELOG.md)
# To Do Features:
- Console client??
- Page flipper for specific items(query)
-- Wither Impact in lore check
-- Blue omelette in lore check
- pre api?
# Example Config:
-```cfg
+```json
{
- "APIKey": "",
"SendMessageToWebhook": true,
"Webhook": "",
"ReconnectDelay": 20,
- "AuctionHouseDelay": 8,
"BedSpamDelay": 100,
"OnlySniper": false,
- "checkMaximumProfitPercentageBeforeBuy": false,
- "MaximumProfitPercentage": 1000,
- "MinimumProfitPercentage": 400,
- "items": [
- {"Name": " ", "Type": "ANY", "Price": 1000, "Tier": "ANY"},
- {
- "Name": "Livid Dagger",
- "Type": "WEAPON",
- "Price": 5000000,
- "Tier": "LEGENDARY"
- },
- {"Name": "", "Type": "", "Price": 0, "Tier": ""}
- ],
- "blacklist": [
- {"Name": "Rune", "Type": "ANY", "Price": 1, "Tier": "ANY"},
- {"Name": "", "Type": "", "Price": 0, "Tier": ""},
- {"Name": "", "Type": "", "Price": 0, "Tier": ""}
- ],
"BedSpam": true,
"GUI": true,
- "checkProfitPercentageBeforeBuy": false,
"GUI_COLOR": -1,
"SniperMode": true
}
diff --git a/gradle.properties b/gradle.properties
index 59de5b0..a8ea5c5 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,6 +1,6 @@
mod_name = Lilase
mod_id = lilase
-mod_version = 2.0
+mod_version = 2.0.1
essential.defaults.loom=0
diff --git a/src/main/java/me/night0721/lilase/Lilase.java b/src/main/java/me/night0721/lilase/Lilase.java
index 1142ec4..087e230 100644
--- a/src/main/java/me/night0721/lilase/Lilase.java
+++ b/src/main/java/me/night0721/lilase/Lilase.java
@@ -26,15 +26,13 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
-import java.io.IOException;
-
import static me.night0721.lilase.config.AHConfig.RECONNECT_DELAY;
@Mod(modid = Lilase.MODID, name = Lilase.MOD_NAME, version = Lilase.VERSION, acceptedMinecraftVersions = "[1.8.9]")
public class Lilase {
public static final String MOD_NAME = "Lilase";
public static final String MODID = "Lilase";
- public static final String VERSION = "2.0";
+ public static final String VERSION = "2.0.1";
public static final Minecraft mc = Minecraft.getMinecraft();
public static Sniper sniper;
public static PageFlipper pageFlipper;
@@ -66,11 +64,10 @@ public class Lilase {
}
@SubscribeEvent
- public void onTick(TickEvent.ClientTickEvent event) throws IOException {
+ public void onTick(TickEvent.ClientTickEvent event) {
if (mc.thePlayer == null || event.phase != TickEvent.Phase.START) return;
tickAmount++;
if (tickAmount % 20 == 0) Utils.checkFooter();
- if (tickAmount % (20 * 60) == 0) sniper.start();
if (tickAmount % 2400 == 0) configHandler.checkWebhookAndAPI();
if (pageFlipper != null) pageFlipper.switchStates();
if (QueueItem.flipper != null) QueueItem.flipper.switchStates();
diff --git a/src/main/java/me/night0721/lilase/config/AHConfig.java b/src/main/java/me/night0721/lilase/config/AHConfig.java
index 4663f77..3afb4fd 100644
--- a/src/main/java/me/night0721/lilase/config/AHConfig.java
+++ b/src/main/java/me/night0721/lilase/config/AHConfig.java
@@ -15,15 +15,9 @@ public class AHConfig extends Config {
addListener("SEND_MESSAGE", () -> Lilase.configHandler.setBoolean("SendMessageToWebhook", SEND_MESSAGE));
addListener("WEBHOOK", () -> Lilase.configHandler.setString("Webhook", WEBHOOK));
addListener("RECONNECT_DELAY", () -> Lilase.configHandler.setInt("ReconnectDelay", Math.round(RECONNECT_DELAY)));
- addListener("AUCTION_HOUSE_DELAY", () -> Lilase.configHandler.setInt("AuctionHouseDelay", Math.round(AUCTION_HOUSE_DELAY)));
- addListener("SNIPER_MODE", () -> Lilase.configHandler.setInt("SniperMode", SNIPER_MODE));
addListener("BED_SPAM", () -> Lilase.configHandler.setBoolean("BedSpam", BED_SPAM));
addListener("BED_SPAM_DELAY", () -> Lilase.configHandler.setInt("BedSpamDelay", Math.round(BED_SPAM_DELAY)));
addListener("ONLY_SNIPER", () -> Lilase.configHandler.setBoolean("OnlySniper", ONLY_SNIPER));
- addListener("CHECK_PERCENTAGE", () -> Lilase.configHandler.setBoolean("checkProfitPercentageBeforeBuy", CHECK_PERCENTAGE));
- addListener("MINIMUM_PROFIT_PERCENTAGE", () -> Lilase.configHandler.setInt("MinimumProfitPercentage", Math.round(MINIMUM_PROFIT_PERCENTAGE)));
- addListener("CHECK_MAXIMUM_PROFIT", () -> Lilase.configHandler.setBoolean("checkMaxiumProfitPercentageBeforeBuy", CHECK_MAXIMUM_PROFIT));
- addListener("MAXIMUM_PROFIT_PERCENTAGE", () -> Lilase.configHandler.setInt("MaximumProfitPercentage", MAXIMUM_PROFIT_PERCENTAGE));
addListener("GUI", () -> Lilase.configHandler.setBoolean("GUI", GUI));
addListener("GUI_COLOR", () -> Lilase.configHandler.setInt("GUI_COLOR", GUI_COLOR.getRGB()));
addDependency("WEBHOOK", "SEND_MESSAGE");
@@ -32,12 +26,6 @@ public class AHConfig extends Config {
addDependency("GUI_COLOR", "GUI");
}
- @Slider(name = "Time per fetch (seconds)", min = 5, max = 15, step = 1, category = "Auction House", subcategory = "Sniper", description = "Time between each fetch of the auction house, the faster the fetch, the more likely you will snipe the item")
- public static int AUCTION_HOUSE_DELAY = 8;
-
- @Dropdown(name = "Sniper Mode", category = "Auction House", subcategory = "Sniper", options = {"API", "Page Flipper[WIP]", "COFL"})
- public static int SNIPER_MODE = 2;
-
@Switch(name = "Bed Spam & Skip Confirm", category = "Auction House", subcategory = "Sniper", description = "Spam the bed to buy the item just after the grace period ends and skips the confirmation of buying the item")
public static boolean BED_SPAM = true;
@@ -56,18 +44,6 @@ public class AHConfig extends Config {
@Number(name = "Reconnect Delay", min = 5, max = 20, category = "Failsafe", description = "Delay between each reconnect attempt to the server")
public static int RECONNECT_DELAY = 20;
- @Switch(name = "Check Profit Percentage Before Buying", category = "Flipper", description = "Check the profit percentage before buying the item, if the profit percentage is too low, it will not buy the item")
- public static boolean CHECK_PERCENTAGE = false;
-
- @Number(name = "Minimum Profit Percentage", min = 100, max = 5000, step = 50, category = "Flipper", description = "Profit percentage to check before buying the item, if the profit percentage is too low, it will not buy the item")
- public static int MINIMUM_PROFIT_PERCENTAGE = 400;
-
- @Switch(name = "Check Maximum Profit Before Buying", category = "Flipper", description = "Check the maximal profit before buying the item, if the maximal profit is too high, it will not buy the item (Can prevent duped items)")
- public static boolean CHECK_MAXIMUM_PROFIT = false;
-
- @Number(name = "Maximum Profit Percentage", min = 1000, max = 10000, step = 1000, category = "Flipper", description = "Maximum profit to check before buying the item, if the maximal profit is too high, it will not buy the item (Can prevent duped items)")
- public static int MAXIMUM_PROFIT_PERCENTAGE = 1000;
-
@Checkbox(name = "GUI", category = "GUI", description = "Enable the GUI")
public static boolean GUI = true;
diff --git a/src/main/java/me/night0721/lilase/config/ConfigHandler.java b/src/main/java/me/night0721/lilase/config/ConfigHandler.java
index 9d19ac9..3ed380c 100644
--- a/src/main/java/me/night0721/lilase/config/ConfigHandler.java
+++ b/src/main/java/me/night0721/lilase/config/ConfigHandler.java
@@ -1,7 +1,6 @@
package me.night0721.lilase.config;
import com.google.gson.Gson;
-import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import me.night0721.lilase.utils.Utils;
@@ -10,7 +9,7 @@ import java.io.*;
public class ConfigHandler {
private final Gson gson = new Gson();
- String path = "/config/Lilase.json";
+ private final String path = "/config/Lilase.json";
private JsonObject config;
public void init() {
@@ -20,7 +19,6 @@ public class ConfigHandler {
public void reloadConfig() {
// TODO: Fix
- if (hasNoKey("APIKey")) setString("APIKey", "");
if (hasNoKey("SendMessageToWebhook")) setBoolean("SendMessageToWebhook", true);
if (hasNoKey("Webhook")) setString("Webhook", "");
if (hasNoKey("ReconnectDelay")) setInt("ReconnectDelay", 20);
@@ -29,27 +27,8 @@ public class ConfigHandler {
if (hasNoKey("BedSpam")) setBoolean("BedSpam", true);
if (hasNoKey("BedSpamDelay")) setInt("BedSpamDelay", 100);
if (hasNoKey("OnlySniper")) setBoolean("OnlySniper", false);
- if (hasNoKey("checkProfitPercentageBeforeBuy")) setBoolean("checkProfitPercentageBeforeBuy", false);
- if (hasNoKey("checkMaximumProfitPercentageBeforeBuy"))
- setBoolean("checkMaximumProfitPercentageBeforeBuy", false);
- if (hasNoKey("MaximumProfitPercentage")) setInt("MaximumProfitPercentage", 1000); //1000%
- if (hasNoKey("MinimumProfitPercentage")) setInt("MinimumProfitPercentage", 400); //400%
if (hasNoKey("GUI")) setBoolean("GUI", true);
if (hasNoKey("GUI_COLOR")) setInt("GUI_COLOR", 0x003153);
- if (hasNoKey("items")) setArray("items", new JsonObject[]{});
- if (hasNoKey("blacklist")) setArray("blacklist", new JsonObject[]{});
- for (int i = 1; i <= 3; i++) {
- if (hasNoItemKey(i, "Name")) setItems(i, "Name", "");
- if (hasNoItemKey(i, "Type")) setItems(i, "Type", "");
- if (hasNoItemKey(i, "Price")) setItems(i, "Price", 0);
- if (hasNoItemKey(i, "Tier")) setItems(i, "Tier", "");
- }
- for (int i = 1; i <= 3; i++) {
- if (hasNoBlacklistKey(i, "Name")) setBlacklists(i, "Name", "");
- if (hasNoBlacklistKey(i, "Type")) setBlacklists(i, "Type", "");
- if (hasNoBlacklistKey(i, "Price")) setBlacklists(i, "Price", 0);
- if (hasNoBlacklistKey(i, "Tier")) setBlacklists(i, "Tier", "");
- }
}
public void checkWebhookAndAPI() {
@@ -80,63 +59,12 @@ public class ConfigHandler {
return config.get(key) == null;
}
- public boolean hasNoItemKey(int i, String key) {
- config = readConfigFile();
- try {
- if (config.getAsJsonArray("items").get(i - 1) == null) return true;
- } catch (Exception e) {
- return true;
- }
- return config.getAsJsonArray("items").get(i - 1).getAsJsonObject().get(key) == null;
- }
-
- public boolean hasNoBlacklistKey(int i, String key) {
- config = readConfigFile();
- try {
- if (config.getAsJsonArray("blacklist").get(i - 1) == null) return true;
- } catch (Exception e) {
- return true;
- }
- return config.getAsJsonArray("blacklist").get(i - 1).getAsJsonObject().get(key) == null;
- }
-
- public boolean getBoolean(String key) {
- config = readConfigFile();
- if (config.get(key) != null) return config.get(key).getAsBoolean();
- return false;
- }
-
- public int getInt(String key) {
- config = readConfigFile();
- if (config.get(key) != null) return config.get(key).getAsInt();
- return 0;
- }
-
public String getString(String key) {
config = readConfigFile();
if (config.get(key) != null) return config.get(key).getAsString();
return null;
}
- public String getString(int item, String key) {
- config = readConfigFile();
- try {
- if (config.getAsJsonArray("items").get(item - 1).getAsJsonObject().get(key) != null)
- return config.getAsJsonArray("items").get(item - 1).getAsJsonObject().get(key).getAsString();
- } catch (Exception ignore) {
- }
- return "";
- }
-
- public int getInt(int item, String key) {
- config = readConfigFile();
- try {
- if (config.getAsJsonArray("items").get(item - 1).getAsJsonObject().get(key) != null)
- return config.getAsJsonArray("items").get(item - 1).getAsJsonObject().get(key).getAsInt();
- } catch (Exception ignore) {
- }
- return 0;
- }
public void setBoolean(String key, boolean value) {
config = readConfigFile();
@@ -159,61 +87,6 @@ public class ConfigHandler {
writeJsonToFile(config);
}
- public void setArray(String key, JsonObject[] value) {
- config = readConfigFile();
- if (config.get(key) != null) config.remove(key);
- JsonArray array = new JsonArray();
- for (JsonObject object : value) {
- array.add(object);
- }
- config.add(key, array);
- writeJsonToFile(config);
- }
-
- public void setItems(int item, String key, Object value) {
- config = readConfigFile();
- try {
- if (config.getAsJsonArray("items").get(item - 1).getAsJsonObject().get(key) != null)
- config.getAsJsonArray("items").get(item - 1).getAsJsonObject().remove(key);
- } catch (Exception e) {
- JsonObject object = new JsonObject();
- object.addProperty("Name", "");
- object.addProperty("Type", "");
- object.addProperty("Price", 0);
- object.addProperty("Tier", "");
- config.getAsJsonArray("items").add(object);
- }
- if (value instanceof Integer)
- config.getAsJsonArray("items").get(item - 1).getAsJsonObject().addProperty(key, (Integer) value);
- else if (value instanceof String)
- config.getAsJsonArray("items").get(item - 1).getAsJsonObject().addProperty(key, (String) value);
- else if (value instanceof Boolean)
- config.getAsJsonArray("items").get(item - 1).getAsJsonObject().addProperty(key, (Boolean) value);
- writeJsonToFile(config);
- }
-
- public void setBlacklists(int item, String key, Object value) {
- config = readConfigFile();
- try {
- if (config.getAsJsonArray("blacklist").get(item - 1).getAsJsonObject().get(key) != null)
- config.getAsJsonArray("blacklist").get(item - 1).getAsJsonObject().remove(key);
- } catch (Exception e) {
- JsonObject object = new JsonObject();
- object.addProperty("Name", "");
- object.addProperty("Type", "");
- object.addProperty("Price", 0);
- object.addProperty("Tier", "");
- config.getAsJsonArray("blacklist").add(object);
- }
- if (value instanceof Integer)
- config.getAsJsonArray("blacklist").get(item - 1).getAsJsonObject().addProperty(key, (Integer) value);
- else if (value instanceof String)
- config.getAsJsonArray("blacklist").get(item - 1).getAsJsonObject().addProperty(key, (String) value);
- else if (value instanceof Boolean)
- config.getAsJsonArray("blacklist").get(item - 1).getAsJsonObject().addProperty(key, (Boolean) value);
- writeJsonToFile(config);
- }
-
public void writeJsonToFile(JsonObject jsonObject) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + path));
diff --git a/src/main/java/me/night0721/lilase/events/ScoreboardRenderEvent.java b/src/main/java/me/night0721/lilase/events/ScoreboardRenderEvent.java
index 0e7175c..0591364 100644
--- a/src/main/java/me/night0721/lilase/events/ScoreboardRenderEvent.java
+++ b/src/main/java/me/night0721/lilase/events/ScoreboardRenderEvent.java
@@ -8,8 +8,8 @@ import net.minecraftforge.fml.common.eventhandler.Event;
// TODO: Implement Lombok Library for clean code
@Cancelable
public class ScoreboardRenderEvent extends Event {
- public ScoreObjective objective;
- public ScaledResolution resolution;
+ public final ScoreObjective objective;
+ public final ScaledResolution resolution;
public ScoreboardRenderEvent(ScoreObjective objective, ScaledResolution resolution) {
this.objective = objective;
diff --git a/src/main/java/me/night0721/lilase/events/SniperFlipperEvents.java b/src/main/java/me/night0721/lilase/events/SniperFlipperEvents.java
index 3b16847..e9665b3 100644
--- a/src/main/java/me/night0721/lilase/events/SniperFlipperEvents.java
+++ b/src/main/java/me/night0721/lilase/events/SniperFlipperEvents.java
@@ -27,6 +27,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.InputEvent;
import org.lwjgl.input.Keyboard;
+import java.awt.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@@ -36,7 +37,7 @@ import java.util.regex.Pattern;
import static me.night0721.lilase.config.AHConfig.GUI_COLOR;
import static me.night0721.lilase.config.AHConfig.SEND_MESSAGE;
-import static me.night0721.lilase.features.flipper.Flipper.rotation;
+import static me.night0721.lilase.features.flipper.Flipper.*;
import static me.night0721.lilase.features.flipper.FlipperState.START;
import static me.night0721.lilase.utils.PlayerUtils.sendPacketWithoutEvent;
@@ -44,21 +45,39 @@ public class SniperFlipperEvents {
private int windowId = 1, price;
private boolean buying = false, bought = false;
private final Clock clock = new Clock();
- private final Pattern
- AUCTION_SOLD_PATTERN = Pattern.compile("^(.*?) bought (.*?) for ([\\d,]+) coins CLICK$"),
- BOUGHT_PATTERN = Pattern.compile("You purchased (\\w+(?:\\s+\\w+)*) for ([\\d,]+)\\s*(\\w+)!"),
- BOUGHT_PATTERN_2 = Pattern.compile("You claimed (.+?) from (.+?)'s auction!"),
- BOUGHT_PATTERN_3 = Pattern.compile("You (purchased|claimed)( (\\\\d+x))? ([^\\\\s]+(\\\\s+[^\\\\d,]+)*)((,| for) (\\\\d+,?)+ coins?(!)?)?");
- // TODO: Split into one pattern
+ private final Pattern AUCTION_SOLD_PATTERN = Pattern.compile("^(.*?) bought (.*?) for ([\\d,]+) coins CLICK$"),
+ pattern = Pattern.compile("You purchased (\\w+(?:\\s+\\w+)*) for ([\\d,]+)\\s*(\\w+)|You claimed (.+?) from (.+?)'s auction!|(You (purchased|claimed)( (\\\\d+x))? ([^\\\\s]+(\\\\s+[^\\\\d,]+)*)((,| for) (\\\\d+,?)+ coins?(!)?))?");
public static final List postedNames = new ArrayList<>();
@SubscribeEvent
public void onChat(ClientChatReceivedEvent event) throws InterruptedException {
String message = event.message.getUnformattedText();
- Matcher matcher = AUCTION_SOLD_PATTERN.matcher(message);
- Matcher boughtMatcher = BOUGHT_PATTERN.matcher(message);
- Matcher boughtMatcher2 = BOUGHT_PATTERN_2.matcher(message);
- Matcher boughtMatcher3 = BOUGHT_PATTERN_3.matcher(message);
+ if (message.startsWith("§6[Auction]")) {
+ Matcher matcher = AUCTION_SOLD_PATTERN.matcher(ScoreboardUtils.cleanSB(message));
+ if (matcher.matches()) {
+ try {
+ webhook.setUsername("Lilase");
+ webhook.setAvatarUrl(icon);
+ webhook.addEmbed(new DiscordWebhook.EmbedObject()
+ .setTitle("Someone bought an item!")
+ .setFooter("Purse: " + format.format(Utils.getPurse()), icon)
+ .addField("Item:", matcher.group(2), true)
+ .addField("Price:", matcher.group(3), true)
+ .addField("Purchaser:", matcher.group(1).split("[Auction] ")[1], true)
+ .setColor(Color.decode("#003153")));
+ if (SEND_MESSAGE) webhook.execute();
+ Utils.debugLog("Notified Webhook");
+ } catch (Exception e) {
+ e.printStackTrace();
+ Utils.debugLog("Failed to send webhook");
+ }
+ Lilase.sniper.incrementAuctionsFlipped();
+ }
+ }
+ /*
+ §6[Auction] §aphiinix_ §ebought §fImplosion Belt §efor §6900,000 coins §lCLICK
+ */
+ Matcher boughtMatcher = pattern.matcher(message);
if (!message.contains(":")) {
if (message.equals("You didn't participate in this auction!")) {
Utils.debugLog("Failed to buy item, not fast enough. Closing the menu");
@@ -66,22 +85,12 @@ public class SniperFlipperEvents {
} else if (message.equals("You don't have enough coins to afford this bid!")) {
Utils.debugLog("Failed to buy item, not enough money. Closing the menu");
InventoryUtils.clickOpenContainerSlot(49);
- } else if (message.contains("Your new API key is")) {
- Utils.debugLog("Detected new API key, saving it to config");
- Utils.debugLog("Saved new API key to config");
- String apiKey = message.replace("Your new API key is ", "");
- Lilase.configHandler.setString("APIKey", apiKey);
- } else if ((boughtMatcher.matches() || boughtMatcher2.matches() || boughtMatcher3.matches()) && bought) {
+ } else if (boughtMatcher.matches() && bought) {
new Thread(() -> {
bought = false;
Utils.debugLog("Bought an item, starting to sell");
- try {
- if (SEND_MESSAGE) Lilase.sniper.webhook.execute();
- } catch (Exception e) {
- Utils.debugLog("Failed to send webhook");
- }
- Utils.debugLog("Target price " + Cofl.price);
- price = Cofl.price;
+ Utils.debugLog("Target price " + Cofl.target);
+ price = Cofl.target;
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
@@ -93,26 +102,24 @@ public class SniperFlipperEvents {
InventoryUtils.clickOpenContainerSlot(13);
Lilase.mc.thePlayer.closeScreen();
Utils.debugLog("Cannot post item as the cost is too low, stopping fliiper and starting sniper");
- Lilase.sniper.toggleAuction();
+ Lilase.cofl.toggleAuction();
Flipper.state = FlipperState.NONE;
} else if (message.contains("Can't create a BIN auction for this item for a PRICE this LOW!")) {
Lilase.mc.thePlayer.closeScreen();
Utils.debugLog("Cannot post item as the cost is too low, stopping fliiper and starting sniper");
- Lilase.sniper.toggleAuction();
+ Lilase.cofl.toggleAuction();
Flipper.state = FlipperState.NONE;
} else if (message.contains("You were spawned in Limbo")) {
Utils.debugLog("Detected in Limbo, stopping everything for 5 minutes");
Utils.addTitle("You got sent to Limbo!");
Flipper.state = FlipperState.NONE;
- if (Lilase.sniper.getOpen()) Lilase.sniper.toggleAuction();
+ if (Lilase.cofl.getOpen()) Lilase.cofl.toggleAuction();
Thread.sleep(5000);
Utils.sendServerMessage("/lobby");
Thread.sleep(5000);
Utils.sendServerMessage("/skyblock");
Thread bzchillingthread = new Thread(bazaarChilling);
bzchillingthread.start();
- } else if (matcher.matches() && postedNames.contains(matcher.group(2))) {
- Lilase.sniper.incrementAuctionsFlipped();
}
}
}
@@ -156,7 +163,7 @@ public class SniperFlipperEvents {
}
Lilase.mc.thePlayer.sendChatMessage("/hub");
Thread.sleep(6000);
- Lilase.sniper.toggleAuction();
+ Lilase.cofl.toggleAuction();
} catch (Exception ignore) {
}
@@ -175,6 +182,7 @@ public class SniperFlipperEvents {
if (Flipper.state != FlipperState.NONE) {
new Thread(() -> {
Utils.debugLog("Interrupting Flipper selling");
+ Flipper.sendInterrupt();
Lilase.mc.thePlayer.closeScreen();
Flipper.state = FlipperState.NONE;
Lilase.cofl.toggleAuction();
@@ -184,8 +192,8 @@ public class SniperFlipperEvents {
Utils.debugLog("[PageFlipper] Interrupting PageFlipper sniping");
Lilase.pageFlipper.toggleAuction();
}).start();
- } else if (Lilase.sniper.getOpen()) {
- Lilase.sniper.toggleAuction();
+ } else if (Lilase.cofl.getOpen()) {
+ Lilase.cofl.toggleAuction();
}
}
}
@@ -214,7 +222,7 @@ public class SniperFlipperEvents {
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onInventoryRendering(GuiScreenEvent.BackgroundDrawnEvent event) {
String windowName = InventoryUtils.getInventoryName();
- if (AHConfig.BED_SPAM && (Lilase.sniper.getOpen() || Lilase.pageFlipper.getOpen() || Lilase.cofl.getOpen())) {
+ if (AHConfig.BED_SPAM && (Lilase.pageFlipper.getOpen() || Lilase.cofl.getOpen())) {
if ("BIN Auction View".equals(windowName)) {
ItemStack is = InventoryUtils.getStackInOpenContainerSlot(31);
if (is != null) {
@@ -237,17 +245,13 @@ public class SniperFlipperEvents {
buying = false;
Lilase.mc.thePlayer.closeScreen();
}
- } else {
- System.out.println("No item in slot 31, ??");
-// buying = false;
-// Lilase.mc.thePlayer.closeScreen();
}
}
if (buying && "Confirm Purchase".equals(windowName)) {
System.out.println("Window ID: " + Lilase.mc.thePlayer.openContainer.windowId);
Lilase.mc.playerController.windowClick(windowId + 1, 11, 0, 0, Lilase.mc.thePlayer);
buying = false;
- if (Lilase.sniper.buying || Lilase.cofl.getQueue().isRunning()) bought = true;
+ if (Lilase.cofl.getQueue().isRunning()) bought = true;
}
}
}
diff --git a/src/main/java/me/night0721/lilase/features/cofl/Cofl.java b/src/main/java/me/night0721/lilase/features/cofl/Cofl.java
index b2d71b6..099ff17 100644
--- a/src/main/java/me/night0721/lilase/features/cofl/Cofl.java
+++ b/src/main/java/me/night0721/lilase/features/cofl/Cofl.java
@@ -3,18 +3,25 @@ package me.night0721.lilase.features.cofl;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import me.night0721.lilase.Lilase;
-import me.night0721.lilase.config.AHConfig;
+import me.night0721.lilase.features.flipper.Flipper;
+import me.night0721.lilase.features.flipper.FlipperState;
+import me.night0721.lilase.player.EffectState;
import me.night0721.lilase.utils.UngrabUtils;
import me.night0721.lilase.utils.Utils;
import java.io.PrintStream;
+import java.util.concurrent.ThreadLocalRandom;
import java.util.regex.Pattern;
+import static me.night0721.lilase.config.AHConfig.SEND_MESSAGE;
+
public class Cofl {
private final Queue queue = new Queue();
private boolean open = false;
public static int price = 0;
- public Thread thread = new Thread(() -> {
+ public static int target = 0;
+ private final ThreadLocalRandom random = ThreadLocalRandom.current();
+ public final Thread thread = new Thread(() -> {
while (true) {
try {
Thread.sleep(1);
@@ -45,19 +52,22 @@ public class Cofl {
public void handleMessage(String str) {
try {
- if (AHConfig.SNIPER_MODE != 2 || !getOpen() || !str.startsWith("Received:")) return;
+ if (!getOpen() || !str.startsWith("Received:")) return;
if (pattern.matcher(str).find()) {
+// Utils.debugLog("Doing some motion as we don't want to be AFK");
+ Lilase.mc.thePlayer.inventory.currentItem = random.nextInt(9);
String[] split = str.split("Received: ");
JsonObject auction = new JsonParser().parse(new JsonParser().parse(split[1]).getAsJsonObject().get("data").getAsString()).getAsJsonObject();
String itemName = auction.get("auction").getAsJsonObject().get("itemName").getAsString();
String id = auction.get("auction").getAsJsonObject().get("uuid").getAsString();
- price = auction.get("target").getAsInt();
+ price = auction.get("auction").getAsJsonObject().get("startingBid").getAsInt();
+ target = auction.get("target").getAsInt();
// Utils.debugLog("Item Name: " + itemName);
// Utils.debugLog("ID: " + id);
// Utils.debugLog("Price: " + price);
- if (itemName != null && id != null && price != 0) {
- Utils.debugLog("Adding auction to queue: " + id, "Target Price: " + price, "Name: " + itemName);
- getQueue().add(new QueueItem(id, itemName, price));
+ if (itemName != null && id != null && price != 0 && target != 0) {
+ Utils.debugLog("Adding auction to queue: " + id, "Price: " + price, "Target Price: " + target, "Name: " + itemName);
+ getQueue().add(new QueueItem(id, itemName, price, target));
getQueue().scheduleClear();
}
}
@@ -75,7 +85,17 @@ public class Cofl {
setOpen(false);
UngrabUtils.regrabMouse();
} else {
- if (Utils.checkInHub()) {
+ if (SEND_MESSAGE && Lilase.configHandler.getString("Webhook").equals("")) {
+ Utils.sendMessage("Sending message to Webhook is on but Webhook is missing, stopping");
+ setOpen(false);
+ return;
+ }
+ if (Flipper.state != FlipperState.NONE) {
+ Utils.sendMessage("Flipper is running, stopping");
+ setOpen(false);
+ return;
+ }
+ if (Utils.cookie == EffectState.ON || Utils.checkInHub()) {
Utils.sendMessage("Started COFL Sniper");
setOpen(true);
boolean threadStatus = thread.isAlive();
@@ -84,7 +104,9 @@ public class Cofl {
thread.start();
}
UngrabUtils.ungrabMouse();
- } 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");
+ }
}
}
diff --git a/src/main/java/me/night0721/lilase/features/cofl/QueueItem.java b/src/main/java/me/night0721/lilase/features/cofl/QueueItem.java
index 931b229..9ddb91b 100644
--- a/src/main/java/me/night0721/lilase/features/cofl/QueueItem.java
+++ b/src/main/java/me/night0721/lilase/features/cofl/QueueItem.java
@@ -7,17 +7,19 @@ import me.night0721.lilase.utils.Utils;
public class QueueItem {
private final String command, name;
private final int price;
+ private final int target;
public static Flipper flipper = null;
- public QueueItem(String command, String name, int price) {
+ public QueueItem(String command, String name, int price, int target) {
this.command = command;
this.name = name;
this.price = price;
+ this.target = target;
}
public void openAuction() {
Utils.debugLog("Executing: " + command);
Utils.sendServerMessage("/viewauction " + command);
- flipper = new Flipper(name, price);
+ flipper = new Flipper(name, price, target);
}
}
\ No newline at end of file
diff --git a/src/main/java/me/night0721/lilase/features/flipper/Flipper.java b/src/main/java/me/night0721/lilase/features/flipper/Flipper.java
index 29755c6..1c48505 100644
--- a/src/main/java/me/night0721/lilase/features/flipper/Flipper.java
+++ b/src/main/java/me/night0721/lilase/features/flipper/Flipper.java
@@ -1,7 +1,5 @@
package me.night0721.lilase.features.flipper;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
import me.night0721.lilase.Lilase;
import me.night0721.lilase.events.SniperFlipperEvents;
import me.night0721.lilase.player.EffectState;
@@ -9,61 +7,64 @@ import me.night0721.lilase.player.Rotation;
import me.night0721.lilase.utils.*;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityArmorStand;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
import net.minecraft.util.StringUtils;
-import javax.net.ssl.HttpsURLConnection;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.URL;
+import java.awt.*;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Locale;
+
+import static me.night0721.lilase.config.AHConfig.SEND_MESSAGE;
// TODO: Fix repeating code (I will do it soon)
public class Flipper {
- private final String itemname;
- private static String bytedata;
- private final int itemprice;
+ private static String itemname = "";
+ private static int itemprice = 0;
+ private static int target = 0;
public static FlipperState state = FlipperState.NONE;
public static final Rotation rotation = new Rotation();
private final Clock buyWait = new Clock();
- private static JsonObject object;
+ public static final DiscordWebhook webhook = new DiscordWebhook(Lilase.configHandler.getString("Webhook"));
+ public static final NumberFormat format = NumberFormat.getInstance(Locale.US);
+ public static final DecimalFormat df = new DecimalFormat("#.##");
+ public static final String icon = "https://camo.githubusercontent.com/57a8295f890970d2173b895c7a0f6c60527fb3bec4489b233b221ab45cb9fa42/68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3834323031343930393236343935333335342f313038323337333237353033383030333231302f6c696c6173652e706e67";
- public Flipper(String name, String data, int price) {
- itemname = name;
- bytedata = data;
- itemprice = price;
- }
- public Flipper(String name, int price) {
+ public Flipper(String name, int price, int targetprice) {
itemname = name;
itemprice = price;
+ target = targetprice;
+ webhook.setUsername("Lilase");
+ webhook.setAvatarUrl(icon);
}
- public int getItemPrice() {
- if (object == null) {
- try {
- object = getItemData();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- return object.get("price").getAsInt();
- }
-
- public int checkProfitPercentage() throws IOException {
- if (object == null) object = getItemData();
- return object.get("price").getAsInt() / itemprice * 100;
- }
public void sellItem() {
+ Utils.checkFooter();
Lilase.sniper.incrementAuctionsSniped();
Utils.sendMessage("Flipper is running, stopping, will resume when flipper is done");
- if (Lilase.sniper.getOpen()) Lilase.sniper.toggleAuction();
if (Lilase.cofl.getOpen()) Lilase.cofl.toggleAuction();
UngrabUtils.ungrabMouse();
- Utils.checkFooter();
Utils.debugLog("Cookie: " + (Utils.cookie == EffectState.ON ? "ON" : "OFF"));
Utils.debugLog("Have screen: " + (Lilase.mc.currentScreen != null ? "Yes" : "No"));
+ Utils.debugLog("Profit Percentage: " + target / itemprice);
+ try {
+ webhook.addEmbed(new DiscordWebhook.EmbedObject()
+ .setTitle("Just purchased an item!")
+ .setFooter("Purse: " + format.format(Utils.getPurse()), icon)
+ .addField("Item:", itemname, true)
+ .addField("Price:", format.format(itemprice), true)
+ .addField("Target Price:", format.format(target), true)
+ .addField("Profit Percentage:", df.format(target / itemprice * 100L) + "%", true)
+ .setColor(Color.decode("#003153")));
+ if (SEND_MESSAGE) webhook.execute();
+ Utils.debugLog("Notified Webhook");
+ } catch (Exception e) {
+ e.printStackTrace();
+ Utils.debugLog("Failed to send webhook");
+ }
if (Utils.cookie != EffectState.ON) {
Utils.sendServerMessage("/hub");
state = FlipperState.WALKING_TO_FIRST_POINT;
@@ -123,8 +124,25 @@ public class Flipper {
if (InventoryUtils.isStoneButton() && buyWait.passed()) {
if (InventoryUtils.getSlotForItem(itemname) == -1) {
Utils.debugLog("Cannot find item in inventory, stopping flipper");
+ try {
+ webhook.addEmbed(new DiscordWebhook.EmbedObject()
+ .setTitle("Failed to post an item!")
+ .setDescription("Could not find item in inventory, sending so you can post it manually")
+ .setFooter("Purse: " + format.format(Utils.getPurse()), icon)
+ .addField("Item:", itemname, true)
+ .addField("Price:", format.format(itemprice), true)
+ .addField("Target Price:", format.format(target), true)
+ .addField("Profit Percentage:", Float.parseFloat(df.format(target / itemprice * 100L)) + "%", true)
+ .setColor(Color.decode("#ff0000")));
+ if (SEND_MESSAGE) webhook.execute();
+ Utils.debugLog("Notified Webhook");
+ } catch (Exception e) {
+ e.printStackTrace();
+ Utils.debugLog("Failed to send webhook");
+ }
+ Lilase.mc.thePlayer.closeScreen();
state = FlipperState.NONE;
- Lilase.sniper.setOpen(true);
+ Lilase.cofl.setOpen(true);
return;
}
InventoryUtils.clickOpenContainerSlot(InventoryUtils.getSlotForItem(itemname));
@@ -138,8 +156,46 @@ public class Flipper {
buyWait.schedule(1000);
} // TODO: Ternary Expression
} else if (InventoryUtils.inventoryNameContains("Manage Auction") && buyWait.passed()) {
- InventoryUtils.clickOpenContainerSlot(24);
- buyWait.schedule(1500);
+ ItemStack slot24 = InventoryUtils.getStackInOpenContainerSlot(24);
+ ItemStack slot33 = InventoryUtils.getStackInOpenContainerSlot(33);
+ ItemStack slot42 = InventoryUtils.getStackInOpenContainerSlot(42);
+ ItemStack slot51 = InventoryUtils.getStackInOpenContainerSlot(51);
+
+ if (slot24 != null && slot24.getItem() == Items.golden_horse_armor) {
+ InventoryUtils.clickOpenContainerSlot(24);
+ buyWait.schedule(1000);
+ } else if (slot33 != null && slot33.getItem() == Items.golden_horse_armor) {
+ InventoryUtils.clickOpenContainerSlot(33);
+ buyWait.schedule(1000);
+ } else if (slot42 != null && slot42.getItem() == Items.golden_horse_armor) {
+ InventoryUtils.clickOpenContainerSlot(42);
+ buyWait.schedule(1000);
+ } else if (slot51 != null && slot51.getItem() == Items.golden_horse_armor) {
+ InventoryUtils.clickOpenContainerSlot(51);
+ buyWait.schedule(1000);
+ } else {
+ Utils.debugLog("Can't find create auction button, stopping flipper");
+ try {
+ webhook.addEmbed(new DiscordWebhook.EmbedObject()
+ .setTitle("Failed to post an item!")
+ .setDescription("Could not find create auction button, sending so you can post it manually")
+ .setFooter("Purse: " + format.format(Utils.getPurse()), icon)
+ .addField("Item:", itemname, true)
+ .addField("Price:", format.format(itemprice), true)
+ .addField("Target Price:", format.format(target), true)
+ .addField("Profit Percentage:", Float.parseFloat(df.format(target / itemprice * 100L)) + "%", true)
+ .setColor(Color.decode("#ff0000")));
+ if (SEND_MESSAGE) webhook.execute();
+ Utils.debugLog("Notified Webhook");
+ } catch (Exception e) {
+ e.printStackTrace();
+ Utils.debugLog("Failed to send webhook");
+ }
+ Lilase.mc.thePlayer.closeScreen();
+ state = FlipperState.NONE;
+ Lilase.cofl.setOpen(true);
+ return;
+ }
}
case START:
if (!InventoryUtils.isStoneButton() && InventoryUtils.isToAuctionItem(itemname) && InventoryUtils.inventoryNameStartsWith("Create BIN Auction") && buyWait.passed()) {
@@ -163,28 +219,24 @@ public class Flipper {
break;
}
}
-
- public static JsonObject getItemData() throws IOException {
- URL url = new URL("https://www.night0721.me/api/skyblock");
- HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
- connection.addRequestProperty("Content-Type", "text/plain");
- connection.setDoOutput(true);
- connection.setRequestMethod("POST");
- OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
- out.write(bytedata);
- out.close();
- BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
- String inputLine;
- StringBuilder content = new StringBuilder();
- while ((inputLine = in.readLine()) != null)
- content.append(inputLine);
- in.close();
- connection.disconnect();
- object = (JsonObject) new JsonParser().parse(content.toString());
- System.out.println("Price" + object.get("price"));
- return object;
+ public static void sendInterrupt() {
+ try {
+ webhook.addEmbed(new DiscordWebhook.EmbedObject()
+ .setTitle("Failed to post an item!")
+ .setDescription("Could not find create as interruption, sending so you can post it manually")
+ .setFooter("Purse: " + format.format(Utils.getPurse()), icon)
+ .addField("Item:", itemname, true)
+ .addField("Price:", format.format(itemprice), true)
+ .addField("Target Price:", format.format(target), true)
+ .addField("Profit Percentage:", Float.parseFloat(df.format(target / itemprice * 100L)) + "%", true)
+ .setColor(Color.decode("#ff0000")));
+ if (SEND_MESSAGE) webhook.execute();
+ Utils.debugLog("Notified Webhook");
+ } catch (Exception e) {
+ e.printStackTrace();
+ Utils.debugLog("Failed to send webhook");
+ }
}
-
public static float distanceToFirstPoint() {
return (float) Math.sqrt(Math.pow(Lilase.mc.thePlayer.posX - (-2.5), 2) + Math.pow(Lilase.mc.thePlayer.posZ - (-91.5), 2));
}
diff --git a/src/main/java/me/night0721/lilase/features/sniper/PageFlipper.java b/src/main/java/me/night0721/lilase/features/sniper/PageFlipper.java
index 94c311a..cb11e6f 100644
--- a/src/main/java/me/night0721/lilase/features/sniper/PageFlipper.java
+++ b/src/main/java/me/night0721/lilase/features/sniper/PageFlipper.java
@@ -13,7 +13,7 @@ import static me.night0721.lilase.features.flipper.Flipper.*;
public class PageFlipper {
public PageFlipperState state = PageFlipperState.NONE;
- public Clock cooldown = new Clock();
+ public final Clock cooldown = new Clock();
public boolean open = false;
private Thread loop;
diff --git a/src/main/java/me/night0721/lilase/features/sniper/Sniper.java b/src/main/java/me/night0721/lilase/features/sniper/Sniper.java
index 11123c1..cf2282b 100644
--- a/src/main/java/me/night0721/lilase/features/sniper/Sniper.java
+++ b/src/main/java/me/night0721/lilase/features/sniper/Sniper.java
@@ -1,264 +1,9 @@
package me.night0721.lilase.features.sniper;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import me.night0721.lilase.Lilase;
-import me.night0721.lilase.config.AHConfig;
-import me.night0721.lilase.features.flipper.Flipper;
-import me.night0721.lilase.features.flipper.FlipperState;
-import me.night0721.lilase.player.EffectState;
-import me.night0721.lilase.utils.DiscordWebhook;
-import me.night0721.lilase.utils.UngrabUtils;
-import me.night0721.lilase.utils.Utils;
-
-import javax.net.ssl.HttpsURLConnection;
-import java.awt.*;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.concurrent.ThreadLocalRandom;
-import java.util.concurrent.TimeUnit;
-
-import static me.night0721.lilase.config.AHConfig.SEND_MESSAGE;
-
public class Sniper {
- private Boolean open = false;
- public Boolean buying = false;
private int auctionsSniped = 0;
private int auctionsPosted = 0;
private int auctionsFlipped = 0;
- public final DiscordWebhook webhook = new DiscordWebhook(Lilase.configHandler.getString("Webhook"));
- private final List- items = new ArrayList<>();
- private final List
- blacklist = new ArrayList<>();
- private final List posted = new ArrayList<>();
- private final ThreadLocalRandom randomSlot;
- public static Flipper flipper;
- private final List times = Arrays.asList(TimeUnit.DAYS.toMillis(365), TimeUnit.DAYS.toMillis(30), TimeUnit.DAYS.toMillis(1), TimeUnit.HOURS.toMillis(1), TimeUnit.MINUTES.toMillis(1), TimeUnit.SECONDS.toMillis(1));
- private final List timesString = Arrays.asList("year", "month", "day", "hour", "minute", "second");
-
- public Sniper() {
- for (int i = 1; i <= 99; i++) {
- if (!Lilase.configHandler.getString(i, "Name").equals("") && !Lilase.configHandler.getString(i, "Type").equals("") && !Lilase.configHandler.getString(i, "Tier").equals("") && Lilase.configHandler.getInt(i, "Price") != 0) {
- try {
- ItemType.valueOf(Lilase.configHandler.getString(i, "Type"));
- ItemType.valueOf(Lilase.configHandler.getString(i, "Tier"));
- } catch (IllegalArgumentException e) {
- System.out.println("Invalid item type or tier for item " + i + ", please check your config");
- }
- items.add(new Item(Lilase.configHandler.getString(i, "Name"), ItemType.valueOf(Lilase.configHandler.getString(i, "Type")), Lilase.configHandler.getInt(i, "Price"), ItemTier.valueOf(Lilase.configHandler.getString(i, "Tier"))));
- }
- }
- for (int i = 1; i <= 99; i++) {
- if (!Lilase.configHandler.getString(i, "Name").equals(""))
- blacklist.add(new Item(Lilase.configHandler.getString(i, "Name"), null, null, null));
- }
- webhook.setUsername("Lilase - Auction House");
- webhook.setAvatarUrl("https://th.bing.com/th/id/OIP.Lk2cSujieY70GbsgPZ0TyAHaEK?w=325&h=182&c=7&r=0&o=5&pid=1.7");
- webhook.setTts(false);
- randomSlot = ThreadLocalRandom.current();
- }
-
- private JsonObject getHypixelData(String player) throws IOException {
- URL url = new URL("https://api.hypixel.net/player?key=" + Lilase.configHandler.getString("APIKey") + "&uuid=" + player);
- HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
- connection.setRequestProperty("Content-Type", "application/json");
- connection.setRequestMethod("GET");
- connection.setConnectTimeout(5000);
- connection.setReadTimeout(5000);
- BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
- String inputLine;
- StringBuilder content = new StringBuilder();
- while ((inputLine = in.readLine()) != null) {
- content.append(inputLine);
- }
- in.close();
- connection.disconnect();
- return (JsonObject) new JsonParser().parse(content.toString());
- }
-
- public void start() throws IOException {
- if (AHConfig.SNIPER_MODE != 0) return;
- if (!open) return;
- if (Utils.cookie != EffectState.ON && !Utils.checkInHub()) {
- Utils.sendMessage("You have no cookie but you are not in hub, stopping");
- setOpen(false);
- return;
- }
- if (items.size() == 0) {
- Utils.sendMessage("No Item queued, stopping");
- setOpen(false);
- return;
- }
- if (Lilase.configHandler.getString("APIKey").equals("") || Lilase.configHandler.getString("Webhook").equals("")) {
- Utils.sendMessage("Missing APIKey, stopping");
- setOpen(false);
- return;
- }
- if (SEND_MESSAGE && Lilase.configHandler.getString("Webhook").equals("")) {
- Utils.sendMessage("Sending message to Webhook is on but Webhook is missing, stopping");
- setOpen(false);
- return;
- }
- if (Flipper.state != FlipperState.NONE) {
- Utils.sendMessage("Flipper is running, stopping");
- setOpen(false);
- return;
- }
- if (Lilase.mc.currentScreen != null) Lilase.mc.thePlayer.closeScreen();
- Utils.debugLog("Doing some motion as we don't want to be AFK");
- Lilase.mc.thePlayer.inventory.currentItem = randomSlot.nextInt(9);
- URL url = new URL("https://api.hypixel.net/skyblock/auctions");
- HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
- connection.setRequestProperty("Content-Type", "application/json");
- connection.setRequestMethod("GET");
- connection.setConnectTimeout(5000);
- connection.setReadTimeout(5000);
- int status = connection.getResponseCode();
- if (status != 200) {
- Utils.sendMessage("Error getting data from Hypixel API, either API down or internal error");
- return;
- }
- BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
- String inputLine;
- StringBuilder content = new StringBuilder();
- while ((inputLine = in.readLine()) != null) {
- content.append(inputLine);
- }
- in.close();
- connection.disconnect();
- Utils.sendMessage("Getting item from auction house");
- JsonObject data = (JsonObject) new JsonParser().parse(content.toString());
- JsonArray auctions = data.getAsJsonArray("auctions");
- for (int i = 0; i < auctions.size(); i++) {
- JsonObject auction = auctions.get(i).getAsJsonObject();
- for (Item item : items) {
- String lore = " ";
- ItemType type = item.getType();
- String itemName = auction.get("item_name").getAsString();
- String uuid = auction.get("uuid").getAsString();
- Integer price = auction.get("starting_bid").getAsInt();
- boolean found = false;
- switch (item.query) {
- case "Bal":
- lore = "Made of Lava";
- break;
- case "Squid":
- lore = "More Ink";
- break;
- case "Monkey":
- lore = "Treeborn";
- break;
- case "Ocelot":
- lore = "Tree Hugger";
- break;
- case "Dolphin":
- lore = "Echolocation";
- break;
- case "Flying Fish":
- lore = "Water Bender";
- break;
- }
- if (posted.contains(uuid)) break;
- for (Item blacklisted : blacklist) {
- if (itemName.contains(blacklisted.getQuery())) {
- found = true;
- break;
- }
- }
- if (found) break;
- if (!itemName.toLowerCase().contains(item.query.toLowerCase())) break;
- if (!auction.get("item_lore").getAsString().contains(lore)) break;
- if (price > item.getPrice()) break;
- if (item.getTier() != ItemTier.ANY)
- if (!auction.get("tier").getAsString().equals(item.getTier().name())) break;
- if (type != ItemType.ANY) if (!auction.get("category").getAsString().equals(type.getLowercase())) break;
- if (!auction.get("bin").getAsBoolean()) break;
- if (!posted.contains(uuid)) {
- posted.add(uuid);
- flipper = new Flipper(itemName, auction.get("item_bytes").getAsString(), price);
- NumberFormat format = NumberFormat.getInstance(Locale.US);
- JsonObject profile = getHypixelData(auction.get("auctioneer").getAsString());
- String profileName = profile.get("player").getAsJsonObject().get("displayname").getAsString();
- if (profileName.equalsIgnoreCase(Lilase.mc.thePlayer.getName())) break;
- String updated = auction.get("item_lore").getAsString().replaceAll("§[0-9a-z]", "");
- DecimalFormat df = new DecimalFormat("#.##");
- if (Lilase.configHandler.getBoolean("checkProfitPercentageBeforeBuy")) {
- float multi = flipper.checkProfitPercentage();
- Utils.debugLog("Found an item, checking profit percentage");
- if (multi > Lilase.configHandler.getInt("ProfitPercentage")) {
- Utils.debugLog("Higher than required profit percentage, buying now");
- buying = true;
- }
- } else {
- Utils.debugLog("Found an item, trying to buy");
- buying = true;
- }
- if (buying) {
- Utils.sendServerMessage("/viewauction " + uuid);
- webhook.addEmbed(new DiscordWebhook.EmbedObject().setTitle("Bought an item on low price").setUrl("https://sky.coflnet.com/auction/" + uuid).setAuthor("night0721", "https://github.com/night0721", "https://avatars.githubusercontent.com/u/77528305?v=4").setDescription(updated.replace("\n", "\\n")).addField("Item", itemName, true).addField("Price", format.format(price) + " coins", true).addField("Profit", format.format(flipper.getItemPrice() - price) + " coins", true).addField("Profit Percentage", Float.parseFloat(df.format(flipper.getItemPrice() - price)) + "%", true).addField("Seller", profileName, true).addField("Started for", toDuration(System.currentTimeMillis() - auction.get("start").getAsLong()), true).addField("Ends in", getTimeSinceDate(auction.get("end").getAsLong() - System.currentTimeMillis()), true).setColor(Color.decode("#003153")));
- webhook.setContent(itemName + " is sale at " + format.format(price) + "! `" + "/viewauction " + uuid + "`");
- }
- return;
- }
- }
- }
- }
-
- public String toDuration(long duration) {
- StringBuilder res = new StringBuilder();
- for (int i = 0; i < times.size(); i++) {
- Long current = times.get(i);
- long temp = duration / current;
- if (temp > 0) {
- res.append(temp).append(" ").append(timesString.get(i)).append(temp != 1 ? "s" : "").append(" ago");
- break;
- }
- }
- if ("".equals(res.toString())) return "0 seconds ago";
- else return res.toString();
- }
-
- private String getTimeSinceDate(long timeSinceDate) {
- long seconds = TimeUnit.MILLISECONDS.toSeconds(timeSinceDate);
- long minutes = TimeUnit.MILLISECONDS.toMinutes(timeSinceDate);
- long hours = TimeUnit.MILLISECONDS.toHours(timeSinceDate);
- long days = TimeUnit.MILLISECONDS.toDays(timeSinceDate);
- if (seconds < 60) return "in " + seconds + " seconds";
- else if (minutes < 60) return "in " + minutes + " minutes";
- else if (hours < 24) return "in " + hours + " hours";
- else return "in " + days + " days";
-
- }
-
- public void toggleAuction() {
- if (getOpen()) {
- Utils.sendMessage("Stopped AH Sniper");
- setOpen(false);
- UngrabUtils.regrabMouse();
- } else {
- if (Utils.checkInHub()) {
- Utils.sendMessage("Started AH Sniper");
- setOpen(true);
- UngrabUtils.ungrabMouse();
- } else Utils.sendMessage("Detected not in hub, please go to hub to start");
- }
- }
-
- public Boolean getOpen() {
- return open;
- }
-
- public void setOpen(Boolean open) {
- this.open = open;
- }
public int getAuctionsSniped() {
return auctionsSniped;
@@ -286,50 +31,4 @@ public class Sniper {
}
-enum ItemTier {
- 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");
-
- public final String lowercase;
-
- public String getLowercase() {
- return lowercase;
- }
-
- ItemType(String lowercase) {
- this.lowercase = lowercase;
- }
-}
-
-class Item {
- public final String query;
- public final ItemType type;
- public final Integer price;
- public final ItemTier tier;
-
- public Item(String query, ItemType type, Integer price, ItemTier tier) {
- this.query = query;
- this.type = type;
- this.price = price;
- this.tier = tier;
- }
-
- public String getQuery() {
- return query;
- }
-
- public ItemType getType() {
- return type;
- }
-
- public Integer getPrice() {
- return price;
- }
-
- public ItemTier getTier() {
- return tier;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/me/night0721/lilase/mixins/MixinGuiIngame.java b/src/main/java/me/night0721/lilase/mixins/MixinGuiIngame.java
index 1c697ab..6a7e6b6 100644
--- a/src/main/java/me/night0721/lilase/mixins/MixinGuiIngame.java
+++ b/src/main/java/me/night0721/lilase/mixins/MixinGuiIngame.java
@@ -26,7 +26,7 @@ public class MixinGuiIngame {
if (txt.startsWith("www")) return "§4w§cw§6w§e.§2n§ai§bg§3h§1t§90§d7§42§c1§6.§em§2e";
if (txt.startsWith("SKY")) return "§d§lLILASE";
if (Pattern.compile("\\d{2}/\\d{2}/\\d{2}").matcher(txt).find()) return txt.split(" ")[0];
- if (text.startsWith(EnumChatFormatting.RED + "") && Pattern.compile("\\d+").matcher(txt).matches()) return "";
+ if (text.startsWith(String.valueOf(EnumChatFormatting.RED)) && Pattern.compile("\\d+").matcher(txt).matches()) return "";
else return text;
}
diff --git a/src/main/java/me/night0721/lilase/utils/DiscordWebhook.java b/src/main/java/me/night0721/lilase/utils/DiscordWebhook.java
index cf8bc35..6b59ebf 100644
--- a/src/main/java/me/night0721/lilase/utils/DiscordWebhook.java
+++ b/src/main/java/me/night0721/lilase/utils/DiscordWebhook.java
@@ -118,8 +118,14 @@ public class DiscordWebhook {
jsonEmbed.put("fields", jsonFields.toArray());
embedObjects.add(jsonEmbed);
}
+ if (embedObjects.size() > 1) {
+ for (int i = 1; i < embedObjects.size(); i++) {
+ embedObjects.remove(i);
+ }
+ }
json.put("embeds", embedObjects.toArray());
}
+ System.out.println(json);
URL url = new URL(this.url);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.addRequestProperty("Content-Type", "application/json");
@@ -127,7 +133,7 @@ public class DiscordWebhook {
connection.setDoOutput(true);
connection.setRequestMethod("POST");
OutputStream stream = connection.getOutputStream();
- stream.write(json.toString().getBytes(StandardCharsets.UTF_16));
+ stream.write(json.toString().getBytes(StandardCharsets.UTF_8));
stream.flush();
stream.close();
connection.getInputStream().close();
diff --git a/src/main/java/me/night0721/lilase/utils/KeyBindingManager.java b/src/main/java/me/night0721/lilase/utils/KeyBindingManager.java
index 2837724..7cec754 100644
--- a/src/main/java/me/night0721/lilase/utils/KeyBindingManager.java
+++ b/src/main/java/me/night0721/lilase/utils/KeyBindingManager.java
@@ -1,7 +1,6 @@
package me.night0721.lilase.utils;
import me.night0721.lilase.Lilase;
-import me.night0721.lilase.config.AHConfig;
import net.minecraft.client.settings.KeyBinding;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -21,20 +20,12 @@ public class KeyBindingManager {
public void onKeyPress(InputEvent.KeyInputEvent event) {
if (keyBindings[0].isPressed()) {
// TODO: Add sniper interface and use nested switch loop to prevent .toggleAuction(); repeating
- switch (AHConfig.SNIPER_MODE) {
- case 0:
- Lilase.sniper.toggleAuction();
- break;
- case 1:
- Lilase.pageFlipper.toggleAuction();
- break;
- case 2:
- Lilase.cofl.toggleAuction();
- break;
- }
+ Lilase.cofl.toggleAuction();
}
- if (keyBindings[1].isPressed())
+ if (keyBindings[1].isPressed()) {
Lilase.config.openGui();
+ ScoreboardUtils.cleanSB("§6[Auction] §aphiinix_ §ebought §fImplosion Belt §efor §6900,000 coins §lCLICK");
+ }
}
public static void rightClick() {
diff --git a/src/main/java/me/night0721/lilase/utils/Utils.java b/src/main/java/me/night0721/lilase/utils/Utils.java
index 5f76c02..a462a2d 100644
--- a/src/main/java/me/night0721/lilase/utils/Utils.java
+++ b/src/main/java/me/night0721/lilase/utils/Utils.java
@@ -7,13 +7,17 @@ import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
+import java.util.List;
+import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import static me.night0721.lilase.Lilase.mc;
public class Utils {
public static IChatComponent header = null, footer = null;
private static final Pattern PATTERN_HUB_LOCATIONS = Pattern.compile("(forest|village|farm|mountain|wilderness|community|graveyard|bazaar|auction)");
+ private static final Pattern PATTERN_PURSE = Pattern.compile("(Purse|Piggy): (?:§.)?([0-9.,]+)");
public static EffectState cookie;
public static String translateAlternateColorCodes(String text) {
@@ -48,12 +52,35 @@ public class Utils {
}
}
+ public static int getPurse() {
+ String purse = "";
+ List matches = ScoreboardUtils.getSidebarLines().stream()
+ .map(ScoreboardUtils::cleanSB)
+ .map(PATTERN_PURSE::matcher)
+ .filter(Matcher::find)
+ .map(Matcher::group)
+ .collect(Collectors.toList());
+ String purseline = matches.get(0);
+ Matcher matcher = PATTERN_PURSE.matcher(purseline);
+ if (matcher.find()) {
+ System.out.println("Group: " + matcher.group());
+ purse = matcher.group(2);
+ purse = purse.replace(",", "");
+ purse = purse.replaceAll("\\..*", "");
+ Utils.debugLog("Purse: " + purse);
+ return Integer.parseInt(purse);
+ }
+ return Integer.parseInt(purse);
+
+ }
+
+
public static void sendMessage(String message) {
- mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "" + EnumChatFormatting.BOLD + "[Lilase] " + EnumChatFormatting.RESET + EnumChatFormatting.GREEN + EnumChatFormatting.BOLD + message));
+ mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + String.valueOf(EnumChatFormatting.BOLD) + "[Lilase] " + EnumChatFormatting.RESET + EnumChatFormatting.GREEN + EnumChatFormatting.BOLD + message));
}
public static void debugLog(String message) {
- mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "" + "[Lilase] " + EnumChatFormatting.RESET + EnumChatFormatting.WHITE + message));
+ mc.thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "[Lilase] " + EnumChatFormatting.RESET + EnumChatFormatting.WHITE + message));
}
public static void debugLog(String... messages) {