diff --git a/gradle.properties b/gradle.properties index 896c121f..ee43051c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ yarn_mappings=1.21.11+build.4 loader_version=0.18.4 # Mod Properties -mod_version=1.21.11_1.2.1.6.5 +mod_version=1.21.11_1.2.1.6.6 maven_group=com.nekiplay.neoscripts archives_base_name=neo-scripts diff --git a/src/main/java/com/nekiplay/neoscripts/utils/BlockUtils.java b/src/main/java/com/nekiplay/neoscripts/utils/BlockUtils.java deleted file mode 100644 index 387633f8..00000000 --- a/src/main/java/com/nekiplay/neoscripts/utils/BlockUtils.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.nekiplay.neoscripts.utils; - -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.client.Minecraft; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; -import net.minecraft.world.InteractionHand; - -import static com.nekiplay.neoscripts.Main.mc; - -public class BlockUtils { - public static boolean breaking; - private static boolean breakingThisTick; - - - public static void init() { - ClientTickEvents.START_CLIENT_TICK.register(BlockUtils::onTickPre); - ClientTickEvents.END_CLIENT_TICK.register(BlockUtils::onTickPost); - } - private static void onTickPre(Minecraft minecraft) { - breakingThisTick = false; - } - private static void onTickPost(Minecraft minecraft) { - if (!breakingThisTick && breaking) { - breaking = false; - if (mc.gameMode != null) mc.gameMode.stopDestroyBlock(); - } - } - - /** - * Needs to be used in {@link TickEvent.Pre} - */ - public static boolean breakBlock(BlockPos blockPos, Direction direction, boolean swing) { - if (mc.level.getBlockState(blockPos).isAir()) return false; - - // Creating new instance of block pos because minecraft assigns the parameter to a field, and we don't want it to change when it has been stored in a field somewhere - BlockPos pos = blockPos instanceof BlockPos.MutableBlockPos ? new BlockPos(blockPos) : blockPos; - - if (mc.gameMode.isDestroying()) - mc.gameMode.continueDestroyBlock(pos, direction); - else mc.gameMode.startDestroyBlock(pos, direction); - - if (swing) mc.player.swing(InteractionHand.MAIN_HAND); - else mc.getConnection().send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); - - breaking = true; - breakingThisTick = true; - - return true; - } -} diff --git a/src/main/java/com/nekiplay/neoscripts/utils/NotificationUtils.java b/src/main/java/com/nekiplay/neoscripts/utils/NotificationUtils.java deleted file mode 100644 index 4a8c8dd4..00000000 --- a/src/main/java/com/nekiplay/neoscripts/utils/NotificationUtils.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.nekiplay.neoscripts.utils; - -import org.apache.commons.lang3.SystemUtils; - -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.util.Objects; - -public class NotificationUtils { - private static NotificationUtils instance; - private final TrayIcon trayIcon; - - public NotificationUtils() { - if (!SystemUtils.IS_OS_WINDOWS || GraphicsEnvironment.isHeadless()) { - trayIcon = null; - return; - } - BufferedImage image; - try { - image = ImageIO.read(Objects.requireNonNull(getClass().getResource("/assets/neoscripts/logo.png"))); - } catch (IOException e) { - throw new RuntimeException(e); - } - trayIcon = new TrayIcon(image, "Farm Helper Failsafe Notification"); - trayIcon.setImageAutoSize(true); - trayIcon.setToolTip("Farm Helper Failsafe Notification"); - SystemTray tray = SystemTray.getSystemTray(); - try { - tray.add(trayIcon); - } catch (AWTException e) { - e.printStackTrace(); - } - } - - public static NotificationUtils getInstance() { - if (instance == null) { - instance = new NotificationUtils(); - } - return instance; - } - - public void sendNotification(String title, String text) { - try { - // Проверка headless для Windows - if (SystemUtils.IS_OS_WINDOWS) { - if (GraphicsEnvironment.isHeadless()) { - System.out.println("Headless mode detected, cannot show system tray notification."); - return; - } - windows(title, text); - } else if (SystemUtils.IS_OS_MAC_OSX) { - mac(title, text); - } else if (SystemUtils.IS_OS_LINUX) { - linux(title, text); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void windows(String title, String text) { - if (SystemTray.isSupported() && trayIcon != null) { - try { - trayIcon.displayMessage("Farm Helper", text, TrayIcon.MessageType.INFO); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - System.out.println("SystemTray is not supported or trayIcon is null"); - } - } - - private void mac(String title, String text) { - ProcessBuilder processBuilder = new ProcessBuilder(); - processBuilder.command("osascript", "-e", "display notification \"" + text + "\" with title \"" + title + "\""); - try { - processBuilder.start(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void linux(String title, String text) { - ProcessBuilder processBuilder = new ProcessBuilder(); - processBuilder.command("notify-send", "-a", title, text); - try { - processBuilder.start(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/nekiplay/neoscripts/utils/StatusBarTracker.java b/src/main/java/com/nekiplay/neoscripts/utils/StatusBarTracker.java deleted file mode 100644 index 9f0c822b..00000000 --- a/src/main/java/com/nekiplay/neoscripts/utils/StatusBarTracker.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.nekiplay.neoscripts.utils; - -import com.nekiplay.neoscripts.annotations.Init; -import com.nekiplay.neoscripts.utils.itemlist.PetInfo; -import com.nekiplay.neoscripts.utils.scheduler.Scheduler; -import com.nekiplay.neoscripts.utils.trackers.PetCache; -import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; -import net.minecraft.client.Minecraft; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ItemStack; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class StatusBarTracker { - private static final Pattern STATUS_HEALTH = Pattern.compile("§[6c](?[\\d,]+)/(?[\\d,]+)❤ *(?\\+§c([\\d,]+). *)?"); - private static final Pattern DEFENSE_STATUS = Pattern.compile("§a(?[\\d,]+)§a❈ Defense *"); - private static final Pattern MANA_USE = Pattern.compile("§b-([\\d,]+) Mana \\(§.*?\\) *"); - private static final Pattern MANA_STATUS = Pattern.compile("§b(?[\\d,]+)/(?[\\d,]+)✎ (?:Mana|§3(?[\\d,]+)ʬ) *"); - - private static final Minecraft client = Minecraft.getInstance(); - private static Resource health = new Resource(100, 100, 0); - private static Resource mana = new Resource(100, 100, 0); - private static Resource speed = new Resource(100, 400, 0); - private static Resource air = new Resource(100, 300, 0); - private static int defense = 0; - - @Init - public static void init() { - ClientReceiveMessageEvents.ALLOW_GAME.register(StatusBarTracker::allowOverlayMessage); - ClientReceiveMessageEvents.MODIFY_GAME.register(StatusBarTracker::onOverlayMessage); - Scheduler.INSTANCE.scheduleCyclic(StatusBarTracker::tick, 1); - } - - public static Resource getHealth() { - return health; - } - - public static Resource getMana() { - return mana; - } - - public static int getDefense() { - return defense; - } - - public static Resource getSpeed() { - return speed; - } - - public static Resource getAir() { - return air; - } - - private static void tick() { - if (client == null || client.player == null) return; - updateHealth(health.value, health.max, health.overflow); - updateSpeed(); - updateAir(); - } - - private static boolean allowOverlayMessage(Component text, boolean overlay) { - onOverlayMessage(text, overlay); - return true; - } - - private static Component onOverlayMessage(Component text, boolean overlay) { - if (!overlay || !Utils.isOnSkyblock() || Utils.isInTheRift()) { - return text; - } - update(text.getString(), false); - return Component.nullToEmpty(update(text.getString(), false)); - } - - public static String update(String actionBar, boolean filterManaUse) { - var sb = new StringBuilder(); - - // Match health and don't add it to the string builder - // Append healing to the string builder if there is any healing - Matcher matcher = STATUS_HEALTH.matcher(actionBar); - if (!matcher.find()) return actionBar; - updateHealth(matcher); - if (matcher.group("healing") != null) { - sb.append("§c❤"); - } - matcher.appendReplacement(sb, "$3"); - - // Match defense or mana use and don't add it to the string builder - if (matcher.usePattern(DEFENSE_STATUS).find()) { - defense = RegexUtils.parseIntFromMatcher(matcher, "defense"); - matcher.appendReplacement(sb, ""); - } else if (filterManaUse && matcher.usePattern(MANA_USE).find()) { - matcher.appendReplacement(sb, ""); - } - - // Match mana and don't add it to the string builder - if (matcher.usePattern(MANA_STATUS).find()) { - updateMana(matcher); - matcher.appendReplacement(sb, ""); - } - - // Append the rest of the message to the string builder - matcher.appendTail(sb); - String res = sb.toString().trim(); - return res.isEmpty() ? null : res; - } - - private static void updateHealth(Matcher matcher) { - int health = RegexUtils.parseIntFromMatcher(matcher, "health"); - int max = RegexUtils.parseIntFromMatcher(matcher, "max"); - updateHealth(health, max, Math.max(0, health - max)); - } - - private static void updateHealth(int value, int max, int overflow) { - if (client != null && client.player != null) { - value = (int) (client.player.getHealth() * max / client.player.getMaxHealth()); - overflow = (int) (client.player.getAbsorptionAmount() * max / client.player.getMaxHealth()); - } - health = new Resource(Math.min(value, max), max, Math.min(overflow, max)); - } - - private static void updateMana(Matcher m) { - int mana = RegexUtils.parseIntFromMatcher(m, "mana"); - int max = RegexUtils.parseIntFromMatcher(m, "max"); - int overflow = m.group("overflow") == null ? 0 : RegexUtils.parseIntFromMatcher(m, "overflow"); - StatusBarTracker.mana = new Resource(mana, max, overflow); - } - - private static void updateSpeed() { - // Black cat and racing helm are untested - I don't have the money to test atm, but no reason why they shouldn't work - assert client.player != null; - int value = (int) (client.player.isSprinting() ? (client.player.getSpeed() / 1.3f) * 1000 : client.player.getSpeed() * 1000); - int max = 400; // hardcoded limit (except for with cactus knife, black cat, snail, racing helm, young drag) - if (client.player.getMainHandItem().getHoverName().getString().contains("Cactus Knife") && Utils.getLocation() == Location.GARDEN) { - max = 500; - } - Iterable armor = ItemUtils.getArmor(client.player); - int youngDragCount = 0; - for (ItemStack armorPiece : armor) { - if (armorPiece.getHoverName().getString().contains("Racing Helmet")) { - max = 500; - } else if (armorPiece.getHoverName().getString().contains("Young Dragon")) { - youngDragCount++; - } - } - if (youngDragCount == 4) { - max = 500; - } - - PetInfo pet = PetCache.getCurrentPet(); - if (pet != null) { - if (pet.type().contains("BLACK_CAT")) { - max = 500; - } else if (pet.type().contains("SNAIL")) { - max = 100; - } - } - - speed = new Resource(value, max, 0); - } - - private static void updateAir() { - assert client.player != null; - int max = client.player.getMaxAirSupply(); - int value = Math.clamp(client.player.getAirSupply(), 0, max); - air = new Resource(value, max, 0); - } - - public record Resource(int value, int max, int overflow) {} -} \ No newline at end of file diff --git a/src/main/kotlin/com/nekiplay/neoscripts/Main.kt b/src/main/kotlin/com/nekiplay/neoscripts/Main.kt index abc50b1c..ae893f7d 100644 --- a/src/main/kotlin/com/nekiplay/neoscripts/Main.kt +++ b/src/main/kotlin/com/nekiplay/neoscripts/Main.kt @@ -6,12 +6,16 @@ import com.nekiplay.neoscripts.events.main.EventBus import com.nekiplay.neoscripts.features.commands.impl.LuaCommand import com.nekiplay.neoscripts.features.lua.LuaManager import com.nekiplay.neoscripts.features.modules.ModuleManager.registerInbuilt +import com.nekiplay.neoscripts.utils.NEURepoManager import com.nekiplay.neoscripts.utils.Utils +import com.nekiplay.neoscripts.utils.render.RenderHelper import com.nekiplay.neoscripts.utils.scheduler.Scheduler +import com.nekiplay.neoscripts.utils.trackers.ColdTracker +import com.nekiplay.neoscripts.utils.trackers.PetCache +import com.nekiplay.neoscripts.utils.trackers.StatusBarTracker import io.github.classgraph.ClassGraph import net.fabricmc.api.ClientModInitializer import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents import net.fabricmc.loader.api.FabricLoader import net.minecraft.ChatFormatting import net.minecraft.client.Minecraft @@ -77,8 +81,14 @@ object Main : ClientModInitializer { ClientCommandRegistrationCallback.EVENT.register { dispatcher, registryAccess -> LuaCommand.register(dispatcher, registryAccess) } - + // Load events + ColdTracker.init() + PetCache.init() + StatusBarTracker.init() + RenderHelper.init() registerInbuilt() + Utils.init() + NEURepoManager.init() Scheduler.INSTANCE.scheduleCyclic(Runnable { Utils.update() }, 20) diff --git a/src/main/kotlin/com/nekiplay/neoscripts/features/lua/LuaScript.kt b/src/main/kotlin/com/nekiplay/neoscripts/features/lua/LuaScript.kt index 84b85219..b24ced1f 100644 --- a/src/main/kotlin/com/nekiplay/neoscripts/features/lua/LuaScript.kt +++ b/src/main/kotlin/com/nekiplay/neoscripts/features/lua/LuaScript.kt @@ -23,9 +23,6 @@ import com.nekiplay.neoscripts.features.lua.objects.misc.TCPLib import com.nekiplay.neoscripts.features.lua.objects.misc.ThreadLib import com.nekiplay.neoscripts.features.lua.objects.misc.http.HttpClientLib import com.nekiplay.neoscripts.features.lua.objects.modules.ModulesObject -import com.nekiplay.neoscripts.features.lua.objects.player.InputObject -import com.nekiplay.neoscripts.features.lua.objects.player.InventoryObject -import com.nekiplay.neoscripts.features.lua.objects.player.NetworkObject import com.nekiplay.neoscripts.features.lua.objects.player.PlayerObject import com.nekiplay.neoscripts.features.lua.objects.player.WindowObject import com.nekiplay.neoscripts.features.lua.objects.render.TwoRenderObject diff --git a/src/main/kotlin/com/nekiplay/neoscripts/features/lua/objects/player/PlayerObject.kt b/src/main/kotlin/com/nekiplay/neoscripts/features/lua/objects/player/PlayerObject.kt index 13478473..c345ac75 100644 --- a/src/main/kotlin/com/nekiplay/neoscripts/features/lua/objects/player/PlayerObject.kt +++ b/src/main/kotlin/com/nekiplay/neoscripts/features/lua/objects/player/PlayerObject.kt @@ -13,7 +13,6 @@ import com.nekiplay.neoscripts.sugar.getTab import com.nekiplay.neoscripts.utils.PlayerUtils import com.nekiplay.neoscripts.utils.RaycastUtils import com.nekiplay.neoscripts.utils.RotationuUtils -import com.nekiplay.neoscripts.utils.StatusBarTracker import com.nekiplay.neoscripts.utils.Utils import com.nekiplay.neoscripts.utils.aiming.RotationManager import com.nekiplay.neoscripts.utils.trackers.ColdTracker diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ec56cf25..50b2ac6d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "id": "neoscripts", - "version": "1.2.1.6.5", + "version": "1.2.1.6.6", "name": "Neo Scripts", "description": "", "authors": [