Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[LEGACY] Inventory Management Rework #1347

Merged
merged 18 commits into from Oct 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions build.gradle
Expand Up @@ -66,6 +66,10 @@ dependencies {

include 'org.apache.httpcomponents:httpmime:4.3.3'

// https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core
include 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'


include fileTree(include: ["*.jar"], dir: "libs")
}

Expand Down
10 changes: 6 additions & 4 deletions src/main/java/net/ccbluex/liquidbounce/LiquidBounce.kt
Expand Up @@ -42,10 +42,11 @@ import net.ccbluex.liquidbounce.utils.Background
import net.ccbluex.liquidbounce.utils.ClassUtils.hasForge
import net.ccbluex.liquidbounce.utils.ClientUtils.LOGGER
import net.ccbluex.liquidbounce.utils.ClientUtils.disableFastRender
import net.ccbluex.liquidbounce.utils.InventoryUtils
import net.ccbluex.liquidbounce.utils.MovementUtils
import net.ccbluex.liquidbounce.utils.RotationUtils
import net.ccbluex.liquidbounce.utils.TickedActions
import net.ccbluex.liquidbounce.utils.inventory.InventoryUtils
import net.ccbluex.liquidbounce.utils.render.MiniMapRegister
import net.ccbluex.liquidbounce.utils.timing.TickedActions
import kotlin.concurrent.thread

