should be working, but doesn't send shit
This commit is contained in:
parent
813451d4c2
commit
9a39c4cd26
9 changed files with 576 additions and 422 deletions
149
build.gradle
149
build.gradle
|
@ -1,105 +1,140 @@
|
||||||
plugins {
|
buildscript {
|
||||||
id 'net.minecraftforge.gradle.forge' version 'FG_2.1-SNAPSHOT'
|
ext.kotlin_version = "1.6.10"
|
||||||
id 'com.github.johnrengelman.shadow' version '6.1.0'
|
repositories {
|
||||||
id 'org.spongepowered.mixin' version '0.6-SNAPSHOT'
|
jcenter()
|
||||||
|
maven {
|
||||||
|
name = "forge"
|
||||||
|
url = "https://files.minecraftforge.net/maven"
|
||||||
}
|
}
|
||||||
|
maven { url "https://jitpack.io" }
|
||||||
|
maven { url "https://repo.spongepowered.org/repository/maven-public/" }
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath "com.github.Skytils:ForgeGradle:41dfce0a70"
|
||||||
|
classpath "com.github.jengelman.gradle.plugins:shadow:6.1.0"
|
||||||
|
classpath "com.github.debuggingss:MixinGradle:0.6-SNAPSHOT"
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
apply plugin: "kotlin"
|
||||||
|
apply plugin: "net.minecraftforge.gradle.forge"
|
||||||
|
apply plugin: "com.github.johnrengelman.shadow"
|
||||||
|
apply plugin: "org.spongepowered.mixin"
|
||||||
|
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
group = "me.night0721.lilase"
|
group = "me.night0721.lilase"
|
||||||
archivesBaseName = "Lilase"
|
archivesBaseName = "Lilase"
|
||||||
sourceCompatibility = 1.8
|
sourceCompatibility = 1.8
|
||||||
|
compileJava.options.encoding = "UTF-8"
|
||||||
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
|
||||||
options.encoding = 'UTF-8'
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
maven { url 'https://jitpack.io/' }
|
|
||||||
maven { url 'https://repo.spongepowered.org/repository/maven-public/' }
|
|
||||||
maven { url "https://repo.sk1er.club/repository/maven-public" }
|
|
||||||
maven { url "https://repo.sk1er.club/repository/maven-releases/" }
|
|
||||||
}
|
|
||||||
|
|
||||||
minecraft {
|
minecraft {
|
||||||
version = '1.8.9-11.15.1.2318-1.8.9'
|
version = "1.8.9-11.15.1.2318-1.8.9"
|
||||||
runDir = 'run'
|
runDir = "run"
|
||||||
mappings = 'stable_22'
|
mappings = "stable_22"
|
||||||
makeObfSourceJar = false
|
makeObfSourceJar = false
|
||||||
replace '@VERSION@': project.version
|
|
||||||
|
replace "@VERSION@": project.version
|
||||||
|
|
||||||
clientRunArgs += ["--tweakClass gg.essential.loader.stage0.EssentialSetupTweaker", "--mixin mixins.night0721.json"]
|
clientRunArgs += ["--tweakClass gg.essential.loader.stage0.EssentialSetupTweaker", "--mixin mixins.night0721.json"]
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
packageLib
|
include
|
||||||
configurations.implementation.extendsFrom(configurations.packageLib)
|
implementation.extendsFrom(include)
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven { url "https://jitpack.io/" }
|
||||||
|
maven { url "https://repo.spongepowered.org/repository/maven-public/" }
|
||||||
|
maven { url "https://repo.sk1er.club/repository/maven-public" }
|
||||||
|
maven { url "https://repo.sk1er.club/repository/maven-releases/" }
|
||||||
|
maven { url "https://storehouse.okaeri.eu/repository/maven-public/" }
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
packageLib("gg.essential:loader-launchwrapper:1.1.3")
|
compileOnly("gg.essential:essential-1.8.9-forge:2581")
|
||||||
implementation("gg.essential:essential-1.8.9-forge:2581")
|
include("gg.essential:loader-launchwrapper:1.1.3")
|
||||||
implementation("com.squareup.okhttp3:okhttp:4.10.0")
|
implementation("org.spongepowered:mixin:0.7.11-SNAPSHOT")
|
||||||
implementation("org.json:json:20220924")
|
annotationProcessor("org.spongepowered:mixin:0.7.11-SNAPSHOT")
|
||||||
annotationProcessor('org.spongepowered:mixin:0.7.11-SNAPSHOT')
|
include("org.apache.commons:commons-collections4:4.4")
|
||||||
implementation('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
shadow "org.json:json:20220924"
|
|
||||||
shadow "com.squareup.okhttp3:okhttp:4.10.0"
|
|
||||||
|
|
||||||
|
implementation("org.projectlombok:lombok:1.18.24")
|
||||||
|
annotationProcessor("org.projectlombok:lombok:1.18.24")
|
||||||
|
|
||||||
|
include("org.joml:joml:1.10.5")
|
||||||
|
include "org.json:json:20220924"
|
||||||
|
|
||||||
|
include(fileTree(dir: "libs", include: "*.jar"))
|
||||||
|
implementation(fileTree(dir: "libs", include: "*.jar"))
|
||||||
}
|
}
|
||||||
|
|
||||||
mixin {
|
mixin {
|
||||||
disableRefMapWarning = true
|
disableRefMapWarning = true
|
||||||
defaultObfuscationEnv searge
|
defaultObfuscationEnv searge
|
||||||
add sourceSets.main, 'mixins.night0721.refmap.json'
|
add sourceSets.main, "mixins.night0721.refmap.json"
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
manifest.attributes("FMLCorePluginContainsFMLMod": true,
|
||||||
|
|
||||||
manifest.attributes(
|
|
||||||
'FMLCorePluginContainsFMLMod': true,
|
|
||||||
"FMLCorePlugin": "me.night0721.lilase.mixins.MixinLoader",
|
"FMLCorePlugin": "me.night0721.lilase.mixins.MixinLoader",
|
||||||
'ForceLoadAsMod': true,
|
"ForceLoadAsMod": true,
|
||||||
'MixinConfigs': 'mixins.night0721.json',
|
"MixinConfigs": "mixins.night0721.json",
|
||||||
'ModSide': 'CLIENT',
|
"ModSide": "CLIENT",
|
||||||
'TweakClass': 'gg.essential.loader.stage0.EssentialSetupTweaker',
|
"TweakClass": "gg.essential.loader.stage0.EssentialSetupTweaker",
|
||||||
'TweakOrder': '0'
|
"TweakOrder": "0")
|
||||||
)
|
|
||||||
enabled = false
|
enabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
sourceJar {
|
||||||
archiveFileName = jar.archiveFileName
|
enabled = false
|
||||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
||||||
configurations = [project.configurations.runtimeClasspath]
|
|
||||||
}
|
}
|
||||||
|
shadowJar {
|
||||||
|
archiveClassifier.set("")
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
configurations = [project.configurations.include]
|
||||||
|
|
||||||
|
exclude "LICENSE.md"
|
||||||
|
exclude "pack.mcmeta"
|
||||||
|
exclude "dummyThing"
|
||||||
|
exclude "**/module-info.class"
|
||||||
|
exclude "*.so"
|
||||||
|
exclude "*.dylib"
|
||||||
|
exclude "*.dll"
|
||||||
|
exclude "*.jnilib"
|
||||||
|
exclude "ibxm/**"
|
||||||
|
exclude "com/jcraft/**"
|
||||||
|
exclude "org/lwjgl/**"
|
||||||
|
exclude "net/java/**"
|
||||||
|
|
||||||
|
exclude "META-INF/proguard/**"
|
||||||
|
exclude "META-INF/maven/**"
|
||||||
|
exclude "META-INF/versions/**"
|
||||||
|
exclude "META-INF/com.android.tools/**"
|
||||||
|
|
||||||
|
exclude "fabric.mod.json"
|
||||||
|
}
|
||||||
|
tasks.reobfJar.dependsOn tasks.shadowJar
|
||||||
reobf {
|
reobf {
|
||||||
shadowJar {
|
shadowJar {
|
||||||
classpath = project.configurations.compileClasspath
|
classpath = sourceSets.main.compileClasspath
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
inputs.property 'version', project.version
|
inputs.property "version", project.version
|
||||||
inputs.property 'mcversion', project.minecraft.version
|
inputs.property "mcversion", project.minecraft.version
|
||||||
|
|
||||||
from(sourceSets.main.resources.srcDirs) {
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
include 'mcmod.info'
|
include "mcmod.info"
|
||||||
expand 'version': project.version, 'mcversion': project.minecraft.version
|
expand "version": project.version, "mcversion": project.minecraft.version
|
||||||
}
|
}
|
||||||
from(sourceSets.main.resources.srcDirs) {
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
exclude 'mcmod.info'
|
exclude "mcmod.info"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main { output.resourcesDir = java.outputDir }
|
main { output.resourcesDir = java.outputDir }
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.reobfJar.dependsOn(shadowJar)
|
|
|
@ -2,16 +2,15 @@ package me.night0721.lilase;
|
||||||
|
|
||||||
import com.mojang.realmsclient.gui.ChatFormatting;
|
import com.mojang.realmsclient.gui.ChatFormatting;
|
||||||
import me.night0721.lilase.events.PacketReceivedEvent;
|
import me.night0721.lilase.events.PacketReceivedEvent;
|
||||||
|
import me.night0721.lilase.utils.AuctionHouse;
|
||||||
|
import me.night0721.lilase.utils.ConfigUtils;
|
||||||
import me.night0721.lilase.utils.Utils;
|
import me.night0721.lilase.utils.Utils;
|
||||||
import me.night0721.lilase.utils.ah.AuctionHouse;
|
|
||||||
import me.night0721.lilase.utils.ah.States;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.settings.KeyBinding;
|
import net.minecraft.client.settings.KeyBinding;
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.network.play.client.C0DPacketCloseWindow;
|
import net.minecraft.network.play.client.C0DPacketCloseWindow;
|
||||||
import net.minecraft.network.play.server.S2DPacketOpenWindow;
|
import net.minecraft.network.play.server.S2DPacketOpenWindow;
|
||||||
import net.minecraft.util.ChatComponentText;
|
|
||||||
import net.minecraftforge.client.event.ClientChatReceivedEvent;
|
import net.minecraftforge.client.event.ClientChatReceivedEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
||||||
|
@ -26,14 +25,10 @@ import java.util.Arrays;
|
||||||
|
|
||||||
@Mod(modid = Main.MODID, name = Main.MOD_NAME, version = Main.VERSION, acceptedMinecraftVersions = "[1.8.9]")
|
@Mod(modid = Main.MODID, name = Main.MOD_NAME, version = Main.VERSION, acceptedMinecraftVersions = "[1.8.9]")
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
public static final String MOD_NAME = "Lilase";
|
public static final String MOD_NAME = "Lilase";
|
||||||
public static final String MODID = "Lilase";
|
public static final String MODID = "Lilase";
|
||||||
public static final String VERSION = "1.0.0";
|
public static final String VERSION = "1.0.0";
|
||||||
|
|
||||||
static int tickAmount;
|
static int tickAmount;
|
||||||
static long lastAction;
|
|
||||||
public static States clickState = States.NONE;
|
|
||||||
private AuctionHouse auctionHouse;
|
private AuctionHouse auctionHouse;
|
||||||
static Minecraft mc = Minecraft.getMinecraft();
|
static Minecraft mc = Minecraft.getMinecraft();
|
||||||
static KeyBinding[] keyBindings = new KeyBinding[3];
|
static KeyBinding[] keyBindings = new KeyBinding[3];
|
||||||
|
@ -55,7 +50,8 @@ public class Main {
|
||||||
public void onTick(TickEvent.ClientTickEvent event) {
|
public void onTick(TickEvent.ClientTickEvent event) {
|
||||||
if (mc.thePlayer == null || event.phase != TickEvent.Phase.START) return;
|
if (mc.thePlayer == null || event.phase != TickEvent.Phase.START) return;
|
||||||
tickAmount++;
|
tickAmount++;
|
||||||
|
ConfigUtils.init();
|
||||||
|
ConfigUtils.reloadConfig();
|
||||||
if (keyBindings[0].isKeyDown()) {
|
if (keyBindings[0].isKeyDown()) {
|
||||||
if (mc.objectMouseOver.getBlockPos() == null) return;
|
if (mc.objectMouseOver.getBlockPos() == null) return;
|
||||||
Block block = mc.theWorld.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock();
|
Block block = mc.theWorld.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock();
|
||||||
|
@ -72,38 +68,17 @@ public class Main {
|
||||||
if (tickAmount % 20 == 0) {
|
if (tickAmount % 20 == 0) {
|
||||||
Utils.checkForDungeon();
|
Utils.checkForDungeon();
|
||||||
}
|
}
|
||||||
|
AuctionHouse.switchStates();
|
||||||
switch (clickState) {
|
|
||||||
case CLICK:
|
|
||||||
if (System.currentTimeMillis() - lastAction < 500) return;
|
|
||||||
Minecraft.getMinecraft().playerController.windowClick(Minecraft.getMinecraft().thePlayer.openContainer.windowId, 31, 0, 0, Minecraft.getMinecraft().thePlayer);
|
|
||||||
lastAction = System.currentTimeMillis();
|
|
||||||
clickState = States.CONFIRM;
|
|
||||||
break;
|
|
||||||
case CONFIRM:
|
|
||||||
if (System.currentTimeMillis() - lastAction < 500) return;
|
|
||||||
Minecraft.getMinecraft().playerController.windowClick(Minecraft.getMinecraft().thePlayer.openContainer.windowId, 11, 0, 0, Minecraft.getMinecraft().thePlayer);
|
|
||||||
clickState = States.NONE;
|
|
||||||
break;
|
|
||||||
case OPEN:
|
|
||||||
AuctionHouse.sendAuction();
|
|
||||||
lastAction = System.currentTimeMillis();
|
|
||||||
clickState = States.CLICK;
|
|
||||||
case NONE:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onChat(ClientChatReceivedEvent event) {
|
public void onChat(ClientChatReceivedEvent event) {
|
||||||
String message = event.message.getUnformattedText();
|
String message = event.message.getUnformattedText();
|
||||||
if (!message.contains(":")) {
|
if (!message.contains(":")) {
|
||||||
if (message.equals("Myrap opened a WITHER door!")) {
|
if (message.equals("Claiming BIN auction...")) {
|
||||||
Utils.addTitle("&aMyr opened a door");
|
Utils.addTitle("&aBought BIN Auction");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
event.message = new ChatComponentText(event.message.getFormattedText().replace("§bCo-op > ", "§zCo-op > "));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
264
src/main/java/me/night0721/lilase/utils/AuctionHouse.java
Normal file
264
src/main/java/me/night0721/lilase/utils/AuctionHouse.java
Normal file
|
@ -0,0 +1,264 @@
|
||||||
|
package me.night0721.lilase.utils;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
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.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 static String uuid;
|
||||||
|
private static String message_toSend;
|
||||||
|
private static long lastAction;
|
||||||
|
private Thread thread;
|
||||||
|
private Boolean open = false;
|
||||||
|
private DiscordWebhook webhook;
|
||||||
|
private final List<Item> items = new ArrayList<>();
|
||||||
|
private final List<String> posted = new ArrayList<>();
|
||||||
|
public static States clickState = States.NONE;
|
||||||
|
|
||||||
|
public AuctionHouse() {
|
||||||
|
// 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));
|
||||||
|
items.add(new Item(" ", ItemType.ANY, 1000, ItemTier.ANY));
|
||||||
|
webhook = new DiscordWebhook(ConfigUtils.getString("main", "Webhook"));
|
||||||
|
webhook.setUsername("Lilase - Auction House");
|
||||||
|
webhook.setAvatarUrl("https://wallpapercave.com/wp/wp2412537.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONObject getHypixelData(String player) throws IOException, JSONException {
|
||||||
|
URL url = new URL("https://api.hypixel.net/player?key=" + ConfigUtils.getString("main", "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;
|
||||||
|
StringBuffer content = new StringBuffer();
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
content.append(inputLine);
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
connection.disconnect();
|
||||||
|
return new JSONObject(content.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getItem() throws IOException, JSONException {
|
||||||
|
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();
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||||
|
String inputLine;
|
||||||
|
StringBuffer content = new StringBuffer();
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
content.append(inputLine);
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
connection.disconnect();
|
||||||
|
if (status != 200) return;
|
||||||
|
JSONObject data = new JSONObject(content.toString());
|
||||||
|
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.getInt("starting_bid") > item.price) break;
|
||||||
|
if (item.tier != ItemTier.ANY) if (!auction.getString("tier").equals(item.tier.name())) break;
|
||||||
|
if (type != ItemType.ANY) if (!auction.getString("category").equals(type.lowercase)) break;
|
||||||
|
if (!auction.getBoolean("bin")) break;
|
||||||
|
if (!posted.contains(auction.getString("uuid"))) {
|
||||||
|
posted.add(auction.getString("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("");
|
||||||
|
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)
|
||||||
|
.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.setContent(auction.getString("item_name") + " is sale at " + format.format(auction.getInt("starting_bid")) + "!\n`" + "/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;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendAuction() {
|
||||||
|
Utils.sendServerMessage("/viewauction " + uuid);
|
||||||
|
Utils.sendMessage(message_toSend);
|
||||||
|
}
|
||||||
|
|
||||||
|
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";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void toggleAuction() {
|
||||||
|
if (open) {
|
||||||
|
Utils.sendMessage("Stopped Auction House");
|
||||||
|
thread.stop();
|
||||||
|
open = false;
|
||||||
|
} else {
|
||||||
|
Utils.sendMessage("Started Auction House");
|
||||||
|
thread = new Thread(() -> {
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
getItem();
|
||||||
|
thread.sleep(TimeUnit.SECONDS.toMillis(ConfigUtils.getInt("main", "AuctionHouseDelay")));
|
||||||
|
} catch (IOException | JSONException | InterruptedException ignore) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
thread.run(); //You didn't participate in this auction!
|
||||||
|
open = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void switchStates() {
|
||||||
|
switch (clickState) {
|
||||||
|
case CLICK:
|
||||||
|
if (System.currentTimeMillis() - lastAction < 500) return;
|
||||||
|
Minecraft.getMinecraft().playerController.windowClick(Minecraft.getMinecraft().thePlayer.openContainer.windowId, 31, 0, 0, Minecraft.getMinecraft().thePlayer);
|
||||||
|
lastAction = System.currentTimeMillis();
|
||||||
|
clickState = States.CONFIRM;
|
||||||
|
break;
|
||||||
|
case CONFIRM:
|
||||||
|
if (System.currentTimeMillis() - lastAction < 500) return;
|
||||||
|
Minecraft.getMinecraft().playerController.windowClick(Minecraft.getMinecraft().thePlayer.openContainer.windowId, 11, 0, 0, Minecraft.getMinecraft().thePlayer);
|
||||||
|
clickState = States.NONE;
|
||||||
|
break;
|
||||||
|
case OPEN:
|
||||||
|
AuctionHouse.sendAuction();
|
||||||
|
lastAction = System.currentTimeMillis();
|
||||||
|
clickState = States.CLICK;
|
||||||
|
case NONE:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum States {
|
||||||
|
OPEN, NONE, CLICK, CONFIRM
|
||||||
|
}
|
||||||
|
|
||||||
|
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 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;
|
||||||
|
}
|
||||||
|
}
|
179
src/main/java/me/night0721/lilase/utils/ConfigUtils.java
Normal file
179
src/main/java/me/night0721/lilase/utils/ConfigUtils.java
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
package me.night0721.lilase.utils;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.config.ConfigCategory;
|
||||||
|
import net.minecraftforge.common.config.Configuration;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class ConfigUtils {
|
||||||
|
public static Configuration config;
|
||||||
|
public final static String file = "config/Lilase.cfg";
|
||||||
|
|
||||||
|
public static void reloadConfig() {
|
||||||
|
if (!hasKey("main", "APIKey")) writeStringConfig("main", "APIKey", "");
|
||||||
|
if (!hasKey("main", "Webhook")) writeStringConfig("main", "Webhook", "");
|
||||||
|
if (!hasKey("main", "AuctionHouseDelay")) writeIntConfig("main", "AuctionHouseDelay", 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static int getInt(String category, String key) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
if (config.getCategory(category).containsKey(key)) {
|
||||||
|
return config.get(category, key, 0).getInt();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double getDouble(String category, String key) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
if (config.getCategory(category).containsKey(key)) {
|
||||||
|
return config.get(category, key, 0D).getDouble();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
return 0D;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getString(String category, String key) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
if (config.getCategory(category).containsKey(key)) {
|
||||||
|
return config.get(category, key, "").getString();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean getBoolean(String category, String key) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
if (config.getCategory(category).containsKey(key)) {
|
||||||
|
return config.get(category, key, false).getBoolean();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeIntConfig(String category, String key, int value) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
int set = config.get(category, key, value).getInt();
|
||||||
|
config.getCategory(category).get(key).set(value);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeDoubleConfig(String category, String key, double value) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
double set = config.get(category, key, value).getDouble();
|
||||||
|
config.getCategory(category).get(key).set(value);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeStringConfig(String category, String key, String value) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
String set = config.get(category, key, value).getString();
|
||||||
|
config.getCategory(category).get(key).set(value);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeBooleanConfig(String category, String key, boolean value) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
boolean set = config.get(category, key, value).getBoolean();
|
||||||
|
config.getCategory(category).get(key).set(value);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasKey(String category, String key) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
if (!config.hasCategory(category)) return false;
|
||||||
|
return config.getCategory(category).containsKey(key);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void deleteCategory(String category) {
|
||||||
|
category = category.toLowerCase();
|
||||||
|
config = new Configuration(new File(file));
|
||||||
|
try {
|
||||||
|
config.load();
|
||||||
|
if (config.hasCategory(category)) {
|
||||||
|
config.removeCategory(new ConfigCategory(category));
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,16 +1,13 @@
|
||||||
package me.night0721.lilase.utils;
|
package me.night0721.lilase.utils;
|
||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
import java.awt.Color;
|
import java.awt.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used to execute Discord Webhooks with low effort
|
* Class used to execute Discord Webhooks with low effort
|
||||||
|
@ -22,7 +19,7 @@ public class DiscordWebhook {
|
||||||
private String username;
|
private String username;
|
||||||
private String avatarUrl;
|
private String avatarUrl;
|
||||||
private boolean tts;
|
private boolean tts;
|
||||||
private List<EmbedObject> embeds = new ArrayList<>();
|
private final List<EmbedObject> embeds = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new DiscordWebhook instance
|
* Constructs a new DiscordWebhook instance
|
||||||
|
@ -151,7 +148,7 @@ public class DiscordWebhook {
|
||||||
stream.flush();
|
stream.flush();
|
||||||
stream.close();
|
stream.close();
|
||||||
|
|
||||||
connection.getInputStream().close(); //I'm not sure why but it doesn't work without getting the InputStream
|
connection.getInputStream().close();
|
||||||
connection.disconnect();
|
connection.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +162,7 @@ public class DiscordWebhook {
|
||||||
private Thumbnail thumbnail;
|
private Thumbnail thumbnail;
|
||||||
private Image image;
|
private Image image;
|
||||||
private Author author;
|
private Author author;
|
||||||
private List<Field> fields = new ArrayList<>();
|
private final List<Field> fields = new ArrayList<>();
|
||||||
|
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return title;
|
return title;
|
||||||
|
@ -248,9 +245,9 @@ public class DiscordWebhook {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Footer {
|
private static class Footer {
|
||||||
private String text;
|
private final String text;
|
||||||
private String iconUrl;
|
private final String iconUrl;
|
||||||
|
|
||||||
private Footer(String text, String iconUrl) {
|
private Footer(String text, String iconUrl) {
|
||||||
this.text = text;
|
this.text = text;
|
||||||
|
@ -266,8 +263,8 @@ public class DiscordWebhook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Thumbnail {
|
private static class Thumbnail {
|
||||||
private String url;
|
private final String url;
|
||||||
|
|
||||||
private Thumbnail(String url) {
|
private Thumbnail(String url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
|
@ -278,8 +275,8 @@ public class DiscordWebhook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Image {
|
private static class Image {
|
||||||
private String url;
|
private final String url;
|
||||||
|
|
||||||
private Image(String url) {
|
private Image(String url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
|
@ -290,10 +287,10 @@ public class DiscordWebhook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Author {
|
private static class Author {
|
||||||
private String name;
|
private final String name;
|
||||||
private String url;
|
private final String url;
|
||||||
private String iconUrl;
|
private final String iconUrl;
|
||||||
|
|
||||||
private Author(String name, String url, String iconUrl) {
|
private Author(String name, String url, String iconUrl) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
@ -314,10 +311,10 @@ public class DiscordWebhook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Field {
|
private static class Field {
|
||||||
private String name;
|
private final String name;
|
||||||
private String value;
|
private final String value;
|
||||||
private boolean inline;
|
private final boolean inline;
|
||||||
|
|
||||||
private Field(String name, String value, boolean inline) {
|
private Field(String name, String value, boolean inline) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
@ -339,7 +336,7 @@ public class DiscordWebhook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class JSONObject {
|
private static class JSONObject {
|
||||||
|
|
||||||
private final HashMap<String, Object> map = new HashMap<>();
|
private final HashMap<String, Object> map = new HashMap<>();
|
||||||
|
|
||||||
|
@ -367,7 +364,7 @@ public class DiscordWebhook {
|
||||||
} else if (val instanceof Boolean) {
|
} else if (val instanceof Boolean) {
|
||||||
builder.append(val);
|
builder.append(val);
|
||||||
} else if (val instanceof JSONObject) {
|
} else if (val instanceof JSONObject) {
|
||||||
builder.append(val.toString());
|
builder.append(val);
|
||||||
} else if (val.getClass().isArray()) {
|
} else if (val.getClass().isArray()) {
|
||||||
builder.append("[");
|
builder.append("[");
|
||||||
int len = Array.getLength(val);
|
int len = Array.getLength(val);
|
||||||
|
|
|
@ -41,6 +41,18 @@ public class Utils {
|
||||||
}
|
}
|
||||||
inDungeon = false;
|
inDungeon = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void checkInHub() {
|
||||||
|
List<String> scoreboard = ScoreboardUtils.getSidebarLines();
|
||||||
|
for (String s : scoreboard) {
|
||||||
|
String sCleaned = ScoreboardUtils.cleanSB(s);
|
||||||
|
if (sCleaned.contains("Hub")) {
|
||||||
|
inDungeon = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inDungeon = true;
|
||||||
|
}
|
||||||
public static void sendMessage(String message) {
|
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));
|
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.LIGHT_PURPLE + "" + EnumChatFormatting.BOLD + "Liliase" + EnumChatFormatting.RESET + EnumChatFormatting.DARK_GRAY + " » " + EnumChatFormatting.RESET + EnumChatFormatting.GREEN + EnumChatFormatting.BOLD + message));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,284 +0,0 @@
|
||||||
package me.night0721.lilase.utils.ah;
|
|
||||||
|
|
||||||
import me.night0721.lilase.utils.Utils;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
|
||||||
import okhttp3.Response;
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.net.URL;
|
|
||||||
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;
|
|
||||||
|
|
||||||
import static me.night0721.lilase.Main.clickState;
|
|
||||||
|
|
||||||
public class AuctionHouse {
|
|
||||||
private final OkHttpClient client;
|
|
||||||
private static String uuid;
|
|
||||||
private static String message_toSend;
|
|
||||||
private Thread thread;
|
|
||||||
private Boolean open = false;
|
|
||||||
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));
|
|
||||||
items.add(new Item(" ", ItemType.ANY, 1000, ItemTier.ANY));
|
|
||||||
thread = new Thread(() -> {
|
|
||||||
while (true) {
|
|
||||||
try {
|
|
||||||
getItem();
|
|
||||||
TimeUnit.SECONDS.sleep(8);
|
|
||||||
} catch (IOException | JSONException | InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
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 (item.tier != ItemTier.ANY) {
|
|
||||||
if (!auction.getString("tier").equals(item.tier.name())) break;
|
|
||||||
}
|
|
||||||
if (auction.getInt("starting_bid") > item.price) break;
|
|
||||||
if (type != ItemType.ANY) {
|
|
||||||
if (!auction.getString("category").equals(type.lowercase)) break;
|
|
||||||
}
|
|
||||||
if (!auction.getBoolean("bin")) break;
|
|
||||||
if (!posted.contains(auction.getString("uuid"))) {
|
|
||||||
posted.add(auction.getString("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("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);
|
|
||||||
uuid = auction.getString("uuid");
|
|
||||||
message_toSend = "Auction House: " + auction.getString("item_name") + " is sale for " + format.format(auction.getInt("starting_bid")) + "!";
|
|
||||||
clickState = States.OPEN;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendAuction() {
|
|
||||||
Utils.sendServerMessage("/viewauction " + uuid);
|
|
||||||
Utils.sendMessage(message_toSend);
|
|
||||||
}
|
|
||||||
|
|
||||||
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";
|
|
||||||
|
|
||||||
URL url = new URL(DISCORD_WEBHOOK);
|
|
||||||
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
|
|
||||||
connection.addRequestProperty("Content-Type", "application/json");
|
|
||||||
connection.addRequestProperty("User-Agent", "Java-DiscordWebhook-BY-Gelox_");
|
|
||||||
connection.setDoOutput(true);
|
|
||||||
connection.setRequestMethod("POST");
|
|
||||||
|
|
||||||
OutputStream stream = connection.getOutputStream();
|
|
||||||
stream.write(data.toString().getBytes());
|
|
||||||
stream.flush();
|
|
||||||
stream.close();
|
|
||||||
connection.getInputStream().close();
|
|
||||||
connection.disconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void toggleAuction() {
|
|
||||||
if (open) {
|
|
||||||
Utils.sendMessage("Stopped Auction House");
|
|
||||||
thread.stop();
|
|
||||||
open = false;
|
|
||||||
} else {
|
|
||||||
Utils.sendMessage("Started Auction House");
|
|
||||||
thread.run();
|
|
||||||
open = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
package me.night0721.lilase.utils.ah;
|
|
||||||
|
|
||||||
public enum States {
|
|
||||||
OPEN,
|
|
||||||
NONE,
|
|
||||||
//CLOSE,
|
|
||||||
CLICK,
|
|
||||||
CONFIRM
|
|
||||||
}
|
|
Loading…
Reference in a new issue