This commit is contained in:
NK 2023-02-11 03:18:09 +00:00
parent f710cd083e
commit 1017da9fb1
8 changed files with 279 additions and 10 deletions

View file

@ -40,10 +40,16 @@ configurations {
dependencies {
packageLib("gg.essential:loader-launchwrapper:1.1.3")
implementation("gg.essential:essential-1.8.9-forge:2581")
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("org.json:json:20220924")
annotationProcessor('org.spongepowered:mixin:0.7.11-SNAPSHOT')
implementation('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
transitive = false
}
shadow "org.json:json:20220924"
shadow "com.squareup.okhttp3:okhttp:4.10.0"
}
mixin {
@ -70,12 +76,12 @@ jar {
shadowJar {
archiveFileName = jar.archiveFileName
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
configurations = [project.configurations.packageLib]
configurations = [project.configurations.runtimeClasspath]
}
reobf {
shadowJar {
classpath = sourceSets.main.compileClasspath
classpath = project.configurations.compileClasspath
}
}
@ -85,7 +91,7 @@ processResources {
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
expand 'version':project.version, 'mcversion':project.minecraft.version
expand 'version': project.version, 'mcversion': project.minecraft.version
}
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'

View file

@ -3,6 +3,7 @@ package me.night0721.lilase;
import com.mojang.realmsclient.gui.ChatFormatting;
import me.night0721.lilase.events.PacketReceivedEvent;
import me.night0721.lilase.utils.Utils;
import me.night0721.lilase.utils.ah.AuctionHouse;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
@ -31,7 +32,7 @@ public class Main {
static int tickAmount;
static Minecraft mc = Minecraft.getMinecraft();
static KeyBinding[] keyBindings = new KeyBinding[2];
static KeyBinding[] keyBindings = new KeyBinding[3];
static ArrayList<Block> 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,
@ -43,7 +44,7 @@ public class Main {
keyBindings[0] = new KeyBinding("Ghost Block Bind", Keyboard.KEY_G, "Lilase");
keyBindings[1] = new KeyBinding("Hub", Keyboard.KEY_DIVIDE, "Lilase");
keyBindings[2] = new KeyBinding("Auction House", Keyboard.KEY_END, "Lilase");
for (KeyBinding keyBinding : keyBindings) {
ClientRegistry.registerKeyBinding(keyBinding);
}
@ -64,6 +65,9 @@ public class Main {
if (keyBindings[1].isKeyDown()) {
mc.thePlayer.sendChatMessage("/hub");
}
if (keyBindings[2].isPressed()) {
new AuctionHouse();
}
if (tickAmount % 20 == 0) {
Utils.checkForDungeon();
}

View file

@ -1,4 +0,0 @@
package me.night0721.lilase.utils;
public class AuctionHouse {
}

View file

@ -3,6 +3,7 @@ package me.night0721.lilase.utils;
import net.minecraft.client.Minecraft;
import net.minecraft.network.play.server.S45PacketTitle;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import java.util.List;
@ -38,7 +39,9 @@ public class Utils {
return;
}
}
inDungeon = false;
}
public static void sendMessage(String message) {
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "" + EnumChatFormatting.BOLD + "Liliase" + EnumChatFormatting.RESET + EnumChatFormatting.DARK_GRAY + " » " + EnumChatFormatting.RESET + EnumChatFormatting.GREEN + EnumChatFormatting.BOLD + message));
}
}

View file

@ -0,0 +1,212 @@
package me.night0721.lilase.utils.ah;
import me.night0721.lilase.utils.Utils;
import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AuctionHouse {
private final OkHttpClient client;
private final List<Item> items = new ArrayList<>();
private final List<String> posted = new ArrayList<>();
public AuctionHouse() {
client = new OkHttpClient();
items.add(new Item("Livid Dagger", ItemType.WEAPON, 8000000, ItemTier.LEGENDARY));
items.add(new Item("Aspect of the Void", ItemType.WEAPON, 8000000, ItemTier.EPIC));
items.add(new Item("Bal", ItemType.MISC, 10000000, ItemTier.EPIC));
Utils.sendMessage("AuctionHouse is now running");
// run getItem every 8 seconds=
new Thread(() -> {
while (true) {
try {
getItem();
TimeUnit.SECONDS.sleep(8);
} catch (IOException | JSONException | InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
private JSONObject getHypixelData(String player) throws IOException, JSONException {
String API_KEY = "d800be32-3abc-49bd-83a7-188573853d49";
Request request = new Request.Builder()
.url("https://api.hypixel.net/player?key=" + API_KEY + "&uuid=" + player)
.build();
Response response = client.newCall(request).execute();
if (response.code() == 200 && response.body() != null)
return new JSONObject(response.body().string());
else
return null;
}
private void getItem() throws IOException, JSONException {
Request request = new Request.Builder()
.url("https://api.hypixel.net/skyblock/auctions")
.build();
Response response = client.newCall(request).execute();
if (response.code() != 200 || response.body() == null) return;
JSONObject data = new JSONObject(response.body().string());
JSONArray auctions = data.getJSONArray("auctions");
for (int i = 0; i < auctions.length(); i++) {
JSONObject auction = auctions.getJSONObject(i);
for (Item item : items) {
String lore = " ";
ItemType type = item.type;
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 (!auction.getString("item_name").toLowerCase().contains(item.query.toLowerCase())) break;
if (!auction.getString("item_lore").contains(lore)) break;
if (!auction.getString("tier").equals(item.tier.name())) break;
if (auction.getInt("starting_bid") > item.price) break;
if (!auction.getString("category").equals(type.lowercase)) break;
if (!auction.getBoolean("bin")) break;
if (!posted.contains(auction.getString("item_uuid"))) {
posted.add(auction.getString("item_uuid"));
NumberFormat format = NumberFormat.getInstance(Locale.US);
JSONObject profile = getHypixelData(auction.getString("auctioneer"));
Pattern pattern = Pattern.compile("§[0-9a-z]", Pattern.MULTILINE);
Matcher matcher = pattern.matcher(auction.getString("item_lore"));
String updated = matcher.replaceAll("");
JSONObject message = new JSONObject();
JSONObject embed = new JSONObject();
JSONObject author = new JSONObject();
JSONObject footer = new JSONObject();
JSONArray fields = new JSONArray();
JSONObject item_field = new JSONObject();
JSONObject price_field = new JSONObject();
JSONObject seller_field = new JSONObject();
JSONObject started_field = new JSONObject();
JSONObject ends_field = new JSONObject();
author.put("name", "Ń1ght#4004");
author.put("url", "https://github.com/night0721");
author.put("icon_url", "https://avatars.githubusercontent.com/u/77528305?v=4");
footer.put("text", "Made by Ń1ght#4004");
footer.put("icon_url", "https://avatars.githubusercontent.com/u/77528305?v=4");
item_field.put("name", "Item");
item_field.put("value", auction.getString("item_name"));
item_field.put("inline", true);
price_field.put("name", "Price");
price_field.put("value", format.format(auction.getInt("starting_bid")));
price_field.put("inline", true);
seller_field.put("name", "Seller");
assert profile != null;
seller_field.put("value", profile.getJSONObject("player").getString("displayname"));
seller_field.put("inline", true);
started_field.put("name", "Started for");
started_field.put("value", toDuration(System.currentTimeMillis() - auction.getLong("start")));
started_field.put("inline", true);
ends_field.put("name", "Ends in");
ends_field.put("value", getTimeSinceDate(auction.getLong("end") - System.currentTimeMillis()));
ends_field.put("inline", true);
fields.put(item_field);
fields.put(price_field);
fields.put(seller_field);
fields.put(started_field);
fields.put(ends_field);
embed.put("color", 0x003153);
embed.put("title", "Item Is On Low Price");
embed.put("url", "https://www.brandonfowler.me/skyblockah/?uuid=" + auction.getString("uuid"));
embed.put("timestamp", System.currentTimeMillis() / 1000);
embed.put("description", updated);
embed.put("author", author);
embed.put("footer", footer);
embed.put("fields", fields);
message.put("username", "Skyblock AH");
message.put("embeds", new JSONArray().put(embed));
message.put("content", auction.getString("item_name") + " is sale at " + format.format(auction.getInt("starting_bid")) + "!\n" + "/viewauction " + auction.getString("uuid"));
sendMessage(message);
Utils.sendMessage("Auction House:" + auction.getString("item_name") + " is sale for " + format.format(auction.getInt("starting_bid")) + "!");
}
}
}
}
public final List<Long> 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));
public final List<String> timesString = Arrays.asList("year", "month", "day", "hour", "minute", "second");
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 static 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";
}
private void sendMessage(JSONObject data) throws IOException, JSONException {
String DISCORD_WEBHOOK = "https://discord.com/api/webhooks/979502673093079071/p539WaqjEwiUWqCXLSBAcfDY-EhmF2RU9ZzjCKW_8jtFMuldJQwCdOFMPsT0U3VhfdBH";
Request request = new Request.Builder()
.url(DISCORD_WEBHOOK)
.post(RequestBody.create(data.toString(), MediaType.get("application/json")))
.addHeader("Content-Type", "application/json")
.build();
client.newCall(request).execute();
}
}

View file

@ -0,0 +1,15 @@
package me.night0721.lilase.utils.ah;
public class Item {
public String query;
public ItemType type;
public Integer price;
public ItemTier tier;
public Item(String query, ItemType type, Integer price, ItemTier tier) {
this.query = query;
this.type = type;
this.price = price;
this.tier = tier;
}
}

View file

@ -0,0 +1,13 @@
package me.night0721.lilase.utils.ah;
public enum ItemTier {
COMMON,
UNCOMMON,
RARE,
EPIC,
LEGENDARY,
MYTHIC,
DIVINE,
SPECIAL,
VERY_SPECIAL,
}

View file

@ -0,0 +1,20 @@
package me.night0721.lilase.utils.ah;
public enum ItemType {
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;
}
}