object LiquidBounce {
Expand Down Expand Up @@ -102,13 +103,14 @@ object LiquidBounce {
registerListener(InventoryUtils)
registerListener(MiniMapRegister)
registerListener(TickedActions)
registerListener(MovementUtils)

// Load client fonts
loadFonts()

// Load settings
loadSettings(false) {
LOGGER.info("Successfully loaded ${it.count()} settings.")
LOGGER.info("Successfully loaded ${it.size} settings.")
}

// Register commands
Expand Down Expand Up @@ -174,7 +176,7 @@ object LiquidBounce {

// Refresh cape service
CapeService.refreshCapeCarriers {
LOGGER.info("Successfully loaded ${CapeService.capeCarriers.count()} cape carriers.")
LOGGER.info("Successfully loaded ${CapeService.capeCarriers.size} cape carriers.")
}

// Load background
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/net/ccbluex/liquidbounce/cape/CapeService.kt
Expand Up @@ -6,15 +6,14 @@
package net.ccbluex.liquidbounce.cape

import com.google.gson.JsonParser
import net.ccbluex.liquidbounce.api.ClientApi.API_ENDPOINT
import net.ccbluex.liquidbounce.event.EventTarget
import net.ccbluex.liquidbounce.event.Listenable
import net.ccbluex.liquidbounce.event.SessionEvent
import net.ccbluex.liquidbounce.utils.ClientUtils.LOGGER
import net.ccbluex.liquidbounce.utils.MinecraftInstance
import net.ccbluex.liquidbounce.utils.login.UserUtils
import net.ccbluex.liquidbounce.utils.misc.HttpUtils.get
import net.ccbluex.liquidbounce.utils.timer.MSTimer
import net.ccbluex.liquidbounce.utils.timing.MSTimer
import org.apache.http.HttpHeaders
import org.apache.http.HttpStatus
import org.apache.http.client.methods.HttpDelete
Expand Down
8 changes: 3 additions & 5 deletions src/main/java/net/ccbluex/liquidbounce/event/EventManager.kt
Expand Up @@ -23,7 +23,7 @@ object EventManager {

val invokableEventTargets = registry.getOrDefault(eventClass, ArrayList())
invokableEventTargets += EventHook(listener, method, eventTarget)
registry[eventClass] = invokableEventTargets
registry[eventClass] = invokableEventTargets.sortedByDescending { it.priority }.toMutableList()
}
}

Expand All @@ -33,10 +33,8 @@ object EventManager {
* @param listenable for unregister
*/
fun unregisterListener(listenable: Listenable) =
registry.forEach { (key, targets) ->
registry.forEach { (_, targets) ->
targets.removeIf { it.eventClass == listenable }

registry[key] = targets
}

/**
Expand All @@ -47,7 +45,7 @@ object EventManager {
fun callEvent(event: Event) {
val targets = registry[event.javaClass] ?: return

for (invokableEventTarget in targets.sortedByDescending { it.priority }) {
for (invokableEventTarget in targets) {
try {
if (!invokableEventTarget.eventClass.handleEvents() && !invokableEventTarget.isIgnoreCondition)
continue
Expand Down
Expand Up @@ -7,7 +7,7 @@ package net.ccbluex.liquidbounce.features.command.commands

import net.ccbluex.liquidbounce.features.command.Command
import net.ccbluex.liquidbounce.utils.PacketUtils.sendPacket
import net.ccbluex.liquidbounce.utils.item.ItemUtils
import net.ccbluex.liquidbounce.utils.inventory.ItemUtils
import net.ccbluex.liquidbounce.utils.misc.StringUtils
import net.minecraft.item.Item
import net.minecraft.network.play.client.C10PacketCreativeInventoryAction
Expand All @@ -32,23 +32,7 @@ class GiveCommand : Command("give", "item", "i", "get") {
return
}

var emptySlot = -1

for (i in 36..44) {
if (thePlayer.inventoryContainer.getSlot(i).stack == null) {
emptySlot = i
break
}
}

if (emptySlot == -1) {
for (i in 9..44) {
if (thePlayer.inventoryContainer.getSlot(i).stack == null) {
emptySlot = i
break
}
}
}
val emptySlot = thePlayer.inventory.firstEmptyStack

if (emptySlot != -1) {
sendPacket(C10PacketCreativeInventoryAction(emptySlot, itemStack))
Expand Down
52 changes: 52 additions & 0 deletions src/main/java/net/ccbluex/liquidbounce/features/module/Module.kt
Expand Up @@ -13,11 +13,14 @@ import net.ccbluex.liquidbounce.lang.translation
import net.ccbluex.liquidbounce.ui.client.hud.HUD.addNotification
import net.ccbluex.liquidbounce.ui.client.hud.element.elements.Arraylist
import net.ccbluex.liquidbounce.ui.client.hud.element.elements.Notification
import net.ccbluex.liquidbounce.utils.CoroutineUtils.waitUntil
import net.ccbluex.liquidbounce.utils.MinecraftInstance
import net.ccbluex.liquidbounce.utils.extensions.toLowerCamelCase
import net.ccbluex.liquidbounce.utils.misc.RandomUtils.nextFloat
import net.ccbluex.liquidbounce.utils.timing.TickedActions
import net.ccbluex.liquidbounce.value.Value
import net.minecraft.client.audio.PositionedSoundRecord
import net.minecraft.item.ItemStack
import net.minecraft.util.ResourceLocation
import org.lwjgl.input.Keyboard

Expand Down Expand Up @@ -68,6 +71,8 @@ open class Module @JvmOverloads constructor(
// Call toggle
onToggle(value)

TickScheduler.clear()

// Play sound and add notification
if (!isStarting) {
mc.soundHandler.playSound(PositionedSoundRecord.create(ResourceLocation("random.click"), 1F))
Expand Down Expand Up @@ -143,4 +148,51 @@ open class Module @JvmOverloads constructor(
* Events should be handled when module is enabled
*/
override fun handleEvents() = state

internal object TickScheduler {
lateinit var instance: Module

internal fun schedule(id: Int, allowDuplicates: Boolean = false, action: () -> Unit) =
TickedActions.schedule(id, instance, allowDuplicates, action)

internal fun scheduleClick(slot: Int, button: Int, mode: Int, allowDuplicates: Boolean = false, windowId: Int = mc.thePlayer.openContainer.windowId, action: ((ItemStack?) -> Unit)? = null) =
schedule(slot, allowDuplicates) {
val newStack = mc.playerController.windowClick(windowId, slot, button, mode, mc.thePlayer)
action?.invoke(newStack)
}

operator fun plusAssign(action: () -> Unit) {
schedule(-1, true, action)
}

// Schedule actions to be executed in following ticks, one each tick
// Thread is frozen until all actions were executed (suitable for coroutines)
internal fun scheduleAndSuspend(vararg actions: () -> Unit) =
actions.forEach {
this += it
waitUntil(::isEmpty)
}

internal fun scheduleAndSuspend(id: Int = -1, allowDuplicates: Boolean = true, action: () -> Unit) {
schedule(id, allowDuplicates, action)
waitUntil(::isEmpty)
}

internal fun isScheduled(id: Int) = TickedActions.isScheduled(id, instance)

// Checks if id click is scheduled: if (id in TickScheduler)
operator fun contains(id: Int) = isScheduled(id)

internal fun clear() = TickedActions.clear(instance)

internal val size
get() = TickedActions.size(instance)

internal fun isEmpty() = TickedActions.isEmpty(instance)

}

init {
TickScheduler.instance = this
}
}
Expand Up @@ -14,6 +14,7 @@ enum class ModuleCategory(val displayName: String) {
WORLD("World"),
MISC("Misc"),
EXPLOIT("Exploit"),
FUN("Fun")
FUN("Fun"),
BETA("Beta")

}
Expand Up @@ -11,6 +11,9 @@ import net.ccbluex.liquidbounce.event.EventTarget
import net.ccbluex.liquidbounce.event.KeyEvent
import net.ccbluex.liquidbounce.event.Listenable
import net.ccbluex.liquidbounce.features.command.CommandManager.registerCommand
import net.ccbluex.liquidbounce.features.module.modules.beta.CoroutineArmorer
import net.ccbluex.liquidbounce.features.module.modules.beta.CoroutineCleaner
import net.ccbluex.liquidbounce.features.module.modules.beta.CoroutineStealer
import net.ccbluex.liquidbounce.features.module.modules.combat.*
import net.ccbluex.liquidbounce.features.module.modules.exploit.*
import net.ccbluex.liquidbounce.features.module.modules.`fun`.Derp
Expand All @@ -22,6 +25,7 @@ import net.ccbluex.liquidbounce.features.module.modules.render.*
import net.ccbluex.liquidbounce.features.module.modules.world.*
import net.ccbluex.liquidbounce.features.module.modules.world.Timer
import net.ccbluex.liquidbounce.utils.ClientUtils.LOGGER
import net.ccbluex.liquidbounce.utils.inventory.InventoryManager
import java.util.*


Expand Down Expand Up @@ -99,6 +103,9 @@ object ModuleManager : Listenable {
Clip,
ComponentOnHover,
ConsoleSpammer,
CoroutineArmorer,
CoroutineCleaner,
CoroutineStealer,
Criticals,
Damage,
Derp,
Expand Down Expand Up @@ -202,6 +209,8 @@ object ModuleManager : Listenable {
Zoot
)

InventoryManager.startCoroutine()

LOGGER.info("[ModuleManager] Loaded ${modules.size} modules.")
}

Expand Down