diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/script/Script.kt b/src/main/kotlin/net/ccbluex/liquidbounce/script/Script.kt index f85c23b79c2..ae5631296f1 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/script/Script.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/script/Script.kt @@ -20,15 +20,11 @@ package net.ccbluex.liquidbounce.script import net.ccbluex.liquidbounce.features.command.CommandManager import net.ccbluex.liquidbounce.features.command.builder.CommandBuilder -import net.ccbluex.liquidbounce.features.command.builder.ParameterBuilder import net.ccbluex.liquidbounce.features.module.Module import net.ccbluex.liquidbounce.features.module.ModuleManager -import net.ccbluex.liquidbounce.script.bindings.api.JsApiProvider +import net.ccbluex.liquidbounce.script.bindings.api.JsContextProvider import net.ccbluex.liquidbounce.script.bindings.features.JsModule -import net.ccbluex.liquidbounce.script.bindings.features.JsSetting -import net.ccbluex.liquidbounce.script.bindings.globals.JsClient import net.ccbluex.liquidbounce.utils.client.logger -import net.ccbluex.liquidbounce.utils.client.mc import org.graalvm.polyglot.Context import org.graalvm.polyglot.HostAccess import java.io.File @@ -48,7 +44,7 @@ class Script(val scriptFile: File) { // Global instances val jsBindings = getBindings("js") - JsApiProvider.setupUsefulContext(jsBindings) + JsContextProvider.setupUsefulContext(jsBindings) // Global functions jsBindings.putMember("registerScript", RegisterScript()) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsApiProvider.kt b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsContextProvider.kt similarity index 62% rename from src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsApiProvider.kt rename to src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsContextProvider.kt index 764e14b3f70..154542b738a 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsApiProvider.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsContextProvider.kt @@ -25,13 +25,15 @@ import net.ccbluex.liquidbounce.script.bindings.globals.JsClient import net.ccbluex.liquidbounce.utils.client.mc import net.minecraft.util.Hand import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.MathHelper +import net.minecraft.util.math.Vec3d import net.minecraft.util.math.Vec3i import org.graalvm.polyglot.Value /** - * The main hub of the ScriptAPI that provides access to all kind of useful APIs. + * The main hub of the ScriptAPI that provides access to a useful set of members. */ -object JsApiProvider { +object JsContextProvider { internal fun setupUsefulContext(context: Value) = context.apply { // Class bindings @@ -40,50 +42,24 @@ object JsApiProvider { putMember("CommandBuilder", CommandBuilder) putMember("ParameterBuilder", ParameterBuilder) // -> Minecraft API - // todo: test if this works putMember("Vec3i", Vec3i::class.java) + putMember("Vec3d", Vec3d::class.java) + putMember("MathHelper", MathHelper::class.java) putMember("BlockPos", BlockPos::class.java) putMember("Hand", Hand::class.java) // Variable bindings putMember("mc", mc) putMember("client", JsClient) - putMember("api", JsApiProvider) - } - - /** - * A collection of useful rotation utilities for the ScriptAPI. - * This SHOULD not be changed in a way that breaks backwards compatibility. - * - * This is a singleton object, so it can be accessed from the script API like this: - * ```js - * api.rotationUtil.newRaytracedRotationEntity(entity, 4.2, 0.0) - * api.rotationUtil.newRotationEntity(entity) - * api.rotationUtil.aimAtRotation(rotation, true) - * ``` - */ - @JvmField - val rotationUtil = JsRotationUtil - - /** - * Object used by the script API to provide an idiomatic way of creating module values. - */ - @JvmField - val itemUtil = JsItemUtil - - @JvmField - val networkUtil = JsNetworkUtil - @JvmField - val interactionUtil = JsInteractionUtil - - @JvmField - val blockUtil = JsBlockUtil - - @JvmField - val reflectionUtil = JsReflectionUtil - - @JvmField - val movementUtil = JsMovementUtil + // Register utilities + putMember("rotationUtil", JsRotationUtil) + putMember("itemUtil", JsItemUtil) + putMember("networkUtil", JsNetworkUtil) + putMember("interactionUtil", JsInteractionUtil) + putMember("blockUtil", JsBlockUtil) + putMember("movementUtil", JsMovementUtil) + putMember("reflectionUtil", JsReflectionUtil) + } } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsMovementUtil.kt b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsMovementUtil.kt index 0a72e4729ba..8ad97e8edcb 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsMovementUtil.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/script/bindings/api/JsMovementUtil.kt @@ -19,20 +19,30 @@ package net.ccbluex.liquidbounce.script.bindings.api import net.ccbluex.liquidbounce.utils.client.player +import net.ccbluex.liquidbounce.utils.entity.moving +import net.ccbluex.liquidbounce.utils.entity.sqrtSpeed import net.ccbluex.liquidbounce.utils.entity.strafe object JsMovementUtil { - fun strafe() = player.strafe() + fun speed(): Double = player.sqrtSpeed - fun strafeSpeed(speed: Double) = player.strafe(speed.toFloat()) + fun moving(): Boolean = player.moving - fun velocity() = player.velocity + fun strafe() { + player.strafe() + } - fun addVelocity(x: Double, y: Double, z: Double) = player.addVelocity(x, y, z) + fun strafeWithSpeed(speed: Double) { + player.strafe(speed = speed) + } - fun stopVelocity() = player.setVelocity(0.0, 0.0, 0.0) + fun strafeWithStrength(strength: Double) { + player.strafe(strength = strength) + } - fun jump() = player.jump() + fun strafeWithSpeedAndStrength(speed: Double, strength: Double) { + player.strafe(speed = speed, strength = strength) + } }