diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d6a3972d..9e0eb71b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,8 +18,11 @@ permissions: jobs: build: - name: Build + name: Build Minecraft ${{ matrix.minecraft }} runs-on: blacksmith-4vcpu-ubuntu-2404 + strategy: + matrix: + minecraft: [26.1.2, 26.2] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -29,7 +32,7 @@ jobs: - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 with: distribution: temurin - java-version: 21 + java-version: 25 - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 with: @@ -41,18 +44,18 @@ jobs: ${{ runner.os }}-gradle- - name: Build - run: ./gradlew --no-daemon build -PreleaseBuild + run: ./gradlew --no-daemon :${{ matrix.minecraft }}:build -PreleaseBuild - name: Upload Loader uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: - name: V5-Loader-26.1.2 - path: build/libs/V5-Loader-26.1.2.jar + name: V5-Loader-${{ matrix.minecraft }} + path: versions/${{ matrix.minecraft }}/build/libs/V5-Loader-${{ matrix.minecraft }}.jar if-no-files-found: error publish: needs: build - if: ${{ github.ref == 'refs/heads/26.1.2' }} + if: ${{ github.ref == 'refs/heads/26.1.2' || github.ref == 'refs/heads/26.2' }} runs-on: blacksmith-4vcpu-ubuntu-2404 permissions: contents: write @@ -65,16 +68,16 @@ jobs: - name: Download Loader uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: - name: V5-Loader-26.1.2 + pattern: V5-Loader-* path: build/libs + merge-multiple: true - name: Publish GitHub release env: GH_TOKEN: ${{ github.token }} SHA: ${{ inputs.sha || github.sha }} run: | - version=$(sed -nE 's/^[[:space:]]*const val MOD_VERSION = "([^"]+)".*/\1/p' src/main/kotlin/com/chattriggers/ctjs/CTJS.kt) - test -n "$version" + version=$(./gradlew -q :26.2:printVersion) prefix="${version//./\\.}-r" tag=$(gh api --paginate "repos/$GITHUB_REPOSITORY/releases?per_page=100" --jq ".[] | select(.target_commitish == \"$SHA\") | .tag_name" | sed -nE "s/^${prefix}[0-9]+$/&/p" | head -n1) if [ -z "$tag" ]; then @@ -82,7 +85,7 @@ jobs: tag="${version}-r$(( ${revision:-0} + 1 ))" gh release create "$tag" --target "$SHA" --title "$tag" --generate-notes fi - gh release upload "$tag" build/libs/V5-Loader-26.1.2.jar --clobber + gh release upload "$tag" build/libs/V5-Loader-*.jar --clobber - name: Setup Node uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 @@ -97,6 +100,9 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} run: | - sha256sum build/libs/V5-Loader-26.1.2.jar | awk '{print $1}' > V5-Loader-26.1.2.jar.sha256 - wrangler r2 object put v5-builds/V5-Loader-26.1.2.jar.sha256 --file V5-Loader-26.1.2.jar.sha256 --remote - wrangler r2 object put v5-builds/V5-Loader-26.1.2.jar --file build/libs/V5-Loader-26.1.2.jar --remote + for jar in build/libs/V5-Loader-*.jar; do + name=$(basename "$jar") + sha256sum "$jar" | awk '{print $1}' > "$name.sha256" + wrangler r2 object put "v5-builds/$name.sha256" --file "$name.sha256" --remote + wrangler r2 object put "v5-builds/$name" --file "$jar" --remote + done diff --git a/.gitignore b/.gitignore index bb226010..8994e314 100644 --- a/.gitignore +++ b/.gitignore @@ -41,5 +41,6 @@ replay_*.log *.jfr versions/*/api/ +versions/*/logs/ -grunt-main.jar \ No newline at end of file +grunt-main.jar diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..51db2a3e --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,42 @@ +# Repository Guidelines + +## Coding Style + +You are a lazy senior developer. Lazy means efficient, not careless. The best code is the code never written. + +Before writing any code, stop at the first rung that holds: + +Does this need to be built at all? (YAGNI) +Does it already exist in this codebase? Reuse the helper, util, or pattern that's already here, don't re-write it. +Does the standard library already do this? Use it. +Does a native platform feature cover it? Use it. +Does an already-installed dependency solve it? Use it. +Can this be one line? Make it one line. +Only then: write the minimum code that works. +The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb. + +Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken. + +Rules: + +No abstractions that weren't explicitly requested. +No new dependency if it can be avoided. +No boilerplate nobody asked for. +Deletion over addition. Boring over clever. Fewest files possible. +Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug. +Question complex requests: "Do you actually need X, or does Y cover it?" +Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm. +Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a ponytail: comment naming the ceiling and upgrade path. +Not lazy about: understanding the problem (read it fully and trace the real flow before picking a rung, a small diff you don't understand is just laziness dressed up as efficiency), input validation at trust boundaries, error handling that prevents data loss, security, accessibility, the calibration real hardware needs (the platform is never the spec ideal, a clock drifts, a sensor reads off), anything explicitly requested. Lazy code without its check is unfinished: non-trivial logic leaves ONE runnable check behind, the smallest thing that fails if the logic breaks (an assert-based demo/self-check or one small test file; no frameworks, no fixtures). Trivial one-liners need no test. + +## Build, Test, and Development Process + +- `./gradlew build` — compile all supported Minecraft versions and produces `versions//build/libs/V5-Loader-DEV-.jar`. +- `./gradlew generateTypings` — regenerate `typing-generator/src/main/resources/typings.d.ts` after exported API changes. + +## Testing Guidelines + +Do not implement any testing coverage. +Before finishing, run `./gradlew build` only, do not use any other gradlew commands for confirming build status. +Changes affecting API should run `./gradlew generateTypings`. NEVER manually edit the `typings.d.ts` file EVER. +For native changes, rebuild with CMake for local only; Automated workflows will handle building all natives on push. diff --git a/NativeSrc/CMakeLists.txt b/NativeSrc/CMakeLists.txt index 3a02b9ec..ed0041a8 100644 --- a/NativeSrc/CMakeLists.txt +++ b/NativeSrc/CMakeLists.txt @@ -32,5 +32,5 @@ set_target_properties(V5PathJNI PROPERTIES if (MSVC) target_compile_options(V5PathJNI PRIVATE /O2 /EHsc) else() - target_compile_options(V5PathJNI PRIVATE -O3 -fvisibility=hidden -fvisibility-inlines-hidden) + target_compile_options(V5PathJNI PRIVATE -O3) endif() diff --git a/NativeSrc/src/common.hpp b/NativeSrc/src/common.hpp index d5f46f35..2aad57bb 100644 --- a/NativeSrc/src/common.hpp +++ b/NativeSrc/src/common.hpp @@ -50,40 +50,42 @@ inline uint64_t chunkKey(const int x, const int z) { return (px << 32) | pz; } -struct ActionCosts { - static constexpr double INF_COST = 1e6; - static constexpr double FLY_ONE_BLOCK_TIME = 1.0 / 0.7; - static constexpr double SPRINT_ONE_BLOCK_TIME = 1.0 / 0.2806; - static constexpr double SPRINT_DIAGONAL_TIME = SPRINT_ONE_BLOCK_TIME * 1.4142135623730951; - static constexpr double MOMENTUM_LOSS_PENALTY = 6.0; - static constexpr double JUMP_PENALTY = 2.0; - static constexpr double GAP_JUMP_REWARD_OFFSET = 1.5; - static constexpr double SLAB_ASCENT_TIME = SPRINT_ONE_BLOCK_TIME * 1.1; - static constexpr double WALK_OFF_EDGE_TIME = SPRINT_ONE_BLOCK_TIME * 0.5; - static constexpr double LAND_RECOVERY_TIME = 2.0; - static constexpr double JUMP_UP_ONE_BLOCK_TIME = 28.0 + MOMENTUM_LOSS_PENALTY + SPRINT_ONE_BLOCK_TIME; - - std::array fallTimes{}; +constexpr std::array makeFallTimes() { + std::array fallTimes{}; + float currentDistance = 0.0f; + int tick = 0; + float velocity = 0.0f; - ActionCosts() { - double currentDistance = 0.0; - int tick = 0; - double velocity = 0.0; - - for (int targetDistance = 1; targetDistance <= 256; targetDistance++) { - while (currentDistance < targetDistance) { - velocity = (velocity - 0.08) * 0.98; - currentDistance -= velocity; - tick++; - } - fallTimes[static_cast(targetDistance)] = static_cast(tick); + for (int targetDistance = 1; targetDistance <= 256; targetDistance++) { + while (currentDistance < targetDistance) { + velocity = (velocity - 0.08f) * 0.98f; + currentDistance -= velocity; + tick++; } + fallTimes[static_cast(targetDistance)] = static_cast(tick); } + return fallTimes; +} + +struct ActionCosts { + static constexpr float INF_COST = 1e6f; + static constexpr float FLY_ONE_BLOCK_TIME = 1.0f / 0.7f; + static constexpr float SPRINT_ONE_BLOCK_TIME = 1.0f / 0.2806f; + static constexpr float SPRINT_DIAGONAL_TIME = SPRINT_ONE_BLOCK_TIME * 1.41421356f; + static constexpr float MOMENTUM_LOSS_PENALTY = 6.0f; + static constexpr float JUMP_PENALTY = 2.0f; + static constexpr float GAP_JUMP_REWARD_OFFSET = 1.5f; + static constexpr float SLAB_ASCENT_TIME = SPRINT_ONE_BLOCK_TIME * 1.1f; + static constexpr float WALK_OFF_EDGE_TIME = SPRINT_ONE_BLOCK_TIME * 0.5f; + static constexpr float LAND_RECOVERY_TIME = 2.0f; + static constexpr float JUMP_UP_ONE_BLOCK_TIME = 28.0f + MOMENTUM_LOSS_PENALTY + SPRINT_ONE_BLOCK_TIME; + + inline static constexpr auto FALL_TIMES = makeFallTimes(); - [[nodiscard]] double getFallTime(const int blocks) const { - if (blocks <= 0) return 0.0; - if (blocks >= static_cast(fallTimes.size())) return INF_COST; - return fallTimes[static_cast(blocks)] + LAND_RECOVERY_TIME; + [[nodiscard]] static float getFallTime(const int blocks) { + if (blocks <= 0) return 0.0f; + if (blocks >= static_cast(FALL_TIMES.size())) return INF_COST; + return FALL_TIMES[static_cast(blocks)] + LAND_RECOVERY_TIME; } }; diff --git a/NativeSrc/src/etherwarp_search.cpp b/NativeSrc/src/etherwarp_search.cpp index bb259733..366df99c 100644 --- a/NativeSrc/src/etherwarp_search.cpp +++ b/NativeSrc/src/etherwarp_search.cpp @@ -104,7 +104,7 @@ struct SimplifiedEtherwarpPath { struct SharedState { explicit SharedState(const int reserveTarget) - : heap(nodeF, nodeHeapPos) { + : heap(nodeF, nodeH, nodeG, nodeHeapPos) { nodeX.reserve(static_cast(reserveTarget)); nodeY.reserve(static_cast(reserveTarget)); nodeZ.reserve(static_cast(reserveTarget)); @@ -135,7 +135,7 @@ struct SharedState { std::vector nodePitch; std::vector nodeHeapPos; std::unordered_map coordToNode; - detail::Heap heap; + detail::Heap heap; int iterations = 0; int activeExpanders = 0; diff --git a/NativeSrc/src/jni_bridge.cpp b/NativeSrc/src/jni_bridge.cpp index 1d12f9b8..a1e01d25 100644 --- a/NativeSrc/src/jni_bridge.cpp +++ b/NativeSrc/src/jni_bridge.cpp @@ -36,14 +36,25 @@ std::vector toDoubleVector(JNIEnv* env, jdoubleArray array) { return out; } -std::vector toShortVector(JNIEnv* env, jshortArray array) { +std::vector toLongVector(JNIEnv* env, jlongArray array) { if (array == nullptr) return {}; const jsize len = env->GetArrayLength(array); if (len <= 0) return {}; - std::vector out(static_cast(len)); - env->GetShortArrayRegion(array, 0, len, out.data()); + std::vector out(static_cast(len)); + env->GetLongArrayRegion(array, 0, len, out.data()); + return out; +} + +std::vector toShortVector(JNIEnv* env, jshortArray array) { + if (array == nullptr) return {}; + + const jsize len = env->GetArrayLength(array); + if (len <= 0) return {}; + + std::vector out(static_cast(len)); + env->GetShortArrayRegion(array, 0, len, reinterpret_cast(out.data())); return out; } @@ -154,22 +165,32 @@ std::vector packPoints(const std::vector& points) { return packed; } -std::vector toJIntVector(const std::vector& values) { - std::vector out; - out.reserve(values.size()); - for (const int value : values) { - out.push_back(static_cast(value)); +v5pf::ChunkUpdate makeChunkUpdate( + const int chunkX, + const int chunkZ, + const int minY, + const int maxY, + const uint64_t sectionMask, + const std::vector& sectionFlags +) { + v5pf::ChunkUpdate update; + update.chunkX = chunkX; + update.chunkZ = chunkZ; + update.chunk.minY = minY; + update.chunk.maxY = maxY; + update.chunk.ensureLayout(); + + size_t readOffset = 0; + const int maskedSectionCount = std::min(update.chunk.sectionCount(), 64); + for (int i = 0; i < maskedSectionCount; i++) { + if ((sectionMask & (1ULL << i)) == 0ULL) continue; + if (readOffset + 4096 > sectionFlags.size()) break; + + update.chunk.assignSection(i, sectionFlags.data() + readOffset); + readOffset += 4096; } - return out; -} -std::vector toJFloatVector(const std::vector& values) { - std::vector out; - out.reserve(values.size()); - for (const float value : values) { - out.push_back(static_cast(value)); - } - return out; + return update; } } // namespace @@ -247,16 +268,16 @@ JNIEXPORT void JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_NativePa return; } - const auto* sectionData = flags.empty() ? nullptr : reinterpret_cast(flags.data()); - g_worldState.upsertChunk( + std::vector updates; + updates.push_back(makeChunkUpdate( static_cast(chunkX), static_cast(chunkZ), static_cast(minY), static_cast(maxY), static_cast(sectionMask), - sectionData, - flags.size() - ); + flags + )); + g_worldState.upsertChunks(std::move(updates)); } catch (const std::exception& ex) { throwRuntimeFromException(env, "upsertChunk", ex); } catch (...) { @@ -264,6 +285,90 @@ JNIEXPORT void JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_NativePa } } +JNIEXPORT void JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_NativePathfinderJNI_upsertChunks( + JNIEnv* env, + jclass, + jintArray metadata, + jlongArray sectionMasks, + jobjectArray sectionFlags +) { + try { + const auto flatMetadata = toIntVector(env, metadata); + const auto masks = toLongVector(env, sectionMasks); + if (hasPendingJavaException(env)) { + return; + } + + const size_t chunkCount = masks.size(); + if (sectionFlags == nullptr || flatMetadata.size() != chunkCount * 4 || + static_cast(env->GetArrayLength(sectionFlags)) != chunkCount) { + throwJavaException(env, "java/lang/IllegalArgumentException", "Invalid chunk batch arrays"); + return; + } + + std::vector updates; + updates.reserve(chunkCount); + for (size_t i = 0; i < chunkCount; i++) { + const size_t offset = i * 4; + const jint minY = flatMetadata[offset + 2]; + const jint maxY = flatMetadata[offset + 3]; + if (!isValidHeightRange(minY, maxY)) { + throwJavaException(env, "java/lang/IllegalArgumentException", buildInvalidHeightMessage(minY, maxY)); + return; + } + + auto flagsArray = static_cast(env->GetObjectArrayElement(sectionFlags, static_cast(i))); + if (hasPendingJavaException(env)) { + return; + } + const auto flags = toShortVector(env, flagsArray); + if (flagsArray != nullptr) { + env->DeleteLocalRef(flagsArray); + } + if (hasPendingJavaException(env)) { + return; + } + + updates.push_back(makeChunkUpdate( + flatMetadata[offset], + flatMetadata[offset + 1], + minY, + maxY, + static_cast(masks[i]), + flags + )); + } + + g_worldState.upsertChunks(std::move(updates)); + } catch (const std::exception& ex) { + throwRuntimeFromException(env, "upsertChunks", ex); + } catch (...) { + throwRuntimeUnknown(env, "upsertChunks"); + } +} + +JNIEXPORT void JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_NativePathfinderJNI_removeChunks( + JNIEnv* env, + jclass, + jlongArray chunkKeys +) { + try { + const auto keys = toLongVector(env, chunkKeys); + if (hasPendingJavaException(env)) return; + + std::vector parsed; + parsed.reserve(keys.size()); + for (const jlong key : keys) { + parsed.push_back(static_cast(key)); + } + g_worldState.removeChunks(parsed); + } catch (const std::exception& ex) { + throwRuntimeFromException(env, "removeChunks", ex); + } catch (...) { + throwRuntimeUnknown(env, "removeChunks"); + } +} + JNIEXPORT void JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_NativePathfinderJNI_applyBlockUpdates( JNIEnv* env, jclass, @@ -344,7 +449,7 @@ JNIEXPORT jobject JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_Nativ avoidMetaFlat[base + 2], avoidMetaFlat[base + 3], avoidMetaFlat[base + 4], - avoidPenaltyFlat[i], + static_cast(avoidPenaltyFlat[i]), }); } } @@ -355,8 +460,8 @@ JNIEXPORT jobject JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_Nativ params.goals = goals; params.isFly = isFly == JNI_TRUE; params.maxIterations = static_cast(maxIterations); - params.heuristicWeight = static_cast(heuristicWeight); - params.nonPrimaryStartPenalty = static_cast(nonPrimaryStartPenalty); + params.heuristicWeight = static_cast(heuristicWeight); + params.nonPrimaryStartPenalty = static_cast(nonPrimaryStartPenalty); params.moveOrderOffset = static_cast(moveOrderOffset); params.avoidZones = std::move(avoidZones); @@ -370,9 +475,9 @@ JNIEXPORT jobject JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_Nativ const auto packedPath = packPoints(result->points); const auto packedKeyPath = packPoints(result->keyPoints); - const auto packedPathFlags = toJIntVector(result->pathFlags); - const auto packedKeyNodeFlags = toJIntVector(result->keyNodeFlags); - const auto packedKeyNodeMetrics = toJIntVector(result->keyNodeMetrics); + const std::vector packedPathFlags(result->pathFlags.begin(), result->pathFlags.end()); + const std::vector packedKeyNodeFlags(result->keyNodeFlags.begin(), result->keyNodeFlags.end()); + const std::vector packedKeyNodeMetrics(result->keyNodeMetrics.begin(), result->keyNodeMetrics.end()); jintArray pathArray = env->NewIntArray(static_cast(packedPath.size())); if (pathArray == nullptr) { @@ -515,7 +620,7 @@ JNIEXPORT jobject JNICALL Java_com_chattriggers_ctjs_api_world_pathfinding_Nativ } const auto packedPath = packPoints(result->points); - const auto packedAngles = toJFloatVector(result->angles); + const std::vector packedAngles(result->angles.begin(), result->angles.end()); jintArray pathArray = env->NewIntArray(static_cast(packedPath.size())); if (pathArray == nullptr) { diff --git a/NativeSrc/src/lazy_section_array.hpp b/NativeSrc/src/lazy_section_array.hpp new file mode 100644 index 00000000..ef02bd42 --- /dev/null +++ b/NativeSrc/src/lazy_section_array.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include "common.hpp" + +#include +#include +#include + +namespace v5pf::detail { + +template +class LazySectionArray { + public: + T& at(const int x, const int y, const int z) { + const uint64_t key = coordKey(x >> 4, y >> 4, z >> 4); + const size_t cursorIdx = static_cast((key ^ (key >> 26) ^ (key >> 38)) & 3ULL); + auto& cursor = cursors_[cursorIdx]; + if (cursor.section == nullptr || cursor.key != key) { + auto [it, inserted] = sections_.try_emplace(key); + if (inserted) it->second = std::make_unique
(); + cursor = {key, it->second.get()}; + } + + const size_t index = static_cast(((y & 15) << 8) | ((z & 15) << 4) | (x & 15)); + return (*cursor.section)[index]; + } + + void clear() { + sections_.clear(); + cursors_ = {}; + } + + private: + using Section = std::array; + + struct Cursor { + uint64_t key = 0; + Section* section = nullptr; + }; + + std::unordered_map> sections_; + std::array cursors_{}; +}; + +} // namespace v5pf::detail diff --git a/NativeSrc/src/path_simplifier.cpp b/NativeSrc/src/path_simplifier.cpp index 532a4a15..c3115e2a 100644 --- a/NativeSrc/src/path_simplifier.cpp +++ b/NativeSrc/src/path_simplifier.cpp @@ -106,14 +106,6 @@ std::vector extractKeyPoints( if (canSimplify) { if (isFly) { canSimplify = canFlyDirectly(world, start, end); - } else { - for (int i = from + 1; i < to; i++) { - const Int3& p = points[static_cast(i)]; - if (!isWalkSafeVoxel(world, p.x, p.y, p.z)) { - canSimplify = false; - break; - } - } } } diff --git a/NativeSrc/src/pathfinder.cpp b/NativeSrc/src/pathfinder.cpp index 569b1753..c01bd55c 100644 --- a/NativeSrc/src/pathfinder.cpp +++ b/NativeSrc/src/pathfinder.cpp @@ -1,6 +1,7 @@ #include "pathfinder.hpp" #include "path_annotations.hpp" +#include "lazy_section_array.hpp" #include "path_simplifier.hpp" #include "path_signature.hpp" #include "pathfinder_heap.hpp" @@ -11,10 +12,90 @@ #include #include #include -#include namespace v5pf { +namespace { + +struct NodeIndexEntry { + uint32_t generation = 0; + int index = -1; +}; + +class NodeIndexTable { + public: + void reset() { + if (++generation_ == 0) { + entries_.clear(); + generation_ = 1; + } + } + + std::pair getOrInsert(const int x, const int y, const int z, const int index) { + auto& entry = entries_.at(x, y, z); + if (entry.generation == generation_) return {entry.index, false}; + entry = {generation_, index}; + return {index, true}; + } + + private: + uint32_t generation_ = 0; + detail::LazySectionArray entries_; +}; + +struct SearchWorkspace { + std::vector nodeX; + std::vector nodeY; + std::vector nodeZ; + std::vector nodeG; + std::vector nodeH; + std::vector nodeF; + std::vector nodeAvoidPenalty; + std::vector nodeParent; + std::vector nodeStartIndex; + std::vector nodeHeapPos; + NodeIndexTable coordToNode; + detail::Heap heap; + + SearchWorkspace() + : heap(nodeF, nodeH, nodeG, nodeHeapPos) { + } + + void reset(const size_t reserveSize, const int heapCapacity) { + nodeX.clear(); + nodeY.clear(); + nodeZ.clear(); + nodeG.clear(); + nodeH.clear(); + nodeF.clear(); + nodeAvoidPenalty.clear(); + nodeParent.clear(); + nodeStartIndex.clear(); + nodeHeapPos.clear(); + coordToNode.reset(); + heap.clear(); + + nodeX.reserve(reserveSize); + nodeY.reserve(reserveSize); + nodeZ.reserve(reserveSize); + nodeG.reserve(reserveSize); + nodeH.reserve(reserveSize); + nodeF.reserve(reserveSize); + nodeAvoidPenalty.reserve(reserveSize); + nodeParent.reserve(reserveSize); + nodeStartIndex.reserve(reserveSize); + nodeHeapPos.reserve(reserveSize); + heap.reserve(heapCapacity); + } +}; + +SearchWorkspace& searchWorkspace() { + static thread_local SearchWorkspace workspace; + return workspace; +} + +} // namespace + std::optional findPath( const WorldSnapshot& world, const SearchParams& params, @@ -39,54 +120,49 @@ std::optional findPath( const int reserveTarget = std::clamp(params.maxIterations / 2, 16384, 262144); const size_t reserveSize = static_cast(reserveTarget); - - std::vector nodeX; - std::vector nodeY; - std::vector nodeZ; - std::vector nodeG; - std::vector nodeH; - std::vector nodeF; - std::vector nodeParent; - std::vector nodeStartIndex; - std::vector nodeHeapPos; - - nodeX.reserve(reserveSize); - nodeY.reserve(reserveSize); - nodeZ.reserve(reserveSize); - nodeG.reserve(reserveSize); - nodeH.reserve(reserveSize); - nodeF.reserve(reserveSize); - nodeParent.reserve(reserveSize); - nodeStartIndex.reserve(reserveSize); - nodeHeapPos.reserve(reserveSize); - - std::unordered_map coordToNode; - coordToNode.reserve(reserveSize); + auto& workspace = searchWorkspace(); + workspace.reset(reserveSize, reserveTarget); + auto& nodeX = workspace.nodeX; + auto& nodeY = workspace.nodeY; + auto& nodeZ = workspace.nodeZ; + auto& nodeG = workspace.nodeG; + auto& nodeH = workspace.nodeH; + auto& nodeF = workspace.nodeF; + auto& nodeAvoidPenalty = workspace.nodeAvoidPenalty; + auto& nodeParent = workspace.nodeParent; + auto& nodeStartIndex = workspace.nodeStartIndex; + auto& nodeHeapPos = workspace.nodeHeapPos; + auto& coordToNode = workspace.coordToNode; + auto& heap = workspace.heap; + + const float weight = (std::isfinite(params.heuristicWeight) && params.heuristicWeight > 0.0f) + ? params.heuristicWeight + : 1.0f; + const bool isFly = params.isFly; auto getOrCreateNode = [&](const int x, const int y, const int z) { const int idx = static_cast(nodeX.size()); - const auto [it, inserted] = coordToNode.try_emplace(coordKey(x, y, z), idx); - if (!inserted) return std::pair{it->second, false}; + const auto [nodeIdx, inserted] = coordToNode.getOrInsert(x, y, z, idx); + if (!inserted) return std::pair{nodeIdx, false}; nodeX.push_back(x); nodeY.push_back(y); nodeZ.push_back(z); - nodeG.push_back(std::numeric_limits::infinity()); - nodeH.push_back(runtime.heuristic(x, y, z)); - nodeF.push_back(std::numeric_limits::infinity()); + nodeG.push_back(std::numeric_limits::infinity()); + nodeH.push_back(runtime.heuristic(x, y, z) * weight); + nodeF.push_back(nodeH.back()); + nodeAvoidPenalty.push_back(runtime.transientAvoidPenalty(x, y, z)); nodeParent.push_back(-1); nodeStartIndex.push_back(-1); nodeHeapPos.push_back(-1); return std::pair{idx, true}; }; - detail::Heap heap(nodeF, nodeHeapPos); - heap.reserve(reserveTarget); - - const double weight = (std::isfinite(params.heuristicWeight) && params.heuristicWeight > 0.0) - ? params.heuristicWeight - : 1.0; - const bool isFly = params.isFly; + auto setNodeCost = [&](const int nodeIdx, const float cost) { + const size_t idx = static_cast(nodeIdx); + nodeG[idx] = cost; + nodeF[idx] = cost + nodeH[idx]; + }; std::array walkMovesOrdered = detail::WALK_MOVES; const int walkOffset = params.moveOrderOffset >= 0 ? (params.moveOrderOffset % static_cast(walkMovesOrdered.size())) : 0; @@ -99,15 +175,14 @@ std::optional findPath( for (size_t i = 0; i < params.starts.size(); i++) { const auto& start = params.starts[i]; - const double startPenalty = i == 0 ? 0.0 : std::max(0.0, params.nonPrimaryStartPenalty); + const float startPenalty = i == 0 ? 0.0f : std::max(0.0f, params.nonPrimaryStartPenalty); const int nodeIdx = getOrCreateNode(start.x, start.y, start.z).first; if (startPenalty < nodeG[static_cast(nodeIdx)]) { nodeParent[static_cast(nodeIdx)] = -1; nodeStartIndex[static_cast(nodeIdx)] = static_cast(i); - nodeG[static_cast(nodeIdx)] = startPenalty; - nodeF[static_cast(nodeIdx)] = startPenalty + nodeH[static_cast(nodeIdx)] * weight; + setNodeCost(nodeIdx, startPenalty); } if (nodeHeapPos[static_cast(nodeIdx)] == -1) { @@ -119,7 +194,7 @@ std::optional findPath( int iterations = 0; while (!heap.empty() && iterations < params.maxIterations) { - if (cancelFlag.load()) { + if ((iterations & 63) == 0 && cancelFlag.load(std::memory_order_relaxed)) { return std::nullopt; } @@ -164,31 +239,29 @@ std::optional findPath( return result; } - const double currCost = nodeG[static_cast(currIdx)]; + const float currCost = nodeG[static_cast(currIdx)]; const int currStartIdx = nodeStartIndex[static_cast(currIdx)]; if (isFly) { - const double currFlyProgress = runtime.flyHorizontalProgress(curr.x, curr.y, curr.z); + const float currFlyProgress = runtime.flyHorizontalProgress(curr.x, curr.y, curr.z); for (const auto& move : detail::FLY_MOVES) { detail::MoveOut out; if (!runtime.flyMove(curr, move, currFlyProgress, out)) continue; if (out.cost >= ActionCosts::INF_COST) continue; - const double newCost = currCost + out.cost + runtime.transientAvoidPenalty(out.pos.x, out.pos.y, out.pos.z); const auto [nIdx, inserted] = getOrCreateNode(out.pos.x, out.pos.y, out.pos.z); + const float newCost = currCost + out.cost + nodeAvoidPenalty[static_cast(nIdx)]; if (inserted) { nodeParent[static_cast(nIdx)] = currIdx; nodeStartIndex[static_cast(nIdx)] = currStartIdx; - nodeG[static_cast(nIdx)] = newCost; - nodeF[static_cast(nIdx)] = newCost + nodeH[static_cast(nIdx)] * weight; + setNodeCost(nIdx, newCost); heap.add(nIdx); } else { if (newCost < nodeG[static_cast(nIdx)]) { nodeParent[static_cast(nIdx)] = currIdx; nodeStartIndex[static_cast(nIdx)] = currStartIdx; - nodeG[static_cast(nIdx)] = newCost; - nodeF[static_cast(nIdx)] = newCost + nodeH[static_cast(nIdx)] * weight; + setNodeCost(nIdx, newCost); if (nodeHeapPos[static_cast(nIdx)] != -1) { heap.relocate(nIdx); @@ -206,20 +279,18 @@ std::optional findPath( if (!runtime.walkMove(curr, move, out)) continue; if (out.cost >= ActionCosts::INF_COST) continue; - const double newCost = currCost + out.cost + runtime.transientAvoidPenalty(out.pos.x, out.pos.y, out.pos.z); const auto [nIdx, inserted] = getOrCreateNode(out.pos.x, out.pos.y, out.pos.z); + const float newCost = currCost + out.cost + nodeAvoidPenalty[static_cast(nIdx)]; if (inserted) { nodeParent[static_cast(nIdx)] = currIdx; nodeStartIndex[static_cast(nIdx)] = currStartIdx; - nodeG[static_cast(nIdx)] = newCost; - nodeF[static_cast(nIdx)] = newCost + nodeH[static_cast(nIdx)] * weight; + setNodeCost(nIdx, newCost); heap.add(nIdx); } else { if (newCost < nodeG[static_cast(nIdx)]) { nodeParent[static_cast(nIdx)] = currIdx; nodeStartIndex[static_cast(nIdx)] = currStartIdx; - nodeG[static_cast(nIdx)] = newCost; - nodeF[static_cast(nIdx)] = newCost + nodeH[static_cast(nIdx)] * weight; + setNodeCost(nIdx, newCost); if (nodeHeapPos[static_cast(nIdx)] != -1) { heap.relocate(nIdx); diff --git a/NativeSrc/src/pathfinder.hpp b/NativeSrc/src/pathfinder.hpp index 56145024..f55d3d86 100644 --- a/NativeSrc/src/pathfinder.hpp +++ b/NativeSrc/src/pathfinder.hpp @@ -13,7 +13,7 @@ struct AvoidZone { int z; int radiusSq; int maxYDiff; - double penalty; + float penalty; }; struct SearchParams { @@ -21,8 +21,8 @@ struct SearchParams { std::vector goals; bool isFly = false; int maxIterations = 500000; - double heuristicWeight = 1.05; - double nonPrimaryStartPenalty = 0.0; + float heuristicWeight = 1.05f; + float nonPrimaryStartPenalty = 0.0f; int moveOrderOffset = 0; std::vector avoidZones; }; diff --git a/NativeSrc/src/pathfinder_heap.hpp b/NativeSrc/src/pathfinder_heap.hpp index ba9ebf82..d34780b6 100644 --- a/NativeSrc/src/pathfinder_heap.hpp +++ b/NativeSrc/src/pathfinder_heap.hpp @@ -1,13 +1,19 @@ #pragma once +#include #include namespace v5pf::detail { +template class Heap { public: - explicit Heap(std::vector& fCost, std::vector& heapPos) - : fCost_(fCost), heapPos_(heapPos) { + explicit Heap( + const std::vector& fCost, + const std::vector& hCost, + const std::vector& gCost, + std::vector& heapPos + ) : fCost_(fCost), hCost_(hCost), gCost_(gCost), heapPos_(heapPos) { items_.resize(1); } @@ -15,6 +21,10 @@ class Heap { return size_ == 0; } + void clear() { + size_ = 0; + } + void reserve(const int capacity) { if (capacity <= 0) return; const size_t needed = static_cast(capacity + 1); @@ -65,18 +75,27 @@ class Heap { std::vector items_; int size_ = 0; - std::vector& fCost_; + const std::vector& fCost_; + const std::vector& hCost_; + const std::vector& gCost_; std::vector& heapPos_; + [[nodiscard]] bool less(const int left, const int right) const { + const size_t lhs = static_cast(left); + const size_t rhs = static_cast(right); + if (fCost_[lhs] != fCost_[rhs]) return fCost_[lhs] < fCost_[rhs]; + if (hCost_[lhs] != hCost_[rhs]) return hCost_[lhs] < hCost_[rhs]; + if (gCost_[lhs] != gCost_[rhs]) return gCost_[lhs] > gCost_[rhs]; + return left < right; + } + void siftUp(int pos) { const int node = items_[static_cast(pos)]; - const double cost = fCost_[static_cast(node)]; while (pos > 1) { - const int parent = pos >> 1; + const int parent = (pos - 2) / 4 + 1; const int parentNode = items_[static_cast(parent)]; - const double parentCost = fCost_[static_cast(parentNode)]; - if (cost >= parentCost) break; + if (!less(node, parentNode)) break; items_[static_cast(pos)] = parentNode; heapPos_[static_cast(parentNode)] = pos; @@ -89,26 +108,21 @@ class Heap { void siftDown(int pos) { const int node = items_[static_cast(pos)]; - const double cost = fCost_[static_cast(node)]; - const int half = size_ >> 1; - - while (pos <= half) { - int child = pos << 1; - int childNode = items_[static_cast(child)]; - double childCost = fCost_[static_cast(childNode)]; - - const int right = child + 1; - if (right <= size_) { - const int rightNode = items_[static_cast(right)]; - const double rightCost = fCost_[static_cast(rightNode)]; - if (rightCost < childCost) { - child = right; - childNode = rightNode; - childCost = rightCost; + + while (true) { + const int firstChild = (pos - 1) * 4 + 2; + if (firstChild > size_) break; + + int child = firstChild; + const int lastChild = std::min(firstChild + 3, size_); + for (int candidate = firstChild + 1; candidate <= lastChild; candidate++) { + if (less(items_[static_cast(candidate)], items_[static_cast(child)])) { + child = candidate; } } - if (cost <= childCost) break; + const int childNode = items_[static_cast(child)]; + if (!less(childNode, node)) break; items_[static_cast(pos)] = childNode; heapPos_[static_cast(childNode)] = pos; diff --git a/NativeSrc/src/pathfinder_runtime.hpp b/NativeSrc/src/pathfinder_runtime.hpp index 52090ac9..0a7c4cee 100644 --- a/NativeSrc/src/pathfinder_runtime.hpp +++ b/NativeSrc/src/pathfinder_runtime.hpp @@ -1,17 +1,17 @@ #pragma once +#include "lazy_section_array.hpp" #include "pathfinder.hpp" #include "world_voxel_cursor.hpp" #include -#include namespace v5pf::detail { constexpr int MAX_DIST = 6; constexpr int OPEN_SPACE_SOFT_CAP = MAX_DIST; -inline constexpr std::array EDGE_PENALTIES = { +inline constexpr std::array EDGE_PENALTIES = { 24.0, 19.5, 16.0, @@ -21,7 +21,7 @@ inline constexpr std::array EDGE_PENALTIES = { 0.5, }; -inline constexpr std::array WALL_PENALTIES = { +inline constexpr std::array WALL_PENALTIES = { 17.0, 13.5, 11.0, @@ -56,96 +56,120 @@ inline bool hasFlag(const uint16_t flags, const uint16_t bit) { return (flags & bit) != 0; } +inline bool isPassableFlags(const uint16_t flags) { + return hasFlag(flags, VF_PASSABLE) || hasFlag(flags, VF_CARPET_LIKE); +} + +inline bool isFlyPassableFlags(const uint16_t flags) { + return isPassableFlags(flags) || hasFlag(flags, VF_PASSABLE_FLY); +} + struct MoveOut { Int3 pos{}; - double cost = ActionCosts::INF_COST; + float cost = ActionCosts::INF_COST; }; struct FlyEnvironment { - double groundCost = 0.0; - double horizontalCost = 0.0; - double enclosureCost = 0.0; - bool confined = false; + float groundCost = 0.0f; + float horizontalCost = 0.0f; + float enclosureCost = 0.0f; + uint8_t computed = 0; +}; + +template +struct StampedValue { + uint32_t generation = 0; + T value{}; +}; + +struct VoxelClassifications { uint8_t computed = 0; + uint8_t values = 0; }; +struct RuntimeCache { + std::shared_ptr worldIdentity; + int snapshotMinY = 0; + int snapshotMaxY = 0; + LazySectionArray> classifications; + LazySectionArray> penalties; + LazySectionArray> flyEnvironments; + + void begin(const WorldSnapshot& world) { + const auto identity = world.data != nullptr ? world.data->identity : nullptr; + if (worldIdentity == identity && snapshotMinY == world.minY && snapshotMaxY == world.maxY) return; + worldIdentity = identity; + snapshotMinY = world.minY; + snapshotMaxY = world.maxY; + classifications.clear(); + penalties.clear(); + flyEnvironments.clear(); + } +}; + +inline RuntimeCache& runtimeCache() { + static thread_local RuntimeCache cache; + return cache; +} + class Runtime { public: Runtime(const WorldSnapshot& world, const SearchParams& params); [[nodiscard]] bool isAtGoal(int x, int y, int z) const; - [[nodiscard]] double heuristic(int x, int y, int z) const; - [[nodiscard]] double transientAvoidPenalty(int x, int y, int z) const; - [[nodiscard]] double flyHorizontalProgress(int x, int y, int z) const; + [[nodiscard]] float heuristic(int x, int y, int z) const; + [[nodiscard]] float transientAvoidPenalty(int x, int y, int z) const; + [[nodiscard]] float flyHorizontalProgress(int x, int y, int z) const; [[nodiscard]] bool walkMove(const Int3& current, const Int3& delta, MoveOut& out); [[nodiscard]] bool flyMove(const Int3& current, const Int3& delta, MoveOut& out); - [[nodiscard]] bool flyMove(const Int3& current, const Int3& delta, double progress, MoveOut& out); + [[nodiscard]] bool flyMove(const Int3& current, const Int3& delta, float progress, MoveOut& out); private: const WorldSnapshot& world_; const SearchParams& params_; - ActionCosts costs_{}; mutable WorldVoxelCursor voxelCursor_; - - std::unordered_map safeCache_; - std::unordered_map flyClearCache_; - std::unordered_map flyEnvironmentCache_; - std::unordered_map penaltyCache_; - mutable std::unordered_map avoidPenaltyCache_; - - bool avoidPenaltyCacheEnabled_ = false; - - int walkStartX_ = 0; - int walkStartZ_ = 0; + RuntimeCache& cache_; Int3 startFly_{0, 0, 0}; int flyMinY_ = 0; int flyMaxY_ = 0; [[nodiscard]] uint16_t flagsAt(int x, int y, int z) const; - [[nodiscard]] bool isSolid(int x, int y, int z) const; + [[nodiscard]] uint32_t cacheGenerationAt(int x, int z) const; [[nodiscard]] bool isPassable(int x, int y, int z) const; [[nodiscard]] bool isPassableForFlying(int x, int y, int z) const; - [[nodiscard]] bool isBottomSlab(int x, int y, int z) const; - [[nodiscard]] bool isTopSlab(int x, int y, int z) const; - [[nodiscard]] bool isFenceLike(int x, int y, int z) const; - [[nodiscard]] bool isStairsBottom(int x, int y, int z) const; - [[nodiscard]] bool isBlockingWall(int x, int y, int z) const; - [[nodiscard]] bool isFluid(int x, int y, int z) const; [[nodiscard]] bool isSafe(int x, int y, int z); [[nodiscard]] bool isFlyColumnClear(int x, int y, int z); - [[nodiscard]] double fluidPenalty(int x, int y, int z) const; - - [[nodiscard]] double walkHeuristic(int x, int y, int z) const; - [[nodiscard]] double flyHeuristic(int x, int y, int z) const; + [[nodiscard]] float walkHeuristic(int x, int y, int z) const; + [[nodiscard]] float flyHeuristic(int x, int y, int z) const; [[nodiscard]] const Int3& closestFlyGoal(int x, int y, int z) const; - [[nodiscard]] double calculateProgress(int x, int z, const Int3& goal) const; + [[nodiscard]] float calculateProgress(int x, int z, const Int3& goal) const; [[nodiscard]] int directionMask(int x, int y, int z); [[nodiscard]] bool isStepDirection(int x, int y, int z, int dx, int dz); - [[nodiscard]] bool isStepSurface(int x, int y, int z); [[nodiscard]] bool isEdge(int x, int y, int z); [[nodiscard]] bool isWall(int x, int y, int z); - [[nodiscard]] int scanForEdge(int x, int y, int z, int dx, int dz); - [[nodiscard]] int scanForWall(int x, int y, int z, int dx, int dz); - - [[nodiscard]] int edgeDistance(int x, int y, int z); - [[nodiscard]] int wallDistance(int x, int y, int z); - [[nodiscard]] int edgeDistanceWithMask(int x, int y, int z, int mask); - [[nodiscard]] int wallDistanceWithMask(int x, int y, int z, int mask); - [[nodiscard]] double combinedPenalty(int edgeDist, int wallDist) const; - [[nodiscard]] double pathPenalty(int x, int y, int z); + void directionalDistances(int x, int y, int z, int mask, int& edgeDist, int& wallDist); + [[nodiscard]] float combinedPenalty(int edgeDist, int wallDist) const; + [[nodiscard]] float pathPenalty(int x, int y, int z); [[nodiscard]] bool moveTraverse(const Int3& current, int dx, int dz, MoveOut& out); [[nodiscard]] bool moveDiagonal(const Int3& current, int dx, int dz, MoveOut& out); [[nodiscard]] bool moveAscend(const Int3& current, int dx, int dz, MoveOut& out); [[nodiscard]] bool moveDescend(const Int3& current, int dx, int dz, MoveOut& out); - [[nodiscard]] bool moveFly(const Int3& current, int dx, int dy, int dz, double progress, MoveOut& out); + [[nodiscard]] bool moveFly(const Int3& current, int dx, int dy, int dz, float progress, MoveOut& out); void populateFlyEnvironment(int x, int y, int z, uint8_t needed, FlyEnvironment& environment); + + struct ChunkGenerationCursor { + int chunkX = std::numeric_limits::min(); + int chunkZ = std::numeric_limits::min(); + uint32_t generation = 0; + }; + mutable std::array chunkGenerationCursors_{}; }; } // namespace v5pf::detail diff --git a/NativeSrc/src/pathfinder_runtime_common.inl b/NativeSrc/src/pathfinder_runtime_common.inl index edad3429..60a66ea1 100644 --- a/NativeSrc/src/pathfinder_runtime_common.inl +++ b/NativeSrc/src/pathfinder_runtime_common.inl @@ -10,22 +10,8 @@ inline Runtime::Runtime(const WorldSnapshot& world, const SearchParams& params) : world_(world), params_(params), voxelCursor_(world), - walkStartX_(params.starts.empty() ? 0 : params.starts.front().x), - walkStartZ_(params.starts.empty() ? 0 : params.starts.front().z) { - const int reserveTarget = std::clamp(params_.maxIterations / 2, 4096, 262144); - const size_t cacheReserve = static_cast(reserveTarget); - avoidPenaltyCacheEnabled_ = params_.avoidZones.size() >= 3; - - if (params_.isFly) { - flyClearCache_.reserve(cacheReserve); - flyEnvironmentCache_.reserve(cacheReserve); - } else { - safeCache_.reserve(cacheReserve); - penaltyCache_.reserve(cacheReserve); - } - if (avoidPenaltyCacheEnabled_) { - avoidPenaltyCache_.reserve(cacheReserve); - } + cache_(runtimeCache()) { + cache_.begin(world); flyMinY_ = world_.minY; flyMaxY_ = world_.maxY - 2; @@ -44,37 +30,12 @@ inline bool Runtime::isAtGoal(const int x, const int y, const int z) const { return false; } -inline double Runtime::heuristic(const int x, const int y, const int z) const { +inline float Runtime::heuristic(const int x, const int y, const int z) const { return params_.isFly ? flyHeuristic(x, y, z) : walkHeuristic(x, y, z); } -inline double Runtime::transientAvoidPenalty(const int x, const int y, const int z) const { - if (params_.avoidZones.empty()) return 0.0; - - if (!avoidPenaltyCacheEnabled_) { - double penalty = 0.0; - for (const auto& zone : params_.avoidZones) { - if (std::abs(y - zone.y) > zone.maxYDiff) continue; - - const int dx = x - zone.x; - const int dz = z - zone.z; - const long long distSq = static_cast(dx) * dx + static_cast(dz) * dz; - if (distSq > zone.radiusSq) continue; - - const double normalized = zone.radiusSq <= 1 ? 0.0 : static_cast(distSq) / static_cast(zone.radiusSq); - const double falloff = std::max(0.2, 1.0 - normalized); - penalty += zone.penalty * falloff; - } - return penalty; - } - - const uint64_t key = coordKey(x, y, z); - const auto cached = avoidPenaltyCache_.find(key); - if (cached != avoidPenaltyCache_.end()) { - return cached->second; - } - - double penalty = 0.0; +inline float Runtime::transientAvoidPenalty(const int x, const int y, const int z) const { + float penalty = 0.0f; for (const auto& zone : params_.avoidZones) { if (std::abs(y - zone.y) > zone.maxYDiff) continue; @@ -83,15 +44,14 @@ inline double Runtime::transientAvoidPenalty(const int x, const int y, const int const long long distSq = static_cast(dx) * dx + static_cast(dz) * dz; if (distSq > zone.radiusSq) continue; - const double normalized = zone.radiusSq <= 1 ? 0.0 : static_cast(distSq) / static_cast(zone.radiusSq); - const double falloff = std::max(0.2, 1.0 - normalized); + const float normalized = zone.radiusSq <= 1 ? 0.0f : static_cast(distSq) / static_cast(zone.radiusSq); + const float falloff = std::max(0.2f, 1.0f - normalized); penalty += zone.penalty * falloff; } - avoidPenaltyCache_.emplace(key, penalty); return penalty; } -inline double Runtime::flyHorizontalProgress(const int x, const int y, const int z) const { +inline float Runtime::flyHorizontalProgress(const int x, const int y, const int z) const { return calculateProgress(x, z, closestFlyGoal(x, y, z)); } @@ -115,7 +75,7 @@ inline bool Runtime::flyMove(const Int3& current, const Int3& delta, MoveOut& ou return moveFly(current, delta.x, delta.y, delta.z, calculateProgress(current.x, current.z, goal), out); } -inline bool Runtime::flyMove(const Int3& current, const Int3& delta, const double progress, MoveOut& out) { +inline bool Runtime::flyMove(const Int3& current, const Int3& delta, const float progress, MoveOut& out) { return moveFly(current, delta.x, delta.y, delta.z, progress, out); } @@ -123,91 +83,67 @@ inline uint16_t Runtime::flagsAt(const int x, const int y, const int z) const { return voxelCursor_.getFlags(x, y, z); } -inline bool Runtime::isSolid(const int x, const int y, const int z) const { - return hasFlag(flagsAt(x, y, z), VF_SOLID); +inline uint32_t Runtime::cacheGenerationAt(const int x, const int z) const { + const int chunkX = x >> 4; + const int chunkZ = z >> 4; + const uint32_t hash = static_cast(chunkX) ^ (static_cast(chunkZ) << 1); + auto& cursor = chunkGenerationCursors_[static_cast(hash & 3u)]; + if (cursor.chunkX != chunkX || cursor.chunkZ != chunkZ) { + cursor = {chunkX, chunkZ, world_.cacheGenerationForChunk(chunkX, chunkZ)}; + } + return cursor.generation; } inline bool Runtime::isPassable(const int x, const int y, const int z) const { - const uint16_t flags = flagsAt(x, y, z); - return hasFlag(flags, VF_PASSABLE) || hasFlag(flags, VF_CARPET_LIKE); + return isPassableFlags(flagsAt(x, y, z)); } inline bool Runtime::isPassableForFlying(const int x, const int y, const int z) const { - const uint16_t flags = flagsAt(x, y, z); - return hasFlag(flags, VF_PASSABLE) || hasFlag(flags, VF_PASSABLE_FLY) || hasFlag(flags, VF_CARPET_LIKE); -} - -inline bool Runtime::isBottomSlab(const int x, const int y, const int z) const { - return hasFlag(flagsAt(x, y, z), VF_SLAB_BOTTOM); -} - -inline bool Runtime::isTopSlab(const int x, const int y, const int z) const { - return hasFlag(flagsAt(x, y, z), VF_SLAB_TOP); -} - -inline bool Runtime::isFenceLike(const int x, const int y, const int z) const { - return hasFlag(flagsAt(x, y, z), VF_FENCE_LIKE); -} - -inline bool Runtime::isStairsBottom(const int x, const int y, const int z) const { - return hasFlag(flagsAt(x, y, z), VF_STAIRS_BOTTOM); -} - -inline bool Runtime::isBlockingWall(const int x, const int y, const int z) const { - return hasFlag(flagsAt(x, y, z), VF_BLOCKING_WALL); -} - -inline bool Runtime::isFluid(const int x, const int y, const int z) const { - return hasFlag(flagsAt(x, y, z), VF_FLUID); + return isFlyPassableFlags(flagsAt(x, y, z)); } inline bool Runtime::isSafe(const int x, const int y, const int z) { - const uint64_t key = coordKey(x, y, z); - const auto it = safeCache_.find(key); - if (it != safeCache_.end()) { - return it->second == 1; - } - - const bool safe = isSolid(x, y - 1, z) && - isPassable(x, y, z) && - isPassable(x, y + 1, z); - - safeCache_[key] = safe ? 1 : 0; + constexpr uint8_t bit = 1u << 0; + auto& cached = cache_.classifications.at(x, y, z); + const uint32_t generation = cacheGenerationAt(x, z); + if (cached.generation != generation) cached = {generation, {}}; + if ((cached.value.computed & bit) != 0) return (cached.value.values & bit) != 0; + + const bool safe = hasFlag(flagsAt(x, y - 1, z), VF_SOLID) && + isPassableFlags(flagsAt(x, y, z)) && + isPassableFlags(flagsAt(x, y + 1, z)); + cached.value.computed |= bit; + if (safe) cached.value.values |= bit; return safe; } inline bool Runtime::isFlyColumnClear(const int x, const int y, const int z) { - const uint64_t key = coordKey(x, y, z); - const auto it = flyClearCache_.find(key); - if (it != flyClearCache_.end()) { - return it->second == 1; - } - - const bool clear = isPassableForFlying(x, y, z) && - !isTopSlab(x, y + 1, z) && - isPassableForFlying(x, y + 1, z); - - flyClearCache_[key] = clear ? 1 : 0; + constexpr uint8_t bit = 1u << 3; + auto& cached = cache_.classifications.at(x, y, z); + const uint32_t generation = cacheGenerationAt(x, z); + if (cached.generation != generation) cached = {generation, {}}; + if ((cached.value.computed & bit) != 0) return (cached.value.values & bit) != 0; + + const uint16_t feet = flagsAt(x, y, z); + const uint16_t head = flagsAt(x, y + 1, z); + const bool clear = isFlyPassableFlags(feet) && + !hasFlag(head, VF_SLAB_TOP) && + isFlyPassableFlags(head); + cached.value.computed |= bit; + if (clear) cached.value.values |= bit; return clear; } -inline double Runtime::fluidPenalty(const int x, const int y, const int z) const { - double penalty = 0.0; - if (isFluid(x, y, z)) penalty += 20.0; - if (isFluid(x, y + 1, z)) penalty += 20.0; - return penalty; -} - -inline double Runtime::walkHeuristic(const int x, const int y, const int z) const { - if (params_.goals.empty()) return 0.0; +inline float Runtime::walkHeuristic(const int x, const int y, const int z) const { + if (params_.goals.empty()) return 0.0f; - const double sprintCost = ActionCosts::SPRINT_ONE_BLOCK_TIME; - const double diagonalCost = ActionCosts::SPRINT_DIAGONAL_TIME; - const double fallCostPerBlock = costs_.getFallTime(2) * 0.5; - const double jumpCostPerBlock = ActionCosts::JUMP_UP_ONE_BLOCK_TIME; - const double verticalReluctance = sprintCost * 0.35; + const float sprintCost = ActionCosts::SPRINT_ONE_BLOCK_TIME; + const float diagonalCost = ActionCosts::SPRINT_DIAGONAL_TIME; + const float fallCostPerBlock = ActionCosts::getFallTime(2) * 0.5f; + const float jumpCostPerBlock = ActionCosts::JUMP_UP_ONE_BLOCK_TIME; + const float verticalReluctance = sprintCost * 0.35f; - double best = std::numeric_limits::infinity(); + float best = std::numeric_limits::infinity(); for (const auto& goal : params_.goals) { const long long dx = std::llabs(static_cast(x) - goal.x); const long long dz = std::llabs(static_cast(z) - goal.z); @@ -216,12 +152,12 @@ inline double Runtime::walkHeuristic(const int x, const int y, const int z) cons const long long minHoriz = std::min(dx, dz); const long long maxHoriz = std::max(dx, dz); - double horizontal = static_cast(minHoriz) * diagonalCost + - static_cast(maxHoriz - minHoriz) * sprintCost; + float horizontal = static_cast(minHoriz) * diagonalCost + + static_cast(maxHoriz - minHoriz) * sprintCost; if (dy != 0) { - const double absDy = static_cast(std::llabs(dy)); - horizontal += (dy > 0 ? static_cast(dy) * fallCostPerBlock : absDy * jumpCostPerBlock); + const float absDy = static_cast(std::llabs(dy)); + horizontal += (dy > 0 ? static_cast(dy) * fallCostPerBlock : absDy * jumpCostPerBlock); horizontal += absDy * verticalReluctance; } @@ -230,7 +166,7 @@ inline double Runtime::walkHeuristic(const int x, const int y, const int z) cons } } - return std::isfinite(best) ? best : 0.0; + return std::isfinite(best) ? best : 0.0f; } inline int Runtime::directionMask(const int x, const int y, const int z) { @@ -247,110 +183,110 @@ inline bool Runtime::isStepDirection(const int x, const int y, const int z, cons const int nx = x + dx; const int nz = z + dz; - if (isStepSurface(nx, y, nz) && isSolid(nx, y, nz) && isPassable(nx, y + 1, nz) && isPassable(nx, y + 2, nz)) { + const uint16_t upperSurface = flagsAt(nx, y, nz); + if ((hasFlag(upperSurface, VF_STAIRS_BOTTOM) || hasFlag(upperSurface, VF_SLAB_BOTTOM)) && + hasFlag(upperSurface, VF_SOLID) && + isPassableFlags(flagsAt(nx, y + 1, nz)) && + isPassableFlags(flagsAt(nx, y + 2, nz))) { return true; } - if (isStepSurface(nx, y - 2, nz) && isSolid(nx, y - 2, nz) && isPassable(nx, y - 1, nz) && isPassable(nx, y, nz)) { + const uint16_t lowerSurface = flagsAt(nx, y - 2, nz); + if ((hasFlag(lowerSurface, VF_STAIRS_BOTTOM) || hasFlag(lowerSurface, VF_SLAB_BOTTOM)) && + hasFlag(lowerSurface, VF_SOLID) && + isPassableFlags(flagsAt(nx, y - 1, nz)) && + isPassableFlags(upperSurface)) { return true; } return false; } -inline bool Runtime::isStepSurface(const int x, const int y, const int z) { - return isStairsBottom(x, y, z) || isBottomSlab(x, y, z); -} - inline bool Runtime::isEdge(const int x, const int y, const int z) { - if (isSolid(x, y, z)) return false; - if (isSolid(x, y - 1, z)) return false; - if (isSolid(x, y - 2, z)) return false; - return true; -} + constexpr uint8_t bit = 1u << 1; + auto& cached = cache_.classifications.at(x, y, z); + const uint32_t generation = cacheGenerationAt(x, z); + if (cached.generation != generation) cached = {generation, {}}; + if ((cached.value.computed & bit) != 0) return (cached.value.values & bit) != 0; -inline bool Runtime::isWall(const int x, const int y, const int z) { - if (isBlockingWall(x, y + 1, z)) return true; - - if (isSolid(x, y + 1, z)) { - if (isTopSlab(x, y + 1, z)) return true; - if (isBottomSlab(x, y, z) || isStairsBottom(x, y, z)) return false; - return true; - } - - return isBlockingWall(x, y, z); + const bool edge = !hasFlag(flagsAt(x, y, z), VF_SOLID) && + !hasFlag(flagsAt(x, y - 1, z), VF_SOLID) && + !hasFlag(flagsAt(x, y - 2, z), VF_SOLID); + cached.value.computed |= bit; + if (edge) cached.value.values |= bit; + return edge; } -inline int Runtime::scanForEdge(const int x, const int y, const int z, const int dx, const int dz) { - int cx = x + dx; - int cz = z + dz; - for (int d = 1; d <= MAX_DIST; d++) { - if (isEdge(cx, y, cz)) return d - 1; - cx += dx; - cz += dz; - } - return MAX_DIST; -} - -inline int Runtime::scanForWall(const int x, const int y, const int z, const int dx, const int dz) { - int cx = x + dx; - int cz = z + dz; - for (int d = 1; d <= MAX_DIST; d++) { - if (isWall(cx, y, cz)) return d - 1; - cx += dx; - cz += dz; +inline bool Runtime::isWall(const int x, const int y, const int z) { + constexpr uint8_t bit = 1u << 2; + auto& cached = cache_.classifications.at(x, y, z); + const uint32_t generation = cacheGenerationAt(x, z); + if (cached.generation != generation) cached = {generation, {}}; + if ((cached.value.computed & bit) != 0) return (cached.value.values & bit) != 0; + + const uint16_t head = flagsAt(x, y + 1, z); + bool wall = hasFlag(head, VF_BLOCKING_WALL); + if (!wall && hasFlag(head, VF_SOLID)) { + const uint16_t feet = flagsAt(x, y, z); + wall = hasFlag(head, VF_SLAB_TOP) || + (!hasFlag(feet, VF_SLAB_BOTTOM) && !hasFlag(feet, VF_STAIRS_BOTTOM)); + } else if (!wall) { + wall = hasFlag(flagsAt(x, y, z), VF_BLOCKING_WALL); } - return MAX_DIST; -} -inline int Runtime::edgeDistanceWithMask(const int x, const int y, const int z, const int mask) { - int dist = MAX_DIST; + cached.value.computed |= bit; + if (wall) cached.value.values |= bit; + return wall; +} + +inline void Runtime::directionalDistances( + const int x, + const int y, + const int z, + const int mask, + int& edgeDist, + int& wallDist +) { + edgeDist = MAX_DIST; + wallDist = MAX_DIST; for (int dir = 0; dir < 8; dir++) { if ((mask & (1 << dir)) == 0) continue; - const int d = scanForEdge(x, y, z, DX[static_cast(dir)], DZ[static_cast(dir)]); - if (d < dist) dist = d; - if (dist == 0) break; - } - return dist; -} -inline int Runtime::wallDistanceWithMask(const int x, const int y, const int z, const int mask) { - int dist = MAX_DIST; - for (int dir = 0; dir < 8; dir++) { - if ((mask & (1 << dir)) == 0) continue; - const int d = scanForWall(x, y, z, DX[static_cast(dir)], DZ[static_cast(dir)]); - if (d < dist) dist = d; - if (dist == 0) break; + int rayEdge = MAX_DIST; + int rayWall = MAX_DIST; + int cx = x; + int cz = z; + for (int d = 1; d <= MAX_DIST && (rayEdge == MAX_DIST || rayWall == MAX_DIST); d++) { + cx += DX[static_cast(dir)]; + cz += DZ[static_cast(dir)]; + if (rayEdge == MAX_DIST && isEdge(cx, y, cz)) rayEdge = d - 1; + if (rayWall == MAX_DIST && isWall(cx, y, cz)) rayWall = d - 1; + } + edgeDist = std::min(edgeDist, rayEdge); + wallDist = std::min(wallDist, rayWall); + if (edgeDist == 0 && wallDist == 0) break; } - return dist; -} - -inline int Runtime::edgeDistance(const int x, const int y, const int z) { - return edgeDistanceWithMask(x, y, z, directionMask(x, y, z)); } -inline int Runtime::wallDistance(const int x, const int y, const int z) { - return wallDistanceWithMask(x, y, z, directionMask(x, y, z)); -} - -inline double Runtime::combinedPenalty(const int edgeDist, const int wallDist) const { +inline float Runtime::combinedPenalty(const int edgeDist, const int wallDist) const { const int edgeIdx = std::clamp(edgeDist, 0, OPEN_SPACE_SOFT_CAP); const int wallIdx = std::clamp(wallDist, 0, OPEN_SPACE_SOFT_CAP); return EDGE_PENALTIES[static_cast(edgeIdx)] + WALL_PENALTIES[static_cast(wallIdx)]; } -inline double Runtime::pathPenalty(const int x, const int y, const int z) { - const uint64_t key = coordKey(x, y, z); - const auto cached = penaltyCache_.find(key); - if (cached != penaltyCache_.end()) { - return cached->second; - } +inline float Runtime::pathPenalty(const int x, const int y, const int z) { + auto& cached = cache_.penalties.at(x, y, z); + const uint32_t generation = cacheGenerationAt(x, z); + if (cached.generation == generation) return cached.value; const int mask = directionMask(x, y, z); - const int edgeDist = edgeDistanceWithMask(x, y, z, mask); - const int wallDist = wallDistanceWithMask(x, y, z, mask); - const double value = combinedPenalty(edgeDist, wallDist); - penaltyCache_[key] = value; + int edgeDist; + int wallDist; + directionalDistances(x, y, z, mask, edgeDist, wallDist); + float value = combinedPenalty(edgeDist, wallDist); + if (hasFlag(flagsAt(x, y, z), VF_FLUID)) value += 20.0f; + if (hasFlag(flagsAt(x, y + 1, z), VF_FLUID)) value += 20.0f; + cached = {generation, value}; return value; } diff --git a/NativeSrc/src/pathfinder_runtime_fly.inl b/NativeSrc/src/pathfinder_runtime_fly.inl index 4ab671cd..ea5fa9cd 100644 --- a/NativeSrc/src/pathfinder_runtime_fly.inl +++ b/NativeSrc/src/pathfinder_runtime_fly.inl @@ -5,27 +5,26 @@ namespace v5pf::detail { constexpr uint8_t FLY_ENV_GROUND = 1u << 0; -constexpr uint8_t FLY_ENV_CONFINED = 1u << 1; -constexpr uint8_t FLY_ENV_HORIZONTAL = 1u << 2; -constexpr uint8_t FLY_ENV_ENCLOSURE = 1u << 3; +constexpr uint8_t FLY_ENV_HORIZONTAL = 1u << 1; +constexpr uint8_t FLY_ENV_ENCLOSURE = 1u << 2; -constexpr double groundClearanceCost(const int distance) { - return static_cast(6 - distance) * 2.0; +constexpr float groundClearanceCost(const int distance) { + return static_cast(6 - distance) * 2.0f; } -static_assert(groundClearanceCost(1) == 10.0 && groundClearanceCost(5) == 2.0); +static_assert(groundClearanceCost(1) == 10.0f && groundClearanceCost(5) == 2.0f); -inline double Runtime::flyHeuristic(const int x, const int y, const int z) const { +inline float Runtime::flyHeuristic(const int x, const int y, const int z) const { const auto& goal = closestFlyGoal(x, y, z); - const double dx = static_cast(x) - static_cast(goal.x); - const double dy = static_cast(y) - static_cast(goal.y); - const double dz = static_cast(z) - static_cast(goal.z); - - double h = std::sqrt(dx * dx + dy * dy + dz * dz) * ActionCosts::FLY_ONE_BLOCK_TIME; - const double crossProduct = std::abs( - dx * (static_cast(startFly_.z) - static_cast(goal.z)) - - dz * (static_cast(startFly_.x) - static_cast(goal.x)) + const float dx = static_cast(static_cast(x) - goal.x); + const float dy = static_cast(static_cast(y) - goal.y); + const float dz = static_cast(static_cast(z) - goal.z); + + float h = std::sqrt(dx * dx + dy * dy + dz * dz) * ActionCosts::FLY_ONE_BLOCK_TIME; + const float crossProduct = std::abs( + dx * static_cast(static_cast(startFly_.z) - goal.z) - + dz * static_cast(static_cast(startFly_.x) - goal.x) ); - h += crossProduct * 0.001; + h += crossProduct * 0.001f; return h; } @@ -46,7 +45,7 @@ inline const Int3& Runtime::closestFlyGoal(const int x, const int y, const int z return *best; } -inline double Runtime::calculateProgress(const int x, const int z, const Int3& goal) const { +inline float Runtime::calculateProgress(const int x, const int z, const Int3& goal) const { const long long dxStart = static_cast(x) - startFly_.x; const long long dzStart = static_cast(z) - startFly_.z; const long long dxGoal = static_cast(x) - goal.x; @@ -56,10 +55,10 @@ inline double Runtime::calculateProgress(const int x, const int z, const Int3& g const long long distToGoalSq = dxGoal * dxGoal + dzGoal * dzGoal; const long long totalSq = distFromStartSq + distToGoalSq; - return totalSq > 0 ? static_cast(distFromStartSq) / static_cast(totalSq) : 0.5; + return totalSq > 0 ? static_cast(distFromStartSq) / static_cast(totalSq) : 0.5f; } -inline bool Runtime::moveFly(const Int3& current, const int dx, const int dy, const int dz, const double progress, MoveOut& out) { +inline bool Runtime::moveFly(const Int3& current, const int dx, const int dy, const int dz, const float progress, MoveOut& out) { const int destX = current.x + dx; const int destY = current.y + dy; const int destZ = current.z + dz; @@ -86,30 +85,33 @@ inline bool Runtime::moveFly(const Int3& current, const int dx, const int dy, co } const int axisCount = (dx != 0 ? 1 : 0) + (dy != 0 ? 1 : 0) + (dz != 0 ? 1 : 0); - static constexpr std::array baseDistances = {0.0, 1.0, 1.4142135623730951, 1.7320508075688772}; - double cost = baseDistances[static_cast(axisCount)] * ActionCosts::FLY_ONE_BLOCK_TIME; + static constexpr std::array baseDistances = {0.0f, 1.0f, 1.41421356f, 1.73205081f}; + float cost = baseDistances[static_cast(axisCount)] * ActionCosts::FLY_ONE_BLOCK_TIME; - auto environmentIt = flyEnvironmentCache_.try_emplace(coordKey(destX, destY, destZ)).first; - auto& environment = environmentIt->second; + auto& cachedEnvironment = cache_.flyEnvironments.at(destX, destY, destZ); + const uint32_t generation = cacheGenerationAt(destX, destZ); + if (cachedEnvironment.generation != generation) { + cachedEnvironment = {generation, {}}; + } + auto& environment = cachedEnvironment.value; uint8_t needed = FLY_ENV_GROUND; - if (progress <= 0.92) needed |= FLY_ENV_CONFINED; - if (progress <= 0.88) needed |= FLY_ENV_HORIZONTAL; - if (progress <= 0.94) needed |= FLY_ENV_ENCLOSURE; + if (progress <= 0.88f) needed |= FLY_ENV_HORIZONTAL; + if (progress <= 0.94f) needed |= FLY_ENV_ENCLOSURE; populateFlyEnvironment(destX, destY, destZ, needed, environment); if (dy != 0) { - cost += (diagonalHorizontal || dx != 0 || dz != 0) ? 0.2 : 1.2; + cost += (diagonalHorizontal || dx != 0 || dz != 0) ? 0.2f : 1.2f; } cost += environment.groundCost; - if (progress <= 0.88) { - const double scale = progress > 0.84 ? 0.45 : (progress > 0.72 ? 0.7 : 1.0); + if (progress <= 0.88f) { + const float scale = progress > 0.84f ? 0.45f : (progress > 0.72f ? 0.7f : 1.0f); cost += environment.horizontalCost * scale; } - if (progress <= 0.94) { - const double scale = progress > 0.84 ? 0.5 : (progress > 0.72 ? 0.75 : 1.0); + if (progress <= 0.94f) { + const float scale = progress > 0.84f ? 0.5f : (progress > 0.72f ? 0.75f : 1.0f); cost += environment.enclosureCost * scale; } @@ -138,16 +140,12 @@ inline void Runtime::populateFlyEnvironment( environment.computed |= FLY_ENV_GROUND; } - const bool needConfined = (missing & FLY_ENV_CONFINED) != 0; const bool needHorizontal = (missing & FLY_ENV_HORIZONTAL) != 0; const bool needEnclosure = (missing & FLY_ENV_ENCLOSURE) != 0; - if (!needConfined && !needHorizontal && !needEnclosure) return; + if (!needHorizontal && !needEnclosure) return; - const bool ceilingClear = isPassableForFlying(x, y + 2, z); - const bool scanExtended = needHorizontal || (needConfined && ceilingClear); - const int scanDistance = scanExtended ? 5 : 1; + const int scanDistance = needHorizontal ? 5 : 1; int minClearance = 5; - int blockedCardinals = 0; int blockedImmediate = 0; for (int i = 0; i < 4; i++) { int nx = x; @@ -157,50 +155,43 @@ inline void Runtime::populateFlyEnvironment( nz += DZ[static_cast(i)]; if (!isFlyColumnClear(nx, y, nz)) { minClearance = std::min(minClearance, d - 1); - blockedCardinals++; if (d == 1) blockedImmediate++; break; } } } - if (needConfined) { - environment.confined = !ceilingClear || - blockedCardinals >= 3 || - (blockedCardinals >= 2 && minClearance <= 1); - environment.computed |= FLY_ENV_CONFINED; - } - if (needHorizontal) { - double diagonalTouchPenalty = 0.0; + float diagonalTouchPenalty = 0.0f; if (minClearance > 0) { for (int i = 4; i < 8; i++) { if (!isFlyColumnClear(x + DX[static_cast(i)], y, z + DZ[static_cast(i)])) { - diagonalTouchPenalty += 3.5; + diagonalTouchPenalty += 3.5f; } } } switch (minClearance) { - case 0: environment.horizontalCost = 16.0; break; - case 1: environment.horizontalCost = 9.0; break; - case 2: environment.horizontalCost = 4.0; break; - case 3: environment.horizontalCost = 1.5; break; - default: environment.horizontalCost = 0.0; break; + case 0: environment.horizontalCost = 16.0f; break; + case 1: environment.horizontalCost = 9.0f; break; + case 2: environment.horizontalCost = 4.0f; break; + case 3: environment.horizontalCost = 1.5f; break; + default: environment.horizontalCost = 0.0f; break; } environment.horizontalCost += diagonalTouchPenalty; environment.computed |= FLY_ENV_HORIZONTAL; } if (needEnclosure) { + const bool ceilingClear = isPassableForFlying(x, y + 2, z); if (!ceilingClear) { - environment.enclosureCost = 10.0; + environment.enclosureCost = 10.0f; } else if (!isPassableForFlying(x, y + 3, z)) { - environment.enclosureCost = 4.0; + environment.enclosureCost = 4.0f; } - environment.enclosureCost += static_cast(blockedImmediate) * 2.2; - if (blockedImmediate >= 3) environment.enclosureCost += 7.5; - if (blockedImmediate == 4) environment.enclosureCost += 12.0; + environment.enclosureCost += static_cast(blockedImmediate) * 2.2f; + if (blockedImmediate >= 3) environment.enclosureCost += 7.5f; + if (blockedImmediate == 4) environment.enclosureCost += 12.0f; environment.computed |= FLY_ENV_ENCLOSURE; } } diff --git a/NativeSrc/src/pathfinder_runtime_walk.inl b/NativeSrc/src/pathfinder_runtime_walk.inl index 0b288861..f941b6be 100644 --- a/NativeSrc/src/pathfinder_runtime_walk.inl +++ b/NativeSrc/src/pathfinder_runtime_walk.inl @@ -9,8 +9,7 @@ inline bool Runtime::moveTraverse(const Int3& current, const int dx, const int d out.pos = {destX, current.y, destZ}; out.cost = ActionCosts::SPRINT_ONE_BLOCK_TIME + - pathPenalty(destX, current.y, destZ) + - fluidPenalty(destX, current.y, destZ); + pathPenalty(destX, current.y, destZ); return true; } @@ -18,17 +17,15 @@ inline bool Runtime::moveDiagonal(const Int3& current, const int dx, const int d const int destX = current.x + dx; const int destZ = current.z + dz; - if (!isSafe(destX, current.y, destZ)) return false; - if (!isPassable(destX, current.y, current.z)) return false; if (!isPassable(current.x, current.y, destZ)) return false; if (!isPassable(destX, current.y + 1, current.z)) return false; if (!isPassable(current.x, current.y + 1, destZ)) return false; + if (!isSafe(destX, current.y, destZ)) return false; out.pos = {destX, current.y, destZ}; out.cost = ActionCosts::SPRINT_DIAGONAL_TIME + - pathPenalty(destX, current.y, destZ) + - fluidPenalty(destX, current.y, destZ); + pathPenalty(destX, current.y, destZ); return true; } @@ -36,31 +33,30 @@ inline bool Runtime::moveAscend(const Int3& current, const int dx, const int dz, const int destX = current.x + dx; const int destZ = current.z + dz; - if (!isPassable(current.x, current.y + 2, current.z)) return false; + if (!isPassableFlags(flagsAt(current.x, current.y + 2, current.z))) return false; - if (!isSolid(destX, current.y, destZ)) return false; - if (isFenceLike(destX, current.y, destZ)) return false; + const uint16_t destSupport = flagsAt(destX, current.y, destZ); + if (!hasFlag(destSupport, VF_SOLID) || hasFlag(destSupport, VF_FENCE_LIKE)) return false; + if (!isPassableFlags(flagsAt(destX, current.y + 1, destZ))) return false; + if (!isPassableFlags(flagsAt(destX, current.y + 2, destZ))) return false; - if (!isPassable(destX, current.y + 1, destZ)) return false; - if (!isPassable(destX, current.y + 2, destZ)) return false; - - const bool srcBottom = isBottomSlab(current.x, current.y - 1, current.z); - const bool destBottom = isBottomSlab(destX, current.y, destZ); + const uint16_t srcSupport = flagsAt(current.x, current.y - 1, current.z); + const bool srcBottom = hasFlag(srcSupport, VF_SLAB_BOTTOM); + const bool destBottom = hasFlag(destSupport, VF_SLAB_BOTTOM); if (srcBottom && !destBottom) return false; - const bool srcStair = isStairsBottom(current.x, current.y - 1, current.z); - const bool destStair = isStairsBottom(destX, current.y, destZ); + const bool srcStair = hasFlag(srcSupport, VF_STAIRS_BOTTOM); + const bool destStair = hasFlag(destSupport, VF_STAIRS_BOTTOM); out.pos = {destX, current.y + 1, destZ}; - double baseCost = ActionCosts::JUMP_UP_ONE_BLOCK_TIME; + float baseCost = ActionCosts::JUMP_UP_ONE_BLOCK_TIME; if (destBottom || srcStair || destStair) { baseCost = ActionCosts::SLAB_ASCENT_TIME; } out.cost = baseCost + - pathPenalty(destX, current.y + 1, destZ) + - fluidPenalty(destX, current.y + 1, destZ); + pathPenalty(destX, current.y + 1, destZ); return true; } @@ -77,25 +73,23 @@ inline bool Runtime::moveDescend(const Int3& current, const int dx, const int dz for (int dropBlocks = 1; dropBlocks <= maxFallHeight; dropBlocks++) { const int floorY = current.y - dropBlocks - 1; - if (isPassable(destX, floorY, destZ)) { + const uint16_t floorFlags = flagsAt(destX, floorY, destZ); + if (isPassableFlags(floorFlags)) { continue; } - if (!isSolid(destX, floorY, destZ)) { + if (!hasFlag(floorFlags, VF_SOLID)) { return false; } const int destY = floorY + 1; - if (!isPassable(destX, destY, destZ)) return false; - if (!isPassable(destX, destY + 1, destZ)) return false; - - double totalCost = ActionCosts::WALK_OFF_EDGE_TIME + costs_.getFallTime(dropBlocks); + float totalCost = ActionCosts::WALK_OFF_EDGE_TIME + ActionCosts::getFallTime(dropBlocks); if (dropBlocks > 3) { const int excess = dropBlocks - 3; - totalCost += static_cast(excess * excess) * 2.0; + totalCost += static_cast(excess * excess) * 2.0f; } - totalCost += pathPenalty(destX, destY, destZ) + fluidPenalty(destX, destY, destZ); + totalCost += pathPenalty(destX, destY, destZ); out.pos = {destX, destY, destZ}; out.cost = totalCost; diff --git a/NativeSrc/src/world_state.cpp b/NativeSrc/src/world_state.cpp index 7a3370cc..2404b398 100644 --- a/NativeSrc/src/world_state.cpp +++ b/NativeSrc/src/world_state.cpp @@ -3,6 +3,7 @@ #include #include #include +#include namespace v5pf { @@ -19,6 +20,35 @@ constexpr int64_t kMaxAllowedWorldSpan = 4096; static_cast(maxY) - static_cast(minY) <= kMaxAllowedWorldSpan; } +[[nodiscard]] bool chunksEqual(const ChunkData& left, const ChunkData& right) { + return left.minY == right.minY && + left.maxY == right.maxY && + left.sectionOffsets == right.sectionOffsets && + left.voxels == right.voxels; +} + +void invalidateChunkNeighborhood( + WorldData& world, + const int chunkX, + const int chunkZ, + const uint32_t generation +) { + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + world.chunkCacheGenerations[chunkKey(chunkX + dx, chunkZ + dz)] = generation; + } + } +} + +uint32_t nextCacheGeneration(WorldData& world) { + if (++world.latestCacheGeneration == 0) { + world.identity = std::make_shared(); + world.latestCacheGeneration = 1; + world.chunkCacheGenerations.clear(); + } + return world.latestCacheGeneration; +} + } // namespace void ChunkData::ensureLayout() { @@ -138,6 +168,12 @@ uint16_t WorldSnapshot::getFlags(const int x, const int y, const int z) const { return it->second->getFlags(x & 15, y, z & 15); } +uint32_t WorldSnapshot::cacheGenerationForChunk(const int chunkX, const int chunkZ) const { + if (data == nullptr) return 1; + const auto it = data->chunkCacheGenerations.find(chunkKey(chunkX, chunkZ)); + return it == data->chunkCacheGenerations.end() ? 1 : it->second; +} + void WorldState::setWorld(std::string worldKey, const int minY, const int maxY) { if (!isValidWorldBounds(minY, maxY)) { return; @@ -155,48 +191,67 @@ void WorldState::clear() { std::lock_guard lock(mutex_); auto next = std::make_shared(*data_); next->chunks.clear(); + next->identity = std::make_shared(); + next->latestCacheGeneration = 1; + next->chunkCacheGenerations.clear(); data_ = std::move(next); } -void WorldState::upsertChunk( - const int chunkX, - const int chunkZ, - const int minY, - const int maxY, - const uint64_t sectionMask, - const uint16_t* sectionFlags, - const size_t sectionFlagCount -) { - if (!isValidWorldBounds(minY, maxY)) { +void WorldState::upsertChunks(std::vector updates) { + if (updates.empty()) { return; } - ChunkData chunk; - chunk.minY = minY; - chunk.maxY = maxY; - chunk.ensureLayout(); - - const int sectionCount = chunk.sectionCount(); - size_t readOffset = 0; + std::lock_guard lock(mutex_); + auto next = std::make_shared(*data_); + std::unordered_set changedChunks; + changedChunks.reserve(updates.size()); - const int maskedSectionCount = std::min(sectionCount, 64); - for (int i = 0; i < maskedSectionCount; i++) { - const bool hasSection = (sectionMask & (1ULL << i)) != 0ULL; - if (!hasSection) continue; + for (auto& update : updates) { + ChunkData& chunk = update.chunk; + if (!isValidWorldBounds(chunk.minY, chunk.maxY)) { + continue; + } - if (sectionFlags == nullptr || readOffset + 4096 > sectionFlagCount) { - break; + const auto key = chunkKey(update.chunkX, update.chunkZ); + const auto existing = next->chunks.find(key); + if (next->minY == chunk.minY && next->maxY == chunk.maxY && + existing != next->chunks.end() && existing->second != nullptr && + chunksEqual(*existing->second, chunk)) { + continue; } - chunk.assignSection(i, sectionFlags + readOffset); - readOffset += 4096; + next->minY = chunk.minY; + next->maxY = chunk.maxY; + next->chunks[key] = std::make_shared(std::move(chunk)); + changedChunks.insert(key); } + if (changedChunks.empty()) return; + + const uint32_t generation = nextCacheGeneration(*next); + for (const uint64_t key : changedChunks) { + const int chunkX = static_cast(static_cast(key >> 32)); + const int chunkZ = static_cast(static_cast(key)); + invalidateChunkNeighborhood(*next, chunkX, chunkZ, generation); + } + data_ = std::move(next); +} + +void WorldState::removeChunks(const std::vector& chunkKeys) { + if (chunkKeys.empty()) return; + std::lock_guard lock(mutex_); auto next = std::make_shared(*data_); - next->minY = minY; - next->maxY = maxY; - next->chunks[chunkKey(chunkX, chunkZ)] = std::make_shared(std::move(chunk)); + bool changed = false; + for (const uint64_t key : chunkKeys) { + changed |= next->chunks.erase(key) != 0; + } + if (!changed) return; + + next->identity = std::make_shared(); + next->latestCacheGeneration = 1; + next->chunkCacheGenerations.clear(); data_ = std::move(next); } @@ -208,7 +263,9 @@ void WorldState::applyUpdates(const std::vector& updates) { std::lock_guard lock(mutex_); auto next = std::make_shared(*data_); std::unordered_map> mutableChunks; + std::unordered_set changedChunks; mutableChunks.reserve(updates.size()); + changedChunks.reserve(updates.size()); for (const auto& update : updates) { const int chunkX = update.x >> 4; @@ -218,6 +275,10 @@ void WorldState::applyUpdates(const std::vector& updates) { if (it == next->chunks.end() || it->second == nullptr) { continue; } + if (update.y < it->second->minY || update.y >= it->second->maxY || + it->second->getFlags(update.x & 15, update.y, update.z & 15) == update.flags) { + continue; + } std::shared_ptr chunk; const auto mutableIt = mutableChunks.find(key); @@ -230,8 +291,17 @@ void WorldState::applyUpdates(const std::vector& updates) { } chunk->setFlags(update.x & 15, update.y, update.z & 15, update.flags); + changedChunks.insert(key); } + if (changedChunks.empty()) return; + + const uint32_t generation = nextCacheGeneration(*next); + for (const uint64_t key : changedChunks) { + const int chunkX = static_cast(static_cast(key >> 32)); + const int chunkZ = static_cast(static_cast(key)); + invalidateChunkNeighborhood(*next, chunkX, chunkZ, generation); + } data_ = std::move(next); } diff --git a/NativeSrc/src/world_state.hpp b/NativeSrc/src/world_state.hpp index f8727392..1af2841c 100644 --- a/NativeSrc/src/world_state.hpp +++ b/NativeSrc/src/world_state.hpp @@ -46,14 +46,25 @@ struct ChunkData { void setFlags(int localX, int y, int localZ, uint16_t flags); }; +struct ChunkUpdate { + int chunkX; + int chunkZ; + ChunkData chunk; +}; + using SharedChunkData = std::shared_ptr; using ChunkMap = std::unordered_map; +struct WorldIdentity {}; + struct WorldData { std::string worldKey = "runtime_memory"; int minY = -64; int maxY = 320; // exclusive ChunkMap chunks; + std::shared_ptr identity = std::make_shared(); + uint32_t latestCacheGeneration = 1; + std::unordered_map chunkCacheGenerations; }; struct WorldSnapshot { @@ -64,6 +75,7 @@ struct WorldSnapshot { [[nodiscard]] const ChunkMap& chunks() const; [[nodiscard]] uint16_t getFlags(int x, int y, int z) const; + [[nodiscard]] uint32_t cacheGenerationForChunk(int chunkX, int chunkZ) const; }; class WorldState { @@ -71,15 +83,8 @@ class WorldState { void setWorld(std::string worldKey, int minY, int maxY); void clear(); - void upsertChunk( - int chunkX, - int chunkZ, - int minY, - int maxY, - uint64_t sectionMask, - const uint16_t* sectionFlags, - size_t sectionFlagCount - ); + void upsertChunks(std::vector updates); + void removeChunks(const std::vector& chunkKeys); void applyUpdates(const std::vector& updates); diff --git a/NativeSrc/src/world_voxel_cursor.hpp b/NativeSrc/src/world_voxel_cursor.hpp index 7245c21f..4ce50465 100644 --- a/NativeSrc/src/world_voxel_cursor.hpp +++ b/NativeSrc/src/world_voxel_cursor.hpp @@ -2,6 +2,8 @@ #include "world_state.hpp" +#include +#include #include namespace v5pf { @@ -19,51 +21,52 @@ class WorldVoxelCursor { const int chunkX = x >> 4; const int chunkZ = z >> 4; - if (chunkX != cachedChunkX_ || chunkZ != cachedChunkZ_) { - cachedChunkX_ = chunkX; - cachedChunkZ_ = chunkZ; - cachedChunk_ = nullptr; - cachedSectionIdx_ = std::numeric_limits::min(); - cachedSection_ = nullptr; + const int sectionY = (y - world_.minY) >> 4; + const uint32_t cursorHash = static_cast(chunkX) ^ + (static_cast(chunkZ) << 1) ^ static_cast(sectionY); + auto& entry = entries_[static_cast(cursorHash & 3u)]; + if (chunkX != entry.chunkX || chunkZ != entry.chunkZ || y < entry.sectionMinY || y >= entry.sectionMaxY) { + entry = {}; + entry.chunkX = chunkX; + entry.chunkZ = chunkZ; const auto& chunks = world_.chunks(); const auto it = chunks.find(chunkKey(chunkX, chunkZ)); if (it == chunks.end() || it->second == nullptr) { - return VF_SOLID | VF_BLOCKING_WALL; + entry.sectionMinY = world_.minY; + entry.sectionMaxY = world_.maxY; + entry.fallback = VF_SOLID | VF_BLOCKING_WALL; + return entry.fallback; } - cachedChunk_ = it->second.get(); + const ChunkData* chunk = it->second.get(); + if (y < chunk->minY || y >= chunk->maxY) return VF_AIR_DEFAULT; + const int sectionIdx = (y - chunk->minY) >> 4; + entry.sectionMinY = chunk->minY + (sectionIdx << 4); + entry.sectionMaxY = std::min(entry.sectionMinY + 16, chunk->maxY); + entry.section = chunk->sectionData(sectionIdx); } - if (cachedChunk_ == nullptr) { - return VF_SOLID | VF_BLOCKING_WALL; - } - - if (y < cachedChunk_->minY || y >= cachedChunk_->maxY) { - return VF_AIR_DEFAULT; - } - - const int sectionIdx = (y - cachedChunk_->minY) >> 4; - if (sectionIdx != cachedSectionIdx_) { - cachedSectionIdx_ = sectionIdx; - cachedSection_ = cachedChunk_->sectionData(sectionIdx); - } - - if (cachedSection_ == nullptr) { - return VF_AIR_DEFAULT; + if (entry.section == nullptr) { + return entry.fallback; } const int index = ((y & 15) << 8) | ((z & 15) << 4) | (x & 15); - return cachedSection_[static_cast(index)]; + return entry.section[static_cast(index)]; } private: + struct Entry { + int chunkX = std::numeric_limits::min(); + int chunkZ = std::numeric_limits::min(); + int sectionMinY = std::numeric_limits::max(); + int sectionMaxY = std::numeric_limits::min(); + const uint16_t* section = nullptr; + uint16_t fallback = VF_AIR_DEFAULT; + }; + const WorldSnapshot& world_; - mutable int cachedChunkX_ = std::numeric_limits::min(); - mutable int cachedChunkZ_ = std::numeric_limits::min(); - mutable const ChunkData* cachedChunk_ = nullptr; - mutable int cachedSectionIdx_ = std::numeric_limits::min(); - mutable const uint16_t* cachedSection_ = nullptr; + mutable std::array entries_{}; }; } // namespace v5pf diff --git a/README.md b/README.md index 1a8354c9..b78977a8 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ For production release commits, CI builds all platforms in parallel and commits ### Quick dev commands -Each command compiles required native C++ code, then builds the final Kotlin mod. The output can be found at `build/libs/V5-Loader-DEV.jar`. +Each command compiles required native C++ code, then builds the final Kotlin mod. The output can be found at `versions//build/libs/V5-Loader-DEV-.jar`. - **Linux:** @@ -76,4 +76,4 @@ cmake -S NativeSrc -B NativeSrc/build -DCMAKE_BUILD_TYPE=Release; cmake --build ### Install built mod -After building, copy `build/libs/V5-Loader-DEV.jar` into `.minecraft/mods/`. +After building, copy the relevant `versions//build/libs/V5-Loader-DEV-.jar` into `.minecraft/mods/`. diff --git a/build.gradle.kts b/build.gradle.kts index 0cf6c451..81f49c28 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,16 +1,12 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.apache.tools.ant.filters.ReplaceTokens plugins { alias(libs.plugins.kotlin) alias(libs.plugins.serialization) alias(libs.plugins.ksp) alias(libs.plugins.loom) - id("io.github.izhangzhihao.unmeta") version "1.0.3" -} - -unmeta { - enable.set(true) } version = property("mod_version").toString() @@ -25,16 +21,19 @@ repositories { maven("https://repo.hypixel.net/repository/Hypixel/") maven("https://api.modrinth.com/maven") } +val minecraftVersion = sc.current.version +val fabricApiVersion: String = sc.properties["deps.fabric_api"] +val universalcraftMinecraftVersion = if (minecraftVersion == "26.1.2") "26.1" else minecraftVersion dependencies { - // To change the versions see the gradle/libs.versions.toml - minecraft(libs.minecraft) + // Minecraft-specific versions live in stonecutter.properties.toml. + minecraft("com.mojang:minecraft:$minecraftVersion") implementation(libs.fabric.loader) - implementation(libs.fabric.api) + implementation("net.fabricmc.fabric-api:fabric-api:$fabricApiVersion") implementation(libs.fabric.kotlin) implementation(libs.bundles.included) { include(this) } - implementation(libs.universalcraft) { + implementation("gg.essential:universalcraft-$universalcraftMinecraftVersion-fabric:${libs.versions.universalcraft.get()}") { include(this) exclude("gg.essential", "universalcraft-1.18.1-fabric") } @@ -50,13 +49,8 @@ dependencies { implementation("meteordevelopment:discord-ipc:1.1") include("meteordevelopment:discord-ipc:1.1") - // NanoVG (with natives) - implementation(libs.lwjgl.nanovg) { include(this) } - listOf("windows", "linux", "macos", "macos-arm64").forEach { - implementation(variantOf(libs.lwjgl.nanovg) { classifier("natives-$it") }) { - include(this) - } - } + implementation(libs.skija.shared) { include(this) } + implementation(libs.skija.types) { include(this) } // Mixin Extras implementation(libs.mixinextras) { include(this) } @@ -72,7 +66,7 @@ dependencies { } loom { - accessWidenerPath.set(file("src/main/resources/ctjs.accesswidener")) + accessWidenerPath.set(rootProject.file("src/main/resources/ctjs.accesswidener")) } base { @@ -84,19 +78,28 @@ java { toolchain { languageVersion.set(JavaLanguageVersion.of(25)) } - - sourceCompatibility = JavaVersion.VERSION_25 - targetCompatibility = JavaVersion.VERSION_25 } tasks { + register("printVersion") { + doLast { println(project.version) } + } + processResources { - val mcVersion = libs.versions.minecraft.get() + val mcVersion = minecraftVersion val flkVersion = libs.versions.fabric.kotlin.get() - val fapiVersion = libs.versions.fabric.api.get() + val fapiVersion = fabricApiVersion val loaderVersion = libs.versions.loader.get() + val versionMixins = if (minecraftVersion == "26.1.2") { + listOf("GuiHudMixin", "GuiScreenMixin", "LevelRendererMixin") + } else { + listOf( + "CommandEncoderMixin", "GpuDeviceMixin", "GuiHudMixin", "GameRendererAccessor", + "GuiScreenMixin", "LevelRendererMixin", "VulkanCommandEncoderMixin", "VulkanDeviceMixin", + ) + } - from("typing-generator/src/main/resources") { + from(rootProject.file("typing-generator/src/main/resources")) { include("provided-types.properties") } @@ -105,6 +108,7 @@ tasks { inputs.property("fabric_kotlin_version", flkVersion) inputs.property("fabric_api_version", fapiVersion) inputs.property("loader_version", loaderVersion) + inputs.property("version_mixins", versionMixins.joinToString(",")) filesMatching("fabric.mod.json") { expand( @@ -115,6 +119,13 @@ tasks { "loader_version" to loaderVersion ) } + + filesMatching("ctjs.mixins.json") { + filter("tokens" to mapOf( + "version_mixins" to versionMixins.joinToString("\",\n \"") + )) + } + } withType().configureEach { @@ -130,7 +141,7 @@ tasks { } jar { - archiveFileName.set(if (providers.gradleProperty("releaseBuild").isPresent) "V5-Loader-26.1.2.jar" else "V5-Loader-DEV.jar") + archiveFileName.set(if (providers.gradleProperty("releaseBuild").isPresent) "V5-Loader-$minecraftVersion.jar" else "V5-Loader-DEV-$minecraftVersion.jar") exclude("typings.d.ts") } @@ -141,6 +152,6 @@ tasks { from(layout.buildDirectory.dir("generated/ksp/main/resources")) { include("typings.d.ts") } - into(layout.projectDirectory.dir("typing-generator/src/main/resources")) + into(rootProject.layout.projectDirectory.dir("typing-generator/src/main/resources")) } } diff --git a/gradle.properties b/gradle.properties index 67e53a9a..bd4551bd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,5 +4,5 @@ org.gradle.parallel=true org.gradle.caching=true # Mod Properties -mod_version = 1.0.0 +mod_version = 5.2.0 archives_base_name = ctjs diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e8e7d181..9c7e422e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,10 +1,8 @@ [versions] # Library versions -minecraft = "26.1.2" -lwjgl = "3.4.1" +skija = "0.143.11" loader = "0.19.3" -fabric-api = "0.153.0+26.1.2" fabric-kotlin = "1.13.9+kotlin.2.3.10" sponge-mixin = "0.17.3+mixin.0.8.7" mixinextras = "0.5.4" @@ -20,24 +18,21 @@ hypixel-modrinth-api = "1.0.2+build.1+mc26.1" # Plugin Versions kotlin = "2.3.10" -loom = "1.17-SNAPSHOT" +loom = "1.18.0-alpha.16" ksp = "2.3.9" [libraries] -minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } - fabric-loader = { module = "net.fabricmc:fabric-loader", version.ref = "loader" } -fabric-api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabric-api" } fabric-kotlin = { module = "net.fabricmc:fabric-language-kotlin", version.ref = "fabric-kotlin" } sponge-mixin = { module = "net.fabricmc:sponge-mixin", version.ref = "sponge-mixin" } mixinextras = { module = "io.github.llamalad7:mixinextras-fabric", version.ref = "mixinextras" } -lwjgl-nanovg = { module = "org.lwjgl:lwjgl-nanovg", version.ref = "lwjgl" } +skija-shared = { module = "io.github.humbleui:skija-shared", version.ref = "skija" } +skija-types = { module = "io.github.humbleui:types", version = "0.1.1" } rhino = { module = "com.github.ChatTriggers:rhino", version.ref = "rhino" } koffee = { module = "com.github.ChatTriggers:koffee", version.ref = "koffee" } -universalcraft = { module = "gg.essential:universalcraft-26.1-fabric", version.ref = "universalcraft" } elementa = { module = "gg.essential:elementa", version.ref = "elementa" } vigilance = { module = "gg.essential:vigilance", version.ref = "vigilance" } hypixel-mod-api = { module = "net.hypixel:mod-api", version.ref = "hypixel-mod-api" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7e7d24f6..1e922f40 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index 5b918876..659959f4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,6 +3,18 @@ pluginManagement { gradlePluginPortal() mavenCentral() maven("https://maven.fabricmc.net") + maven("https://maven.kikugie.dev/releases") + } +} + +plugins { + id("dev.kikugie.stonecutter") version "0.9.7" +} + +stonecutter { + create(rootProject) { + versions("26.1.2", "26.2") + vcsVersion = "26.2" } } diff --git a/src/main/java/com/chattriggers/ctjs/internal/accessors/VulkanDeviceAccessor.java b/src/main/java/com/chattriggers/ctjs/internal/accessors/VulkanDeviceAccessor.java new file mode 100644 index 00000000..0a16b1f6 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/accessors/VulkanDeviceAccessor.java @@ -0,0 +1,10 @@ +//? if >=26.2 { +package com.chattriggers.ctjs.internal.accessors; + +import com.mojang.blaze3d.vulkan.VulkanPhysicalDevice; +import com.mojang.blaze3d.vulkan.VulkanDevice; + +public interface VulkanDeviceAccessor { + VulkanPhysicalDevice ctjs$getPhysicalDevice(); +} +//?} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/AbstractContainerScreenMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/AbstractContainerScreenMixin.java index 6ab9c1a8..4322f3ce 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/AbstractContainerScreenMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/AbstractContainerScreenMixin.java @@ -3,6 +3,7 @@ import com.chattriggers.ctjs.api.inventory.Item; import com.chattriggers.ctjs.api.message.TextComponent; import com.chattriggers.ctjs.api.triggers.TriggerType; +import com.chattriggers.ctjs.internal.engine.JSLoader; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -40,6 +41,8 @@ private AbstractContainerScreenMixin(Component title) { cancellable = true ) private void injectDrawMouseoverTooltip(GuiGraphicsExtractor context, int x, int y, CallbackInfo ci) { + if (!JSLoader.INSTANCE.hasTriggers(TriggerType.ITEM_TOOLTIP)) return; + ItemStack stack = hoveredSlot.getItem(); TriggerType.ITEM_TOOLTIP.triggerAll( getTooltipFromItem(minecraft, stack) diff --git a/src/main/java/com/v5/mixins/CameraMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/CameraMixin.java similarity index 53% rename from src/main/java/com/v5/mixins/CameraMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/CameraMixin.java index b2c6df68..234bd829 100644 --- a/src/main/java/com/v5/mixins/CameraMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/CameraMixin.java @@ -1,6 +1,6 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; -import com.v5.storage.V5MixinStorage; +import com.chattriggers.ctjs.api.client.Client; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -25,18 +25,15 @@ public abstract class CameraMixin { @Inject(method = "alignWithEntity", at = @At("TAIL")) private void v5$applyCameraOverride(float partialTick, CallbackInfo ci) { - Object yaw = V5MixinStorage.get("cameraOverrideYaw", null); - Object pitch = V5MixinStorage.get("cameraOverridePitch", null); - if (V5MixinStorage.getBoolean("freelookEnabled", false) - && yaw instanceof Number yawNumber - && pitch instanceof Number pitchNumber) { + Float yaw = Client.getCameraYaw(); + Float pitch = Client.getCameraPitch(); + if (Client.isFreelook() && yaw != null && pitch != null) { LocalPlayer player = Minecraft.getInstance().player; if (player != null) { - float yawRadians = yawNumber.floatValue() * Mth.DEG_TO_RAD; - float pitchRadians = pitchNumber.floatValue() * Mth.DEG_TO_RAD; + float yawRadians = yaw * Mth.DEG_TO_RAD; + float pitchRadians = pitch * Mth.DEG_TO_RAD; float cosPitch = Mth.cos(pitchRadians); - Object storedDistance = V5MixinStorage.get("freelookCameraDistance", 4.0); - double distance = storedDistance instanceof Number number ? Mth.clamp(number.doubleValue(), 1.0, 12.0) : 4.0; + double distance = Client.getFreelookDistance(); Vec3 eyePos = player.getEyePosition(partialTick); this.setPosition(eyePos.add( Mth.sin(yawRadians) * cosPitch * distance, @@ -44,16 +41,12 @@ public abstract class CameraMixin { -Mth.cos(yawRadians) * cosPitch * distance)); } } else { - Object override = V5MixinStorage.get("cameraOverridePos", null); - if (override instanceof Vec3 pos) { - this.setPosition(pos); - } + Vec3 position = Client.getCameraPosition(); + if (position != null) this.setPosition(position); } - if (yaw instanceof Number yawNumber && pitch instanceof Number pitchNumber) { - this.setRotation(yawNumber.floatValue(), pitchNumber.floatValue()); - } + if (yaw != null && pitch != null) this.setRotation(yaw, pitch); - if (V5MixinStorage.getBoolean("freecamEnabled", false)) this.detached = true; + if (Client.isFreecam()) this.detached = true; } } diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/ChatComponentMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/ChatComponentMixin.java index 04baf2b7..796d1117 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/ChatComponentMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/ChatComponentMixin.java @@ -1,5 +1,6 @@ package com.chattriggers.ctjs.internal.mixins; +import com.chattriggers.ctjs.api.client.Client; import com.chattriggers.ctjs.api.message.ChatLib; import net.minecraft.client.gui.components.ChatComponent; import net.minecraft.client.multiplayer.chat.GuiMessage; @@ -11,6 +12,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; @@ -21,6 +23,16 @@ public class ChatComponentMixin { @Shadow private List allMessages; + @ModifyVariable( + method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/multiplayer/chat/GuiMessageSource;Lnet/minecraft/client/multiplayer/chat/GuiMessageTag;)V", + at = @At("HEAD"), + ordinal = 0, + argsOnly = true + ) + private Component v5$addMessage(Component original) { + return Client.processName(original); + } + @Inject(method = "clearMessages", at = @At("TAIL")) private void injectClear(boolean clearHistory, CallbackInfo ci) { ChatLib.INSTANCE.onChatHudClearChat$ctjs(); diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/CommandEncoderMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/CommandEncoderMixin.java new file mode 100644 index 00000000..482e6820 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/CommandEncoderMixin.java @@ -0,0 +1,14 @@ +//? if >=26.2 { +package com.chattriggers.ctjs.internal.mixins; + +import com.mojang.blaze3d.systems.CommandEncoder; +import com.mojang.blaze3d.systems.CommandEncoderBackend; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(CommandEncoder.class) +public interface CommandEncoderMixin { + @Accessor("backend") + CommandEncoderBackend ctjs$getBackend(); +} +//?} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/ConnectionMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/ConnectionMixin.java index aa885bb5..a50766b1 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/ConnectionMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/ConnectionMixin.java @@ -1,14 +1,17 @@ package com.chattriggers.ctjs.internal.mixins; +import com.chattriggers.ctjs.api.V5Irc; +import com.chattriggers.ctjs.api.triggers.PacketEvent; +import net.minecraft.network.protocol.game.ServerboundChatPacket; import com.chattriggers.ctjs.internal.engine.CTEvents; import com.chattriggers.ctjs.api.triggers.TriggerType; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import net.minecraft.network.Connection; +import net.minecraft.network.PacketListener; import net.minecraft.network.protocol.PacketFlow; -import net.minecraft.network.PacketSendListener; import net.minecraft.network.protocol.Packet; -import org.jetbrains.annotations.Nullable; +import net.minecraft.network.protocol.game.ClientboundBundlePacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -34,12 +37,26 @@ private void injectHandlePacket(ChannelHandlerContext channelHandlerContext, Pac CTEvents.PACKET_RECEIVED.invoker().receive(packet, ci); } + @Inject(method = "genericsFtw", at = @At("HEAD")) + private static void triggerPacketEvent(Packet packet, PacketListener listener, CallbackInfo ci) { + if (packet instanceof ClientboundBundlePacket bundlePacket) { + bundlePacket.subPackets().forEach(PacketEvent.RECEIVE.invoker()::trigger); + } else { + PacketEvent.RECEIVE.invoker().trigger(packet); + } + } + @Inject( method = "send(Lnet/minecraft/network/protocol/Packet;Lio/netty/channel/ChannelFutureListener;)V", at = @At("HEAD"), cancellable = true ) private void injectSendPacket(Packet packet, ChannelFutureListener channelFutureListener, CallbackInfo ci) { + if (packet instanceof ServerboundChatPacket chat && chat.message().startsWith("#")) { + V5Irc.send(chat.message().substring(1)); + ci.cancel(); + return; + } TriggerType.PACKET_SENT.triggerAll(packet, ci); } } diff --git a/src/main/java/com/v5/mixins/ConnectionProxyMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/ConnectionProxyMixin.java similarity index 97% rename from src/main/java/com/v5/mixins/ConnectionProxyMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/ConnectionProxyMixin.java index e535c710..b2f52911 100644 --- a/src/main/java/com/v5/mixins/ConnectionProxyMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/ConnectionProxyMixin.java @@ -1,4 +1,4 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; import com.chattriggers.ctjs.api.client.Proxy; import com.chattriggers.ctjs.api.client.ProxyInfo; diff --git a/src/main/java/com/v5/mixins/CrossCollisionBlockMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/CrossCollisionBlockMixin.java similarity index 94% rename from src/main/java/com/v5/mixins/CrossCollisionBlockMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/CrossCollisionBlockMixin.java index de3ba779..e937e5f2 100644 --- a/src/main/java/com/v5/mixins/CrossCollisionBlockMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/CrossCollisionBlockMixin.java @@ -1,4 +1,4 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; import net.minecraft.world.level.block.CrossCollisionBlock; import net.minecraft.world.level.block.StainedGlassPaneBlock; diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRenderDispatcherMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRenderDispatcherMixin.java index b3dc7831..9eb43f6e 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRenderDispatcherMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRenderDispatcherMixin.java @@ -1,7 +1,7 @@ package com.chattriggers.ctjs.internal.mixins; import com.chattriggers.ctjs.api.client.Client; -import com.chattriggers.ctjs.api.render.Renderer; +import com.chattriggers.ctjs.api.render.Render2D; import com.chattriggers.ctjs.internal.IRenderState; import com.chattriggers.ctjs.internal.engine.CTEvents; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; @@ -21,7 +21,7 @@ public abstract class EntityRenderDispatcherMixin { @Inject(method = "onResourceManagerReload", at = @At("TAIL")) private void injectReload(net.minecraft.server.packs.resources.ResourceManager manager, CallbackInfo ci, @com.llamalad7.mixinextras.sugar.Local net.minecraft.client.renderer.entity.EntityRendererProvider.Context context) { - Renderer.initializePlayerRenderers$ctjs(context); + Render2D.initializePlayerRenderers$ctjs(context); } @ModifyExpressionValue( diff --git a/src/main/java/com/v5/mixins/EntityRendererMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRendererMixin.java similarity index 83% rename from src/main/java/com/v5/mixins/EntityRendererMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRendererMixin.java index 4dd11a15..1c1954eb 100644 --- a/src/main/java/com/v5/mixins/EntityRendererMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRendererMixin.java @@ -1,6 +1,6 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; -import com.v5.storage.ProfileHiderProcessor; +import com.chattriggers.ctjs.api.client.Client; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; @@ -17,7 +17,7 @@ public class EntityRendererMixin { return; } - Component updated = ProfileHiderProcessor.process(original); + Component updated = Client.processName(original); if (updated != original) { cir.setReturnValue(updated); } diff --git a/src/main/java/com/v5/mixins/FirmamentModAnnouncerMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/FirmamentModAnnouncerMixin.java similarity index 92% rename from src/main/java/com/v5/mixins/FirmamentModAnnouncerMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/FirmamentModAnnouncerMixin.java index e2bcd92f..330c4fde 100644 --- a/src/main/java/com/v5/mixins/FirmamentModAnnouncerMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/FirmamentModAnnouncerMixin.java @@ -1,4 +1,4 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/FontMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/FontMixin.java new file mode 100644 index 00000000..551ed321 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/FontMixin.java @@ -0,0 +1,19 @@ +package com.chattriggers.ctjs.internal.mixins; + +import com.chattriggers.ctjs.CTJS; +import com.chattriggers.ctjs.internal.utils.NameReplacement; +import net.minecraft.client.gui.Font; +import net.minecraft.util.FormattedCharSequence; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(Font.class) +public class FontMixin { + @ModifyVariable(method = "prepareText(Lnet/minecraft/util/FormattedCharSequence;FFIZZI)Lnet/minecraft/client/gui/Font$PreparedText;", + at = @At("HEAD"), argsOnly = true, ordinal = 0) + private FormattedCharSequence v5$animateName(FormattedCharSequence original) { + if (!CTJS.isLoaded()) return original; + return NameReplacement.animate(NameReplacement.process(original)); + } +} diff --git a/src/main/java/com/v5/mixins/FramerateLimitTrackerMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/FramerateLimitTrackerMixin.java similarity index 93% rename from src/main/java/com/v5/mixins/FramerateLimitTrackerMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/FramerateLimitTrackerMixin.java index 1b75ad86..6185a791 100644 --- a/src/main/java/com/v5/mixins/FramerateLimitTrackerMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/FramerateLimitTrackerMixin.java @@ -1,4 +1,4 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; import com.mojang.blaze3d.platform.FramerateLimitTracker; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/com/v5/mixins/FrustumMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/FrustumMixin.java similarity index 80% rename from src/main/java/com/v5/mixins/FrustumMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/FrustumMixin.java index 5eff1c18..65aa002e 100644 --- a/src/main/java/com/v5/mixins/FrustumMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/FrustumMixin.java @@ -1,6 +1,6 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; -import com.v5.storage.V5MixinStorage; +import com.chattriggers.ctjs.api.client.Client; import net.minecraft.client.renderer.culling.Frustum; import org.joml.FrustumIntersection; import org.spongepowered.asm.mixin.Mixin; @@ -14,6 +14,6 @@ public class FrustumMixin { private void v5$showEverythingInFreecam(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable cir) { - if (V5MixinStorage.getBoolean("freecamEnabled", false)) cir.setReturnValue(FrustumIntersection.INSIDE); + if (Client.isFreecam()) cir.setReturnValue(FrustumIntersection.INSIDE); } } diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/GameRendererAccessor.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/GameRendererAccessor.java new file mode 100644 index 00000000..baa9da16 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/GameRendererAccessor.java @@ -0,0 +1,14 @@ +//? if >=26.2 { +package com.chattriggers.ctjs.internal.mixins; + +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.SubmitNodeStorage; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(GameRenderer.class) +public interface GameRendererAccessor { + @Accessor + SubmitNodeStorage getHandAndScreenSubmitNodeStorage(); +} +//?} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/GpuDeviceMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/GpuDeviceMixin.java new file mode 100644 index 00000000..dd75f3ef --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/GpuDeviceMixin.java @@ -0,0 +1,14 @@ +//? if >=26.2 { +package com.chattriggers.ctjs.internal.mixins; + +import com.mojang.blaze3d.systems.GpuDevice; +import com.mojang.blaze3d.systems.GpuDeviceBackend; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(GpuDevice.class) +public interface GpuDeviceMixin { + @Accessor("backend") + GpuDeviceBackend ctjs$getBackend(); +} +//?} diff --git a/src/main/java/com/v5/mixins/GuiGraphicsExtractorMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiGraphicsExtractorMixin.java similarity index 85% rename from src/main/java/com/v5/mixins/GuiGraphicsExtractorMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/GuiGraphicsExtractorMixin.java index 054ba3fc..1fe99ced 100644 --- a/src/main/java/com/v5/mixins/GuiGraphicsExtractorMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiGraphicsExtractorMixin.java @@ -1,6 +1,6 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; -import com.v5.storage.ProfileHiderProcessor; +import com.chattriggers.ctjs.api.client.Client; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -18,6 +18,10 @@ public class GuiGraphicsExtractorMixin { ordinal = 0, argsOnly = true) private FormattedCharSequence v5$processText(FormattedCharSequence original) { + if (!Client.hasNameProcessor()) { + return original; + } + MutableComponent component = Component.empty(); StringBuilder text = new StringBuilder(); Style[] currentStyle = {null}; @@ -33,6 +37,6 @@ public class GuiGraphicsExtractorMixin { if (currentStyle[0] != null) { component.append(Component.literal(text.toString()).setStyle(currentStyle[0])); } - return ProfileHiderProcessor.process(component).getVisualOrderText(); + return Client.processName(component).getVisualOrderText(); } } diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiHudMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiHudMixin.java new file mode 100644 index 00000000..8d1eede8 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiHudMixin.java @@ -0,0 +1,48 @@ +package com.chattriggers.ctjs.internal.mixins; + +import com.chattriggers.ctjs.api.client.Client; +import com.chattriggers.ctjs.api.render.DrawContextHolder; +import com.chattriggers.ctjs.api.render.Render2D; +import com.chattriggers.ctjs.api.world.Scoreboard; +import com.chattriggers.ctjs.internal.engine.CTEvents; +import gg.essential.universal.UMatrixStack; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +//? if <26.2 { +/*@Mixin(targets = "net.minecraft.client.gui.Gui") +*///?} else { +@Mixin(targets = "net.minecraft.client.gui.Hud") +//?} +public class GuiHudMixin { + @Inject(method = "extractRenderState", at = @At("HEAD")) + private void captureContext(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci) { + DrawContextHolder.currentContext = context; + if (Client.getCurrentScreen() == null) { + Render2D.INSTANCE.runPreDrawables(context); + } + } + + @Inject(method = "extractScoreboardSidebar", at = @At("HEAD"), cancellable = true) + private void injectRenderScoreboard(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci) { + if (!Scoreboard.getShouldRender()) { + ci.cancel(); + } + } + + @Inject(method = "extractRenderState", at = @At("TAIL")) + private void injectRenderOverlay(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci) { + CTEvents.RENDER_OVERLAY.invoker().render( + context, + new UMatrixStack(context.pose()).toMC(), + tickCounter.getGameTimeDeltaTicks() + ); + if (Client.getCurrentScreen() == null) { + Render2D.INSTANCE.runDrawables(context); + } + } +} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiMixin.java deleted file mode 100644 index 405174ba..00000000 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.chattriggers.ctjs.internal.mixins; - -import com.chattriggers.ctjs.api.world.Scoreboard; -import com.chattriggers.ctjs.internal.engine.CTEvents; -import gg.essential.universal.UMatrixStack; -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.DeltaTracker; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - - -@Mixin(Gui.class) -public class GuiMixin { - @Inject(method = "extractScoreboardSidebar", at = @At("HEAD"), cancellable = true) - private void injectRenderScoreboard(GuiGraphicsExtractor matrices, DeltaTracker tickCounter, CallbackInfo ci) { - if (!Scoreboard.getShouldRender()) - ci.cancel(); - } - - @Inject( - method = "extractRenderState", - at = @At("TAIL") - ) - private void injectRenderOverlay(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci) { - CTEvents.RENDER_OVERLAY.invoker().render(context, new UMatrixStack(context.pose()).toMC(), tickCounter.getGameTimeDeltaTicks()); - } -} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiRendererMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiRendererMixin.java new file mode 100644 index 00000000..16b22a2b --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiRendererMixin.java @@ -0,0 +1,18 @@ +package com.chattriggers.ctjs.internal.mixins; + +import com.chattriggers.ctjs.api.render.Render2D; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.Screen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Screen.class) +public class GuiRendererMixin { + @Inject(method = "extractRenderStateWithTooltipAndSubtitles", at = @At("TAIL")) + private void afterExtract(GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks, CallbackInfo ci) { + Render2D.INSTANCE.runPreDrawables(context); + Render2D.INSTANCE.runDrawables(context); + } +} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiScreenMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiScreenMixin.java new file mode 100644 index 00000000..f655b8f8 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/GuiScreenMixin.java @@ -0,0 +1,32 @@ +package com.chattriggers.ctjs.internal.mixins; + +import com.chattriggers.ctjs.api.client.Client; +import com.chattriggers.ctjs.api.triggers.TriggerType; +import net.minecraft.client.gui.screens.Overlay; +import net.minecraft.client.gui.screens.Screen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +//? if <26.2 { +/*@Mixin(targets = "net.minecraft.client.Minecraft") +*///?} else { +@Mixin(targets = "net.minecraft.client.gui.Gui") +//?} +public class GuiScreenMixin { + @Inject(method = "setScreen", at = @At("HEAD")) + private void injectScreenOpened(Screen screen, CallbackInfo ci) { + if (screen != null) { + Client.automatedAttackHeld = false; + TriggerType.GUI_OPENED.triggerAll(screen, ci); + } + } + + @Inject(method = "setOverlay", at = @At("HEAD")) + private void injectOverlayOpened(Overlay overlay, CallbackInfo ci) { + if (overlay != null) { + Client.unpressKeys(); + } + } +} diff --git a/src/main/java/com/v5/mixins/ItemInHandRendererMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/ItemInHandRendererMixin.java similarity index 88% rename from src/main/java/com/v5/mixins/ItemInHandRendererMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/ItemInHandRendererMixin.java index 03f0b0da..d64860e1 100644 --- a/src/main/java/com/v5/mixins/ItemInHandRendererMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/ItemInHandRendererMixin.java @@ -1,6 +1,6 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; -import com.v5.storage.V5MixinStorage; +import com.chattriggers.ctjs.api.client.Client; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.ItemInHandRenderer; import net.minecraft.world.InteractionHand; @@ -33,7 +33,7 @@ public class ItemInHandRendererMixin { } @Redirect( - method = "renderHandsWithItems", + method = {"renderHandsWithItems", "submitHandsWithItems"}, at = @At( value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getAttackAnim(F)F")) @@ -43,7 +43,7 @@ public class ItemInHandRendererMixin { } @Redirect( - method = "renderHandsWithItems", + method = {"renderHandsWithItems", "submitHandsWithItems"}, at = @At( value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;swingingArm:Lnet/minecraft/world/InteractionHand;")) @@ -53,7 +53,6 @@ public class ItemInHandRendererMixin { } private LivingEntity v5$getSpectatedEntity() { - Object target = V5MixinStorage.get("freecamSpectatedEntity", null); - return target instanceof LivingEntity entity ? entity : null; + return Client.getSpectatedEntity(); } } diff --git a/src/main/java/com/v5/mixins/JoinMultiplayerScreenMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/JoinMultiplayerScreenMixin.java similarity index 89% rename from src/main/java/com/v5/mixins/JoinMultiplayerScreenMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/JoinMultiplayerScreenMixin.java index b0923e24..4b7ba7ce 100644 --- a/src/main/java/com/v5/mixins/JoinMultiplayerScreenMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/JoinMultiplayerScreenMixin.java @@ -1,6 +1,7 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; import com.chattriggers.ctjs.api.client.ProxyManagerScreen; +import com.chattriggers.ctjs.api.client.Client; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; @@ -26,7 +27,7 @@ protected JoinMultiplayerScreenMixin(Component text) { private void init(CallbackInfo ci) { this.v5_proxyButton = Button.builder(Component.literal("V5 Proxies"), b -> { if (this.minecraft != null) { - this.minecraft.setScreen(new ProxyManagerScreen(this)); + Client.setCurrentScreen(new ProxyManagerScreen(this)); } }) .bounds(0, 5, 80, 20) diff --git a/src/main/java/com/v5/mixins/KeyboardHandlerMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/KeyboardHandlerMixin.java similarity index 90% rename from src/main/java/com/v5/mixins/KeyboardHandlerMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/KeyboardHandlerMixin.java index 5131ed32..4574564b 100644 --- a/src/main/java/com/v5/mixins/KeyboardHandlerMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/KeyboardHandlerMixin.java @@ -1,8 +1,7 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; import com.chattriggers.ctjs.api.client.Client; import com.mojang.blaze3d.platform.InputConstants; -import com.v5.storage.V5MixinStorage; import net.minecraft.client.KeyboardHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; @@ -22,7 +21,7 @@ public class KeyboardHandlerMixin { } Minecraft client = Minecraft.getInstance(); - if (!V5MixinStorage.getBoolean("freecamEnabled", false) || client.screen != null) { + if (!Client.isFreecam() || Client.getCurrentScreen() != null) { return; } diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/LevelRendererMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/LevelRendererMixin.java index 54273df5..b4f889c9 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/LevelRendererMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/LevelRendererMixin.java @@ -1,15 +1,19 @@ -package com.chattriggers.ctjs.internal.mixins; +//? if <26.2 { +/*package com.chattriggers.ctjs.internal.mixins; +import com.chattriggers.ctjs.api.client.Client; import com.chattriggers.ctjs.internal.listeners.WorldListener; +import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.mojang.blaze3d.buffers.GpuBufferSlice; +import com.mojang.blaze3d.framegraph.FrameGraphBuilder; import com.mojang.blaze3d.resource.GraphicsResourceAllocator; import com.mojang.blaze3d.resource.ResourceHandle; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.DeltaTracker; import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.chunk.ChunkSectionsToRender; +import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.client.renderer.state.level.BlockOutlineRenderState; import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.client.renderer.state.level.LevelRenderState; @@ -19,23 +23,34 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(LevelRenderer.class) public abstract class LevelRendererMixin { private float ctjs$tickDelta = 1.0F; + @ModifyVariable(method = "cullTerrain", at = @At("HEAD"), argsOnly = true) + private boolean v5$useSpectatorCullingInFreecam(boolean spectator) { + return spectator || Client.isFreecam(); + } + + @Inject(method = "addMainPass", at = @At("HEAD"), cancellable = true) + private void v5$renderMain(FrameGraphBuilder frameGraphBuilder, Frustum frustum, Matrix4fc matrix4f, GpuBufferSlice gpuBufferSlice, boolean renderBlockOutline, LevelRenderState worldRenderState, DeltaTracker deltaTracker, ProfilerFiller profiler, ChunkSectionsToRender chunkSectionsToRender, CallbackInfo ci) { + if (Client.isMacroEnabled() && Client.getRenderLimiter() == Client.RenderLimiter.NO_RENDER) { + ci.cancel(); + } + } + @Inject( method = "renderBlockOutline", at = @At( value = "FIELD", target = "Lnet/minecraft/client/renderer/state/level/CameraRenderState;pos:Lnet/minecraft/world/phys/Vec3;" ), - cancellable = true, - locals = LocalCapture.CAPTURE_FAILSOFT + cancellable = true ) - private void onDrawBlockOutline(MultiBufferSource.BufferSource immediate, PoseStack matrices, boolean renderBlockOutline, LevelRenderState renderStates, CallbackInfo ci, BlockOutlineRenderState outlineRenderState) { + private void onDrawBlockOutline(CallbackInfo ci, @Local BlockOutlineRenderState outlineRenderState) { if (WorldListener.INSTANCE.triggerBlockOutline(outlineRenderState.pos())) ci.cancel(); } @@ -55,8 +70,86 @@ private void beforeRender(GraphicsResourceAllocator allocator, DeltaTracker tick ctjs$tickDelta = tickCounter.getGameTimeDeltaTicks(); } + @Inject( + method = "lambda$addMainPass$0", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;finalizeGizmoCollection()V") + ) + private void beforeGizmos(GpuBufferSlice gpuBufferSlice, LevelRenderState worldRenderState, ProfilerFiller profiler, ChunkSectionsToRender chunkSectionsToRender, ResourceHandle handle, ResourceHandle handle2, ResourceHandle handle3, ResourceHandle handle4, ResourceHandle handle5, boolean bl, Matrix4fc matrix4f, CallbackInfo ci) { + WorldListener.INSTANCE.triggerRenderLast(); + } +} +*///?} else { +package com.chattriggers.ctjs.internal.mixins; + +import com.chattriggers.ctjs.api.client.Client; +import com.chattriggers.ctjs.internal.listeners.WorldListener; +import com.mojang.blaze3d.buffers.GpuBufferSlice; +import com.mojang.blaze3d.resource.GraphicsResourceAllocator; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.rendertype.RenderType; +import net.minecraft.client.renderer.state.level.BlockOutlineRenderState; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import org.joml.Matrix4fc; +import org.joml.Vector4f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LevelRenderer.class) +public abstract class LevelRendererMixin { + private float ctjs$tickDelta = 1.0F; + + @Inject(method = "addMainPass", at = @At("HEAD"), cancellable = true) + private void v5$renderMain(CallbackInfo ci) { + if (Client.isMacroEnabled() && Client.getRenderLimiter() == Client.RenderLimiter.NO_RENDER) { + ci.cancel(); + } + } + + @Inject(method = "submitHitOutline", at = @At("HEAD"), cancellable = true) + private void onDrawBlockOutline( + PoseStack matrices, + SubmitNodeCollector collector, + RenderType renderType, + BlockOutlineRenderState outline, + int color, + float lineWidth, + boolean translucent, + CallbackInfo ci + ) { + if (WorldListener.INSTANCE.triggerBlockOutline(outline.pos())) { + ci.cancel(); + } + } + + @Inject(method = "render", at = @At("HEAD")) + private void beforeRender( + GraphicsResourceAllocator allocator, + DeltaTracker tickCounter, + boolean renderBlockOutline, + CameraRenderState camera, + Matrix4fc positionMatrix, + GpuBufferSlice fogBuffer, + Vector4f fogColor, + boolean renderSky, + CallbackInfo ci + ) { + ctjs$tickDelta = tickCounter.getGameTimeDeltaTicks(); + } + + @Inject(method = "submitEntities", at = @At("HEAD")) + private void beforeEntities(PoseStack matrices, net.minecraft.client.renderer.state.level.LevelRenderState state, SubmitNodeCollector collector, CallbackInfo ci) { + WorldListener.INSTANCE.setMatrixStack(matrices); + WorldListener.INSTANCE.triggerRenderStart(ctjs$tickDelta); + } + @Inject(method = "lambda$addMainPass$0", at = @At("RETURN")) - private void afterRender(GpuBufferSlice gpuBufferSlice, LevelRenderState worldRenderState, ProfilerFiller profiler, ChunkSectionsToRender chunkSectionsToRender, ResourceHandle handle, ResourceHandle handle2, ResourceHandle handle3, ResourceHandle handle4, ResourceHandle handle5, boolean bl, Matrix4fc matrix4f, CallbackInfo ci) { + private void afterMainPass(CallbackInfo ci) { WorldListener.INSTANCE.triggerRenderLast(); } } +//?} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/MinecraftMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/MinecraftMixin.java index 49516b09..1a3af1a0 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/MinecraftMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/MinecraftMixin.java @@ -6,12 +6,19 @@ import com.chattriggers.ctjs.internal.engine.CTEvents; import com.chattriggers.ctjs.api.triggers.TriggerType; import com.chattriggers.ctjs.internal.engine.module.ModuleManager; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import net.minecraft.client.CameraType; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; +import net.minecraft.client.Options; import net.minecraft.client.gui.screens.Overlay; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.sounds.SoundSource; import org.jetbrains.annotations.Nullable; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -21,10 +28,115 @@ @Mixin(Minecraft.class) public abstract class MinecraftMixin { @Shadow @Nullable public ClientLevel level; + @Shadow @Final public Options options; @Shadow public abstract ServerData getCurrentServer(); @Shadow public abstract boolean hasSingleplayerServer(); + private Integer v5$savedDistance; + private CameraType v5$savedPerspective; + private Integer v5$savedFps; + private Float v5$savedMasterVolume; + + @ModifyExpressionValue( + method = "pauseIfInactive", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/client/Options;pauseOnLostFocus:Z", + opcode = Opcodes.GETFIELD + ) + ) + private boolean v5$pauseIfInactive(boolean original) { + return false; + } + + @ModifyExpressionValue( + method = "handleKeybinds", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/MouseHandler;isMouseGrabbed()Z" + ) + ) + private boolean v5$allowAttackWhileUngrabbed(boolean original) { + return original || Client.isUngrabbed() || Client.automatedAttackHeld; + } + + @Inject(method = "handleKeybinds()V", at = @At("HEAD")) + private void v5$handleInputEvents(CallbackInfo ci) { + if (!Client.isInputLocked()) { + return; + } + + for (KeyMapping key : options.keyHotbarSlots) { + if (key.consumeClick()) { + key.setDown(false); + } + } + } + + @Inject(method = "tick()V", at = @At("HEAD")) + private void v5$tickRenderLimiter(CallbackInfo ci) { + int currentDist = options.renderDistance().get(); + CameraType currentPerspective = options.getCameraType(); + int currentFps = options.framerateLimit().get(); + float currentMasterVolume = options.getFinalSoundSourceVolume(SoundSource.MASTER); + + boolean macroEnabled = Client.isMacroEnabled(); + Client.RenderLimiter renderLimiter = Client.getRenderLimiter(); + boolean forcePerspective = Client.isForcePerspective(); + boolean limitFps = Client.getLimitFps(); + boolean muteGame = Client.getMuteGame(); + + if (macroEnabled && renderLimiter == Client.RenderLimiter.LIMIT_CHUNKS) { + if (v5$savedDistance == null) v5$savedDistance = currentDist; + if (currentDist != 2) { + options.renderDistance().set(2); + } + } else if (v5$savedDistance != null) { + if (currentDist != v5$savedDistance) { + options.renderDistance().set(v5$savedDistance); + } + v5$savedDistance = null; + } + + if (macroEnabled && forcePerspective) { + if (v5$savedPerspective == null) v5$savedPerspective = currentPerspective; + if (currentPerspective != CameraType.THIRD_PERSON_BACK) { + options.setCameraType(CameraType.THIRD_PERSON_BACK); + } + } else if (v5$savedPerspective != null) { + if (currentPerspective != v5$savedPerspective) { + options.setCameraType(v5$savedPerspective); + } + v5$savedPerspective = null; + } + + if (macroEnabled && limitFps) { + if (v5$savedFps == null) v5$savedFps = currentFps; + if (currentFps != 30) { + options.framerateLimit().set(30); + } + } else if (v5$savedFps != null) { + if (currentFps != v5$savedFps) { + int restoreValue = v5$savedFps > 240 ? 260 : v5$savedFps; + options.framerateLimit().set(restoreValue); + } + v5$savedFps = null; + } + + if (macroEnabled && muteGame) { + if (v5$savedMasterVolume == null) v5$savedMasterVolume = currentMasterVolume; + if (Float.compare(currentMasterVolume, 0.0F) != 0) { + options.getSoundSourceOptionInstance(SoundSource.MASTER).set(0.0D); + } + } else if (v5$savedMasterVolume != null) { + if (Float.compare(currentMasterVolume, v5$savedMasterVolume) != 0) { + options.getSoundSourceOptionInstance(SoundSource.MASTER).set((double) v5$savedMasterVolume); + } + v5$savedMasterVolume = null; + } + } + @Inject(method = "setLevel", at = @At("HEAD")) private void injectWorldUnload(ClientLevel world, CallbackInfo ci) { if (world == null) @@ -61,19 +173,6 @@ private void injectDisconnect(Screen disconnectionScreen, boolean transferring, } } - @Inject(method = "setScreen", at = @At("HEAD")) - private void injectScreenOpened(Screen screen, CallbackInfo ci) { - if (screen != null) { - Client.automatedAttackHeld = false; - TriggerType.GUI_OPENED.triggerAll(screen, ci); - } - } - - @Inject(method = "setOverlay", at = @At("HEAD")) - private void injectOverlayOpened(Overlay overlay, CallbackInfo ci) { - if (overlay != null) - Client.unpressKeys(); - } @Inject(method = "run", at = @At("HEAD")) private void injectRun(CallbackInfo ci) { diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/MouseHandlerMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/MouseHandlerMixin.java index cbe3409d..7cb5de43 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/MouseHandlerMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/MouseHandlerMixin.java @@ -1,35 +1,117 @@ package com.chattriggers.ctjs.internal.mixins; +import com.chattriggers.ctjs.api.client.Client; import com.chattriggers.ctjs.internal.engine.CTEvents; import com.chattriggers.ctjs.internal.listeners.MouseListener; import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.blaze3d.platform.InputConstants; +import net.minecraft.client.Minecraft; import net.minecraft.client.MouseHandler; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.input.MouseButtonInfo; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.util.Mth; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.lwjgl.glfw.GLFW; @Mixin(MouseHandler.class) public class MouseHandlerMixin { @Shadow private MouseButtonInfo activeButton; - @Inject( - method = "onButton", + private int v5$guiMouseButton = -1; + + private boolean v5$cameraLookEnabled() { + return Client.isFreecam() || Client.isFreelook(); + } + + @Inject(method = "onButton", at = @At("HEAD"), cancellable = true) + private void v5$cancelFreecamClick(long window, MouseButtonInfo button, int action, CallbackInfo ci) { + Minecraft client = Minecraft.getInstance(); + MouseListener.onRawMouseInput(button.button(), action); + if (action == GLFW.GLFW_PRESS && Client.getCurrentScreen() != null) { + v5$guiMouseButton = button.button(); + } else if (action == GLFW.GLFW_RELEASE) { + if (button.button() == v5$guiMouseButton) { + v5$guiMouseButton = -1; + } else if (!v5$cameraLookEnabled() || (button.button() != 0 && button.button() != 1)) { + Client.releaseHeldKey(InputConstants.Type.MOUSE.getOrCreate(button.button())); + } + } + + if (v5$cameraLookEnabled() + && Client.getCurrentScreen() == null + && (button.button() == 0 || button.button() == 1)) { + ci.cancel(); + } + } + + @Redirect( + method = "turnPlayer(D)V", at = @At( - value = "FIELD", - target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", - opcode = Opcodes.GETFIELD + value = "INVOKE", + target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V" ) ) - private void injectOnMouseButton(long window, MouseButtonInfo input, int action, CallbackInfo ci) { - MouseListener.onRawMouseInput(input.button(), action); + private void v5$turnFreecam(LocalPlayer player, double yawDelta, double pitchDelta) { + if (!v5$cameraLookEnabled()) { + player.turn(yawDelta, pitchDelta); + return; + } + + Float yaw = Client.getCameraYaw(); + Float pitch = Client.getCameraPitch(); + Client.setCameraRotation( + (yaw != null ? yaw : player.getYRot()) + (float) yawDelta * 0.15F, + Mth.clamp((pitch != null ? pitch : player.getXRot()) + (float) pitchDelta * 0.15F, -90.0F, 90.0F) + ); + } + + @Inject(method = "grabMouse()V", at = @At("HEAD"), cancellable = true) + private void v5$lockCursor(CallbackInfo ci) { + if (Client.isUngrabbed()) { + Client.resumeHeldKeys(); + ci.cancel(); + } + } + + @Inject(method = "grabMouse()V", at = @At("TAIL")) + private void v5$restoreHeldKeys(CallbackInfo ci) { + Client.resumeHeldKeys(); } + @Inject(method = "turnPlayer(D)V", at = @At("HEAD"), cancellable = true) + private void v5$updateMouse(CallbackInfo ci) { + if (Client.isUngrabbed()) { + ci.cancel(); + } + } + + @Inject(method = "onScroll(JDD)V", at = @At("HEAD"), cancellable = true) + private void v5$onMouseScroll(long window, double horizontalScroll, double verticalScroll, CallbackInfo ci) { + Minecraft client = Minecraft.getInstance(); + if (Client.isFreelook() && Client.getCurrentScreen() == null) { + Client.setFreelookDistance(Client.getFreelookDistance() - verticalScroll); + ci.cancel(); + return; + } + + if (!Client.isInputLocked()) { + return; + } + + if (Client.getCurrentScreen() == null) { + ci.cancel(); + } + } + + @Inject( method = "onScroll", at = @At( diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/PlayerTabOverlayMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/PlayerTabOverlayMixin.java index 3109d2d9..6bc2f641 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/PlayerTabOverlayMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/PlayerTabOverlayMixin.java @@ -1,7 +1,9 @@ package com.chattriggers.ctjs.internal.mixins; +import com.chattriggers.ctjs.api.client.Client; import com.chattriggers.ctjs.api.triggers.TriggerType; import com.chattriggers.ctjs.api.world.TabList; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.PlayerTabOverlay; import net.minecraft.world.scores.Scoreboard; @@ -14,6 +16,11 @@ @Mixin(PlayerTabOverlay.class) public class PlayerTabOverlayMixin { + @ModifyReturnValue(method = "getNameForDisplay", at = @At("RETURN")) + private Component v5$getPlayerName(Component original) { + return Client.processName(original); + } + @Inject(method = "extractRenderState", at = @At("HEAD"), cancellable = true) private void injectRenderPlayerList(GuiGraphicsExtractor context, int scaledWindowWidth, Scoreboard scoreboard, Objective objective, CallbackInfo ci) { TriggerType.RENDER_PLAYER_LIST.triggerAll(ci); diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/SystemReportMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/SystemReportMixin.java index a4199fb1..1d368b7b 100644 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/SystemReportMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/SystemReportMixin.java @@ -1,32 +1,29 @@ -package com.chattriggers.ctjs.internal.mixins; - +package com.chattriggers.ctjs.internal.mixins; + import com.chattriggers.ctjs.internal.engine.module.Module; import com.chattriggers.ctjs.internal.engine.module.ModuleManager; import net.minecraft.SystemReport; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Comparator; -import java.util.function.Supplier; import java.util.stream.Collectors; - -@Mixin(SystemReport.class) -public abstract class SystemReportMixin { - @Shadow - public abstract void setDetail(String string, Supplier supplier); - + +@Mixin(SystemReport.class) +public abstract class SystemReportMixin { + @Inject(method = "", at = @At("RETURN")) private void addModules(CallbackInfo ci) { - setDetail("ChatTriggers Modules", () -> ModuleManager.INSTANCE.getCachedModules().stream() + String modules = ModuleManager.INSTANCE.getCachedModules().stream() .sorted(Comparator.comparing(Module::getName)) .map(module -> { var version = module.getMetadata().getVersion(); return "\n\t\t" + module.getName() + ": " + (version == null ? "No module version specified" : "v" + version); }) - .collect(Collectors.joining())); + .collect(Collectors.joining()); + ((SystemReport) (Object) this).setDetail("ChatTriggers Modules", modules); } } diff --git a/src/main/java/com/v5/mixins/VisGraphMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/VisGraphMixin.java similarity index 78% rename from src/main/java/com/v5/mixins/VisGraphMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/VisGraphMixin.java index 69d21a58..0bafd2bf 100644 --- a/src/main/java/com/v5/mixins/VisGraphMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/VisGraphMixin.java @@ -1,6 +1,6 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; -import com.v5.storage.V5MixinStorage; +import com.chattriggers.ctjs.api.client.Client; import net.minecraft.client.renderer.chunk.VisGraph; import net.minecraft.core.BlockPos; import org.spongepowered.asm.mixin.Mixin; @@ -12,6 +12,6 @@ public class VisGraphMixin { @Inject(method = "setOpaque", at = @At("HEAD"), cancellable = true) private void v5$disableFreecamOcclusion(BlockPos pos, CallbackInfo ci) { - if (V5MixinStorage.getBoolean("freecamEnabled", false)) ci.cancel(); + if (Client.isFreecam()) ci.cancel(); } } diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/VulkanCommandEncoderMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/VulkanCommandEncoderMixin.java new file mode 100644 index 00000000..ce884496 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/VulkanCommandEncoderMixin.java @@ -0,0 +1,14 @@ +//? if >=26.2 { +package com.chattriggers.ctjs.internal.mixins; + +import com.mojang.blaze3d.vulkan.VulkanCommandEncoder; +import org.lwjgl.vulkan.VkCommandBuffer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(VulkanCommandEncoder.class) +public interface VulkanCommandEncoderMixin { + @Invoker("commandBuffer") + VkCommandBuffer ctjs$getCommandBuffer(); +} +//?} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/VulkanDeviceMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/VulkanDeviceMixin.java new file mode 100644 index 00000000..36a17039 --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/VulkanDeviceMixin.java @@ -0,0 +1,41 @@ +//? if >=26.2 { +package com.chattriggers.ctjs.internal.mixins; + +import com.mojang.blaze3d.shaders.ShaderSource; +import com.mojang.blaze3d.vulkan.VulkanDevice; +import com.mojang.blaze3d.vulkan.VulkanInstance; +import com.mojang.blaze3d.vulkan.VulkanPhysicalDevice; +import com.mojang.blaze3d.vulkan.checkpoints.CheckpointExtension; +import com.chattriggers.ctjs.internal.accessors.VulkanDeviceAccessor; +import org.lwjgl.vulkan.VkDevice; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(VulkanDevice.class) +public class VulkanDeviceMixin implements VulkanDeviceAccessor { + @Unique + private VulkanPhysicalDevice ctjs$physicalDevice; + + @Inject(method = "", at = @At("RETURN")) + private void ctjs$capturePhysicalDevice( + ShaderSource shaderSource, + VulkanInstance instance, + VulkanPhysicalDevice physicalDevice, + java.util.Set enabledExtensions, + VkDevice device, + long vma, + CheckpointExtension checkpointExtension, + CallbackInfo ci + ) { + ctjs$physicalDevice = physicalDevice; + } + + @Override + public VulkanPhysicalDevice ctjs$getPhysicalDevice() { + return ctjs$physicalDevice; + } +} +//?} diff --git a/src/main/java/com/v5/mixins/YggdrasilServicesKeyInfoMixin.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/YggdrasilServicesKeyInfoMixin.java similarity index 94% rename from src/main/java/com/v5/mixins/YggdrasilServicesKeyInfoMixin.java rename to src/main/java/com/chattriggers/ctjs/internal/mixins/YggdrasilServicesKeyInfoMixin.java index 6833b7af..609eca92 100644 --- a/src/main/java/com/v5/mixins/YggdrasilServicesKeyInfoMixin.java +++ b/src/main/java/com/chattriggers/ctjs/internal/mixins/YggdrasilServicesKeyInfoMixin.java @@ -1,4 +1,4 @@ -package com.v5.mixins; +package com.chattriggers.ctjs.internal.mixins; import com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo; import org.slf4j.Logger; @@ -20,4 +20,4 @@ public class YggdrasilServicesKeyInfoMixin { private void redirectLoggerError(Logger instance, String s, Object o, Object o1) { // Do nothing - suppress the log } -} \ No newline at end of file +} diff --git a/src/main/java/com/chattriggers/ctjs/internal/mixins/commands/EntitySelectorAccessor.java b/src/main/java/com/chattriggers/ctjs/internal/mixins/commands/EntitySelectorAccessor.java deleted file mode 100644 index 58f40667..00000000 --- a/src/main/java/com/chattriggers/ctjs/internal/mixins/commands/EntitySelectorAccessor.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.chattriggers.ctjs.internal.mixins.commands; - -import net.minecraft.commands.arguments.selector.EntitySelector; -import net.minecraft.world.entity.Entity; -import net.minecraft.advancements.criterion.MinMaxBounds; -import net.minecraft.world.level.entity.EntityTypeTest; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; -import java.util.UUID; -import java.util.function.BiConsumer; -import java.util.function.Function; -import java.util.function.Predicate; - -@Mixin(EntitySelector.class) -public interface EntitySelectorAccessor { - @Accessor - int getMaxResults(); - - @Accessor - boolean getIncludesEntities(); - - @Accessor - List> getContextFreePredicates(); - - @Accessor - MinMaxBounds.Doubles getRange(); - - @Accessor - Function getPosition(); - - @Accessor - AABB getAabb(); - - @Accessor - BiConsumer> getOrder(); - - @Accessor - boolean getCurrentEntity(); - - @Accessor - String getPlayerName(); - - @Accessor - UUID getEntityUUID(); - - @Accessor - EntityTypeTest getType(); -} diff --git a/src/main/java/com/chattriggers/ctjs/internal/utils/NameReplacement.java b/src/main/java/com/chattriggers/ctjs/internal/utils/NameReplacement.java new file mode 100644 index 00000000..18206bec --- /dev/null +++ b/src/main/java/com/chattriggers/ctjs/internal/utils/NameReplacement.java @@ -0,0 +1,151 @@ +package com.chattriggers.ctjs.internal.utils; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.TextColor; +import net.minecraft.util.FormattedCharSequence; + +import java.awt.Color; +import java.util.IdentityHashMap; +import java.util.Objects; +import java.util.Optional; + +public final class NameReplacement { + private static String username; + private static String input; + private static Component replacement; + private static final Cache sequences = + CacheBuilder.newBuilder().weakKeys().maximumSize(2048).build(); + private static final TextColor[] chroma = new TextColor[40]; + private static final IdentityHashMap phases = new IdentityHashMap<>(); + private static final Cache replacementColors = CacheBuilder.newBuilder().weakKeys().build(); + + static { + for (int i = 0; i < chroma.length; i++) { + chroma[i] = TextColor.fromRgb(Color.HSBtoRGB(i / 40f, 0.8f, 1f) & 0xffffff); + phases.put(chroma[i], i); + replacementColors.put(chroma[i], true); + } + } + + public static void configure(String name, String customName) { + if (Objects.equals(username, name) && Objects.equals(input, customName)) return; + username = name; + input = customName; + replacement = customName == null ? Component.empty() : createReplacement(customName); + sequences.invalidateAll(); + } + + public static boolean isActive() { + return username != null && !username.isEmpty(); + } + + private static Component createReplacement(String text) { + if (text.matches("#[0-9a-fA-F]{6}.+")) { + return Component.literal(text.substring(7)).withStyle( + Style.EMPTY.withColor(markColor(Integer.parseInt(text.substring(1, 7), 16)))); + } + MutableComponent result = Component.empty(); + boolean rainbow = !text.contains("&") && !text.contains("§"); + Style style = Style.EMPTY; + int character = 0; + for (int i = 0; i < text.length();) { + int codePoint = text.codePointAt(i); + i += Character.charCount(codePoint); + if (!rainbow && (codePoint == '&' || codePoint == '§') && i < text.length()) { + ChatFormatting format = ChatFormatting.getByCode(text.charAt(i)); + if (format != null) { + style = style.applyLegacyFormat(format); + i++; + continue; + } + } + Style glyphStyle = rainbow ? style.withBold(true).withColor(chroma[character++ % 40]) + : style.withColor((TextColor) null).withColor( + markColor(style.getColor() == null ? 0xffffff : style.getColor().getValue())); + result.append(Component.literal(new String(Character.toChars(codePoint))).setStyle(glyphStyle)); + } + return result; + } + + private static TextColor markColor(int rgb) { + TextColor color = TextColor.fromRgb(rgb); + replacementColors.put(color, true); + return color; + } + + private static boolean isReplacement(Style style) { + return style.getColor() != null && replacementColors.getIfPresent(style.getColor()) != null; + } + + public static Component process(Component original) { + if (!isActive()) return original; + String plain = original.getString(); + if (!plain.contains(username)) return original; + StringBuilder searchable = new StringBuilder(); + original.visit((style, text) -> { + searchable.append(isReplacement(style) ? "\0".repeat(text.length()) : text); + return Optional.empty(); + }, Style.EMPTY); + String source = searchable.toString(); + if (!source.contains(username)) return original; + MutableComponent result = Component.empty(); + int[] position = {0}; + int[] next = {source.indexOf(username)}; + int[] skipUntil = {0}; + original.visit((style, text) -> { + int start = position[0]; + int end = start + text.length(); + int cursor = Math.max(start, skipUntil[0]); + while (next[0] >= 0 && next[0] < end) { + if (cursor < next[0]) { + result.append(Component.literal(text.substring(cursor - start, next[0] - start)).setStyle(style)); + } + result.append(replacement.copy().withStyle(style)); + skipUntil[0] = next[0] + username.length(); + cursor = skipUntil[0]; + next[0] = source.indexOf(username, cursor); + } + if (cursor < end) result.append(Component.literal(text.substring(cursor - start)).setStyle(style)); + position[0] = end; + return Optional.empty(); + }, Style.EMPTY); + return result; + } + + public static FormattedCharSequence process(FormattedCharSequence original) { + if (!isActive()) return original; + FormattedCharSequence cached = sequences.getIfPresent(original); + if (cached != null) return cached; + StringBuilder plain = new StringBuilder(); + original.accept((index, style, codePoint) -> { + plain.appendCodePoint(isReplacement(style) ? 0 : codePoint); + return true; + }); + FormattedCharSequence result = original; + if (plain.indexOf(username) >= 0) { + MutableComponent component = Component.empty(); + original.accept((index, style, codePoint) -> { + component.append(Component.literal(new String(Character.toChars(codePoint))).setStyle(style)); + return true; + }); + result = process(component).getVisualOrderText(); + } + sequences.put(original, result); + return result; + } + + public static FormattedCharSequence animate(FormattedCharSequence original) { + if (!isActive()) return original; + float hue = (System.currentTimeMillis() % 2000) / 2000f; + return sink -> original.accept((index, style, codePoint) -> { + Integer phase = phases.get(style.getColor()); + return sink.accept(index, phase == null ? style : style.withColor( + Color.HSBtoRGB(hue + phase / 40f, 0.8f, 1f) & 0xffffff), codePoint); + }); + } +} diff --git a/src/main/java/com/v5/mixins/BlockMixin.java b/src/main/java/com/v5/mixins/BlockMixin.java deleted file mode 100644 index 218df85e..00000000 --- a/src/main/java/com/v5/mixins/BlockMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.v5.mixins; - -import com.v5.storage.V5MixinStorage; -import java.util.Set; -import net.minecraft.world.level.block.Block; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Block.class) -public class BlockMixin { - private static final Set TARGET_KEYS = - Set.of( - "block.minecraft.melon", - "block.minecraft.pumpkin", - "block.minecraft.carrots", - "block.minecraft.potatoes", - "block.minecraft.wheat", - "block.minecraft.nether_wart", - "block.minecraft.sugar_cane", - "block.minecraft.cactus", - "block.minecraft.cocoa", - "block.minecraft.melon_stem", - "block.minecraft.pumpkin_stem", - "block.minecraft.carved_pumpkin"); - - @Inject(method = "spawnDestroyParticles", at = @At("HEAD"), cancellable = true) - private void v5$spawnBreakParticles(CallbackInfo ci) { - if (!V5MixinStorage.getBoolean("hideParticles", false)) { - return; - } - - String blockKey = ((Block) (Object) this).getDescriptionId(); - if (TARGET_KEYS.contains(blockKey)) { - ci.cancel(); - } - } -} diff --git a/src/main/java/com/v5/mixins/ChatComponentMixin.java b/src/main/java/com/v5/mixins/ChatComponentMixin.java deleted file mode 100644 index 1c942c28..00000000 --- a/src/main/java/com/v5/mixins/ChatComponentMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.v5.mixins; - -import com.v5.storage.ProfileHiderProcessor; -import net.minecraft.client.gui.components.ChatComponent; -import net.minecraft.network.chat.Component; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(ChatComponent.class) -public class ChatComponentMixin { - @ModifyVariable( - method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/multiplayer/chat/GuiMessageSource;Lnet/minecraft/client/multiplayer/chat/GuiMessageTag;)V", - at = @At("HEAD"), - ordinal = 0, - argsOnly = true) - private Component v5$processMessage(Component original) { - return ProfileHiderProcessor.process(original); - } -} diff --git a/src/main/java/com/v5/mixins/ConnectionMixin.java b/src/main/java/com/v5/mixins/ConnectionMixin.java deleted file mode 100644 index 5c12c7e4..00000000 --- a/src/main/java/com/v5/mixins/ConnectionMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.v5.mixins; - -import com.chattriggers.ctjs.api.triggers.PacketEvent; -import net.minecraft.network.Connection; -import net.minecraft.network.PacketListener; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundBundlePacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Connection.class) -public class ConnectionMixin { - - @Inject(method = "genericsFtw", at = @At("HEAD")) - private static void onPacketReceived(Packet packet, PacketListener listener, CallbackInfo ci) { - if (packet instanceof ClientboundBundlePacket bundlePacket) { - for (Packet subPacket : bundlePacket.subPackets()) { - PacketEvent.RECEIVE.invoker().trigger(subPacket); - } - } else { - PacketEvent.RECEIVE.invoker().trigger(packet); - } - } -} diff --git a/src/main/java/com/v5/mixins/DrawContextCapture.java b/src/main/java/com/v5/mixins/DrawContextCapture.java deleted file mode 100644 index 8cdd1364..00000000 --- a/src/main/java/com/v5/mixins/DrawContextCapture.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.v5.mixins; - -import net.minecraft.client.gui.GuiGraphicsExtractor; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.DeltaTracker; -import com.chattriggers.ctjs.api.render.DrawContextHolder; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Gui.class) -public class DrawContextCapture { - @Inject(method = "extractRenderState", at = @At("HEAD")) - private void captureContext(GuiGraphicsExtractor context, DeltaTracker tickCounter, CallbackInfo ci) { - DrawContextHolder.setCurrentContext(context); - } -} diff --git a/src/main/java/com/v5/mixins/GameRendererMixin.java b/src/main/java/com/v5/mixins/GameRendererMixin.java deleted file mode 100644 index b47641c2..00000000 --- a/src/main/java/com/v5/mixins/GameRendererMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.v5.mixins; - -import com.mojang.blaze3d.buffers.GpuBufferSlice; -import com.chattriggers.ctjs.api.render.NVGRenderer; -import net.minecraft.client.gui.render.GuiRenderer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(GuiRenderer.class) -public class GameRendererMixin { - @Inject(method = "render", at = @At("HEAD")) - private void beforeRender(GpuBufferSlice fogBuffer, CallbackInfo ci) { - NVGRenderer.runPreDrawables(); - } - - @Inject(method = "render", at = @At("TAIL")) - private void onRender(GpuBufferSlice fogBuffer, CallbackInfo ci) { - NVGRenderer.runDrawables(); - } -} diff --git a/src/main/java/com/v5/mixins/LevelRendererMixin.java b/src/main/java/com/v5/mixins/LevelRendererMixin.java deleted file mode 100644 index cd455219..00000000 --- a/src/main/java/com/v5/mixins/LevelRendererMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.v5.mixins; - -import com.mojang.blaze3d.buffers.GpuBufferSlice; -import com.mojang.blaze3d.framegraph.FrameGraphBuilder; -import com.v5.storage.V5MixinStorage; -import net.minecraft.client.DeltaTracker; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.chunk.ChunkSectionsToRender; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.client.renderer.state.level.LevelRenderState; -import net.minecraft.util.profiling.ProfilerFiller; -import org.joml.Matrix4fc; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LevelRenderer.class) -public class LevelRendererMixin { - - @ModifyVariable(method = "cullTerrain", at = @At("HEAD"), argsOnly = true) - private boolean v5$useSpectatorCullingInFreecam(boolean spectator) { - return spectator || V5MixinStorage.getBoolean("freecamEnabled", false); - } - - @Inject(method = "addMainPass", at = @At("HEAD"), cancellable = true) - private void v5$renderMain(FrameGraphBuilder frameGraphBuilder, Frustum frustum, Matrix4fc matrix4f, GpuBufferSlice gpuBufferSlice, boolean renderBlockOutline, LevelRenderState worldRenderState, DeltaTracker deltaTracker, ProfilerFiller profiler, ChunkSectionsToRender chunkSectionsToRender, CallbackInfo ci) { - if (V5MixinStorage.getBoolean("macroEnabled", false) - && "No Render".equals(V5MixinStorage.getString("renderLimiter", "Off"))) { - ci.cancel(); - } - } -} diff --git a/src/main/java/com/v5/mixins/MinecraftMixin.java b/src/main/java/com/v5/mixins/MinecraftMixin.java deleted file mode 100644 index c574372a..00000000 --- a/src/main/java/com/v5/mixins/MinecraftMixin.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.v5.mixins; - -import com.chattriggers.ctjs.api.client.Client; -import com.v5.storage.V5MixinStorage; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import net.minecraft.client.Minecraft; -import net.minecraft.client.Options; -import net.minecraft.client.KeyMapping; -import net.minecraft.client.CameraType; -import net.minecraft.sounds.SoundSource; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Minecraft.class) -public class MinecraftMixin { - - @Shadow @Final public Options options; - - @ModifyExpressionValue( - method = "pauseIfInactive", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/client/Options;pauseOnLostFocus:Z", - opcode = Opcodes.GETFIELD - )) - private boolean v5$pauseIfInactive(boolean original) { - return false; - } - - @ModifyExpressionValue( - method = "handleKeybinds", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/MouseHandler;isMouseGrabbed()Z" - ) - ) - private boolean v5$allowAttackWhileUngrabbed(boolean original) { - return original || V5MixinStorage.getBoolean("ungrabbed", false) || Client.automatedAttackHeld; - } - - @Inject(method = "handleKeybinds()V", at = @At("HEAD")) - private void v5$handleInputEvents(CallbackInfo ci) { - if (!V5MixinStorage.getBoolean("inputLocked", false)) { - return; - } - - for (KeyMapping key : options.keyHotbarSlots) { - if (key.consumeClick()) { - key.setDown(false); - } - } - } - - @Inject(method = "tick()V", at = @At("HEAD")) - private void v5$tickRenderLimiter(CallbackInfo ci) { - int currentDist = options.renderDistance().get(); - CameraType currentPerspective = options.getCameraType(); - int currentFps = options.framerateLimit().get(); - float currentMasterVolume = options.getFinalSoundSourceVolume(SoundSource.MASTER); - - boolean macroEnabled = V5MixinStorage.getBoolean("macroEnabled", false); - String renderLimiter = V5MixinStorage.getString("renderLimiter", "Off"); - boolean forcePerspective = V5MixinStorage.getBoolean("forcePerspective", false); - boolean limitFps = V5MixinStorage.getBoolean("limitFps", false); - boolean muteGame = V5MixinStorage.getBoolean("muteGame", false); - - Object savedDistanceObj = V5MixinStorage.get("savedDistance", null); - if (macroEnabled && "Limit Chunks".equals(renderLimiter)) { - if (savedDistanceObj == null) { - V5MixinStorage.set("savedDistance", currentDist); - } - if (currentDist != 2) { - options.renderDistance().set(2); - } - } else if (savedDistanceObj instanceof Number savedDistanceNum) { - int savedDistance = savedDistanceNum.intValue(); - if (currentDist != savedDistance) { - options.renderDistance().set(savedDistance); - } - V5MixinStorage.set("savedDistance", null); - } - - Object savedPerspectiveObj = V5MixinStorage.get("savedPerspective", null); - if (macroEnabled && forcePerspective) { - if (savedPerspectiveObj == null) { - V5MixinStorage.set("savedPerspective", currentPerspective); - } - if (currentPerspective != CameraType.THIRD_PERSON_BACK) { - options.setCameraType(CameraType.THIRD_PERSON_BACK); - } - } else if (savedPerspectiveObj instanceof CameraType savedPerspective) { - if (currentPerspective != savedPerspective) { - options.setCameraType(savedPerspective); - } - V5MixinStorage.set("savedPerspective", null); - } - - Object savedFpsObj = V5MixinStorage.get("savedFps", null); - if (macroEnabled && limitFps) { - if (savedFpsObj == null) { - V5MixinStorage.set("savedFps", currentFps); - } - if (currentFps != 30) { - options.framerateLimit().set(30); - } - } else if (savedFpsObj instanceof Number savedFpsNum) { - int savedFps = savedFpsNum.intValue(); - if (currentFps != savedFps) { - int restoreValue = savedFps > 240 ? 260 : savedFps; - options.framerateLimit().set(restoreValue); - } - V5MixinStorage.set("savedFps", null); - } - - Object savedMasterVolumeObj = V5MixinStorage.get("savedMasterVolume", null); - if (macroEnabled && muteGame) { - if (savedMasterVolumeObj == null) { - V5MixinStorage.set("savedMasterVolume", currentMasterVolume); - } - if (Float.compare(currentMasterVolume, 0.0F) != 0) { - options.getSoundSourceOptionInstance(SoundSource.MASTER).set(0.0D); - } - } else if (savedMasterVolumeObj instanceof Number savedMasterVolumeNum) { - float savedMasterVolume = savedMasterVolumeNum.floatValue(); - if (Float.compare(currentMasterVolume, savedMasterVolume) != 0) { - options.getSoundSourceOptionInstance(SoundSource.MASTER).set((double) savedMasterVolume); - } - V5MixinStorage.set("savedMasterVolume", null); - } - } -} diff --git a/src/main/java/com/v5/mixins/MouseHandlerMixin.java b/src/main/java/com/v5/mixins/MouseHandlerMixin.java deleted file mode 100644 index 995a8b0a..00000000 --- a/src/main/java/com/v5/mixins/MouseHandlerMixin.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.v5.mixins; - -import com.chattriggers.ctjs.api.client.Client; -import com.mojang.blaze3d.platform.InputConstants; -import com.v5.storage.V5MixinStorage; -import net.minecraft.client.Minecraft; -import net.minecraft.client.MouseHandler; -import net.minecraft.client.input.MouseButtonInfo; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.util.Mth; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.lwjgl.glfw.GLFW; - -@Mixin(MouseHandler.class) -public class MouseHandlerMixin { - private int v5$guiMouseButton = -1; - - private boolean v5$cameraLookEnabled() { - return V5MixinStorage.getBoolean("freecamEnabled", false) - || V5MixinStorage.getBoolean("freelookEnabled", false); - } - - @Inject(method = "onButton", at = @At("HEAD"), cancellable = true) - private void v5$cancelFreecamClick(long window, MouseButtonInfo button, int action, CallbackInfo ci) { - Minecraft client = Minecraft.getInstance(); - if (action == GLFW.GLFW_PRESS && client.screen != null) { - v5$guiMouseButton = button.button(); - } else if (action == GLFW.GLFW_RELEASE) { - if (button.button() == v5$guiMouseButton) { - v5$guiMouseButton = -1; - } else if (!v5$cameraLookEnabled() || (button.button() != 0 && button.button() != 1)) { - Client.releaseHeldKey(InputConstants.Type.MOUSE.getOrCreate(button.button())); - } - } - - if (v5$cameraLookEnabled() - && client.screen == null - && (button.button() == 0 || button.button() == 1)) { - ci.cancel(); - } - } - - @Redirect( - method = "turnPlayer(D)V", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V")) - private void v5$turnFreecam(LocalPlayer player, double yawDelta, double pitchDelta) { - if (!v5$cameraLookEnabled()) { - player.turn(yawDelta, pitchDelta); - return; - } - - Object yaw = V5MixinStorage.get("cameraOverrideYaw", player.getYRot()); - Object pitch = V5MixinStorage.get("cameraOverridePitch", player.getXRot()); - if (yaw instanceof Number yawNumber && pitch instanceof Number pitchNumber) { - V5MixinStorage.set("cameraOverrideYaw", yawNumber.floatValue() + (float) yawDelta * 0.15F); - V5MixinStorage.set( - "cameraOverridePitch", - Mth.clamp(pitchNumber.floatValue() + (float) pitchDelta * 0.15F, -90.0F, 90.0F)); - } - } - - @Inject(method = "grabMouse()V", at = @At("HEAD"), cancellable = true) - private void v5$lockCursor(CallbackInfo ci) { - if (V5MixinStorage.getBoolean("ungrabbed", false)) { - Client.resumeHeldKeys(); - ci.cancel(); - } - } - - @Inject(method = "grabMouse()V", at = @At("TAIL")) - private void v5$restoreHeldKeys(CallbackInfo ci) { - Client.resumeHeldKeys(); - } - - @Inject(method = "turnPlayer(D)V", at = @At("HEAD"), cancellable = true) - private void v5$updateMouse(CallbackInfo ci) { - if (V5MixinStorage.getBoolean("ungrabbed", false)) { - ci.cancel(); - } - } - - @Inject(method = "onScroll(JDD)V", at = @At("HEAD"), cancellable = true) - private void v5$onMouseScroll(long window, double horizontalScroll, double verticalScroll, CallbackInfo ci) { - Minecraft client = Minecraft.getInstance(); - if (V5MixinStorage.getBoolean("freelookEnabled", false) && client.screen == null) { - Object storedDistance = V5MixinStorage.get("freelookCameraDistance", 4.0); - double distance = storedDistance instanceof Number number ? number.doubleValue() : 4.0; - V5MixinStorage.set("freelookCameraDistance", Mth.clamp(distance - verticalScroll, 1.0, 12.0)); - ci.cancel(); - return; - } - - if (!V5MixinStorage.getBoolean("inputLocked", false)) { - return; - } - - if (client != null && client.screen == null) { - ci.cancel(); - } - } -} diff --git a/src/main/java/com/v5/storage/ProfileHiderProcessor.java b/src/main/java/com/v5/storage/ProfileHiderProcessor.java deleted file mode 100644 index 6e9d337c..00000000 --- a/src/main/java/com/v5/storage/ProfileHiderProcessor.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.v5.storage; - -import java.awt.Color; -import java.util.Optional; -import java.util.regex.Pattern; -import net.minecraft.client.Minecraft; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.network.chat.Style; - -public final class ProfileHiderProcessor { - private ProfileHiderProcessor() {} - - public static Component process(Component original) { - if (!V5MixinStorage.getBoolean("profileHiderEnabled", false)) { - return original; - } - - String username = Minecraft.getInstance().getUser().getName(); - String replacement = V5MixinStorage.getString("profileHiderReplacement", "Hidden"); - MutableComponent result = Component.empty(); - - original.visit( - (style, content) -> { - String[] parts = content.split(Pattern.quote(username), -1); - for (int i = 0; i < parts.length; i++) { - if (!parts[i].isEmpty()) { - result.append(Component.literal(parts[i]).setStyle(style)); - } - if (i < parts.length - 1) { - result.append(replacement(replacement)); - } - } - return Optional.empty(); - }, - Style.EMPTY); - return result; - } - - private static Component replacement(String value) { - if (value.matches("^#[0-9a-fA-F]{6}.+")) { - return Component.literal(value.substring(7)).withColor(Integer.parseInt(value.substring(1, 7), 16)); - } - if (value.indexOf('&') >= 0 || value.indexOf('§') >= 0) { - return Component.literal(value.replace('&', '§')); - } - - MutableComponent result = Component.empty(); - for (int i = 0; i < value.length(); i++) { - float hue = (System.currentTimeMillis() % 2000) / 2000F + i / 40F; - int color = Color.HSBtoRGB(hue % 1, 0.8F, 1F) & 0xFFFFFF; - result.append(Component.literal(String.valueOf(value.charAt(i))).withColor(color).withStyle(style -> style.withBold(true))); - } - return result; - } -} diff --git a/src/main/java/com/v5/storage/V5MixinStorage.java b/src/main/java/com/v5/storage/V5MixinStorage.java deleted file mode 100644 index 3345d1e2..00000000 --- a/src/main/java/com/v5/storage/V5MixinStorage.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.v5.storage; - -import com.chattriggers.ctjs.internal.engine.JSLoader; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.function.Function; -import org.mozilla.javascript.Callable; -import org.mozilla.javascript.ScriptRuntime; -import org.mozilla.javascript.Undefined; - -public final class V5MixinStorage { - private static final String METHOD_PREFIX = "method_"; - private static final Map STORAGE = getSharedStorage(); - - private V5MixinStorage() {} - - @SuppressWarnings("unchecked") - private static Map getSharedStorage() { - Object existing = System.getProperties().get("V5Mixin.storage"); - if (existing instanceof Map) { - return (Map) existing; - } - - Map storage = new HashMap<>(); - System.getProperties().put("V5Mixin.storage", storage); - return storage; - } - - public static Object get(String key, Object defaultValue) { - return STORAGE.getOrDefault(key, defaultValue); - } - - public static boolean getBoolean(String key, boolean defaultValue) { - Object value = get(key, defaultValue); - if (value == null || value == Undefined.instance) { - return defaultValue; - } - - if (value instanceof Boolean bool) { - return bool; - } - - if (value instanceof Number number) { - return number.doubleValue() != 0.0D; - } - - if (value instanceof CharSequence sequence) { - String normalized = sequence.toString().trim().toLowerCase(Locale.ROOT); - if ("true".equals(normalized)) return true; - if ("false".equals(normalized)) return false; - return defaultValue; - } - - return convertOrDefault(value, ScriptRuntime::toBoolean, defaultValue); - } - - public static String getString(String key, String defaultValue) { - Object value = get(key, defaultValue); - if (value == null || value == Undefined.instance) { - return defaultValue; - } - - if (value instanceof String str) { - return str; - } - - return convertOrDefault(value, ScriptRuntime::toString, defaultValue); - } - - public static void set(String key, Object value) { - STORAGE.put(key, value); - } - - public static void clear() { - Object savedDistance = STORAGE.get("savedDistance"); - Object savedPerspective = STORAGE.get("savedPerspective"); - Object savedFps = STORAGE.get("savedFps"); - Object savedMasterVolume = STORAGE.get("savedMasterVolume"); - STORAGE.clear(); - if (savedDistance != null) STORAGE.put("savedDistance", savedDistance); - if (savedPerspective != null) STORAGE.put("savedPerspective", savedPerspective); - if (savedFps != null) STORAGE.put("savedFps", savedFps); - if (savedMasterVolume != null) STORAGE.put("savedMasterVolume", savedMasterVolume); - } - - public static T applyMethod(String methodName, T original, Class expectedType) { - Object value = STORAGE.get(METHOD_PREFIX + methodName); - if (!(value instanceof Callable callable)) { - return original; - } - - try { - Object result = JSLoader.invokeMixin(callable, new Object[] { original }); - if (result == null || result == Undefined.instance) { - return original; - } - - if (expectedType.isInstance(result)) { - return expectedType.cast(result); - } - } catch (Throwable ignored) { - } - - return original; - } - - private static T convertOrDefault(Object value, Function converter, T defaultValue) { - try { - return converter.apply(value); - } catch (Throwable ignored) { - return defaultValue; - } - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/CTJS.kt b/src/main/kotlin/com/chattriggers/ctjs/CTJS.kt index a05ad542..a00337a9 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/CTJS.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/CTJS.kt @@ -1,14 +1,16 @@ package com.chattriggers.ctjs +import com.chattriggers.ctjs.api.V5Irc import com.chattriggers.ctjs.api.Config import com.chattriggers.ctjs.api.client.Client +import com.chattriggers.ctjs.api.client.DiscordRPC import com.chattriggers.ctjs.api.client.KeyBind import com.chattriggers.ctjs.api.client.Sound -import com.chattriggers.ctjs.api.client.WelcomeScreen import com.chattriggers.ctjs.api.commands.DynamicCommands import com.chattriggers.ctjs.api.message.ChatLib import com.chattriggers.ctjs.api.render.Image -import com.chattriggers.ctjs.api.render.NVGRenderer +import com.chattriggers.ctjs.api.render.Render2D +import com.chattriggers.ctjs.api.render.skia.createSkijaPIP import com.chattriggers.ctjs.api.triggers.TriggerType import com.chattriggers.ctjs.api.world.Scoreboard import com.chattriggers.ctjs.api.world.World @@ -20,9 +22,9 @@ import com.chattriggers.ctjs.internal.launch.SecureLoader import com.chattriggers.ctjs.internal.utils.Initializer import kotlinx.serialization.json.Json import net.fabricmc.api.ClientModInitializer -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents +import net.fabricmc.fabric.api.client.rendering.v1.PictureInPictureRendererRegistry import net.fabricmc.loader.api.FabricLoader -import net.minecraft.client.gui.screens.TitleScreen import java.io.File import java.net.URI import java.net.URLConnection @@ -30,41 +32,40 @@ import kotlin.concurrent.thread class CTJS : ClientModInitializer { override fun onInitializeClient() { + PictureInPictureRendererRegistry.register { input -> createSkijaPIP(input, pre = false) } + PictureInPictureRendererRegistry.register { input -> createSkijaPIP(input, pre = true) } Client.referenceSystemTime = System.nanoTime() Initializer.initializers.forEach(Initializer::init) Config.loadData() - var autoOpenTriggered = false - ClientTickEvents.END_CLIENT_TICK.register { client -> - val currentScreen = client.screen ?: return@register - val isMenuScreen = currentScreen is TitleScreen - - if (autoOpenTriggered || Config.wasWelcomeShown() || !isMenuScreen) return@register - autoOpenTriggered = true - WelcomeScreen.open() - } - - SecureLoader.onInitialize() - - Runtime.getRuntime().addShutdownHook(Thread { + ClientLifecycleEvents.CLIENT_STOPPING.register { _ -> + V5Irc.stop() + Render2D.destroy() TriggerType.GAME_UNLOAD.triggerAll() + DiscordRPC.turnOff() Console.close() - }) + } + + V5Irc.reconnect() } companion object { const val MOD_ID = "ctjs" const val WEBSITE_ROOT = "https://www.chattriggers.com" - const val MOD_VERSION = "5.1.1" + val MOD_VERSION = FabricLoader.getInstance().getModContainer(MOD_ID).orElseThrow().metadata.version.friendlyString const val MODULES_FOLDER = "./config/ChatTriggers/modules" val configLocation = File("./config") val assetsDir = File(configLocation, "ChatTriggers/assets/").apply { mkdirs() } @JvmStatic + @Volatile var isLoaded = true private set + @Volatile + private var isReloading = false + internal val images = mutableListOf() internal val sounds = mutableListOf() internal val isDevelopment = FabricLoader.getInstance().isDevelopmentEnvironment @@ -96,17 +97,15 @@ class CTJS : ClientModInitializer { Register.clearCustomTriggers() StaticCommand.unregisterAll() DynamicCommands.unregisterAll() - NVGRenderer.clearCallbacks() + Render2D.clearCallbacks() if (Config.clearConsoleOnLoad) Console.clear() Client.scheduleTask { - images.forEach(Image::destroy) - sounds.forEach(Sound::destroy) - - images.clear() - sounds.clear() + Render2D.destroy() + images.toList().forEach(Image::destroy) + sounds.toList().forEach(Sound::destroy) } if (asCommand) @@ -114,7 +113,11 @@ class CTJS : ClientModInitializer { } @JvmStatic + @Synchronized fun load(asCommand: Boolean = true) { + if (isReloading) return + isReloading = true + Client.getMinecraft().options.save() unload(asCommand = false) @@ -122,22 +125,26 @@ class CTJS : ClientModInitializer { ChatLib.chat("&cReloading ChatTriggers...") thread { - SecureLoader.reload() - ModuleManager.setup() - Client.getMinecraft().options.load() - - // Need to set isLoaded to true before running modules, otherwise custom triggers - // activated at the top level will not work - isLoaded = true - - ModuleManager.entryPass() - - if (asCommand) - ChatLib.chat("&aDone reloading!") - - TriggerType.GAME_LOAD.triggerAll() - if (World.isLoaded()) - TriggerType.WORLD_LOAD.triggerAll() + try { + SecureLoader.reload() + ModuleManager.setup() + Client.getMinecraft().options.load() + + // Need to set isLoaded to true before running modules, otherwise custom triggers + // activated at the top level will not work + isLoaded = true + + ModuleManager.entryPass() + + if (asCommand) + ChatLib.chat("&aDone reloading!") + + TriggerType.GAME_LOAD.triggerAll() + if (World.isLoaded()) + TriggerType.WORLD_LOAD.triggerAll() + } finally { + isReloading = false + } } } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/Config.kt b/src/main/kotlin/com/chattriggers/ctjs/api/Config.kt index 3f799994..d048ff04 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/Config.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/Config.kt @@ -56,14 +56,6 @@ object Config : Vigilant(File(CTJS.configLocation, "ChatTriggers.toml"), sorting ) var sendStatistics = false - @Property( - PropertyType.SWITCH, - name = "Welcome shown", - category = "General", - hidden = true, - ) - private var welcomeShown = false - @JvmStatic @Property( PropertyType.SWITCH, @@ -183,16 +175,6 @@ object Config : Vigilant(File(CTJS.configLocation, "ChatTriggers.toml"), sorting listenToConsoleProperty(::consoleWarningColor) } - @JvmStatic - fun wasWelcomeShown(): Boolean = welcomeShown - - @JvmStatic - fun markWelcomeShown() { - welcomeShown = true - markDirty() - writeData() - } - private inline fun listenToConsoleProperty(property: KProperty) { val field = ConsoleSettings::class.java.getDeclaredField(property.name) field.isAccessible = true diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/V5Auth.kt b/src/main/kotlin/com/chattriggers/ctjs/api/V5Auth.kt index a2168738..b4dda679 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/V5Auth.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/V5Auth.kt @@ -1,8 +1,12 @@ package com.chattriggers.ctjs.api import com.chattriggers.ctjs.internal.launch.SecureLoader +import java.util.concurrent.CompletableFuture object V5Auth { + @JvmStatic + fun authenticate(): CompletableFuture = CompletableFuture.supplyAsync(SecureLoader::authenticate) + @JvmStatic fun getJwtToken(): String? = SecureLoader.getJwtToken() diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/V5Irc.kt b/src/main/kotlin/com/chattriggers/ctjs/api/V5Irc.kt new file mode 100644 index 00000000..f98c1daa --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/V5Irc.kt @@ -0,0 +1,198 @@ +package com.chattriggers.ctjs.api + +import com.chattriggers.ctjs.api.client.Client +import com.chattriggers.ctjs.api.message.Chat +import com.chattriggers.ctjs.internal.launch.SecureLoader +import com.v5.loader.internal.V5Http +import kotlinx.serialization.json.* +import java.net.URI +import java.net.http.HttpClient +import java.net.http.WebSocket +import java.time.Duration +import java.time.Instant +import java.time.format.DateTimeFormatterBuilder +import java.util.UUID +import java.util.concurrent.CompletionStage +import java.util.concurrent.Executors +import java.util.concurrent.ScheduledFuture +import java.util.concurrent.TimeUnit + +object V5Irc { + @JvmStatic @Volatile var enabled = true + @JvmStatic @Volatile var autoMeow = false + @JvmStatic @Volatile var randomChoiceMeow = true + + private val worker = Executors.newSingleThreadScheduledExecutor { task -> + Thread(task, "V5 IRC").apply { isDaemon = true } + } + private val http = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build() + private val connectionKey = UUID.randomUUID().toString().replace("-", "") + private val meows = listOf("meow!", "mrrp!", "mreow!", "mroew!", "mew!", "mrow!", "nya!", "prrrt!", "mraow!", "mrrow!") + private val muteDateFormat = DateTimeFormatterBuilder().appendInstant(3).toFormatter() + private var active: SocketListener? = null + private var retry: ScheduledFuture<*>? = null + private var attempts = 0 + private var stopped = false + + internal fun stop() { + worker.execute { + stopped = true + retry?.cancel(false) + active?.socket?.abort() + active = null + } + } + + @JvmStatic + fun reconnect() { + worker.execute { + if (stopped) return@execute + attempts = 0 + retry?.cancel(false) + connect() + } + } + + @JvmStatic + fun send(content: String) { + worker.execute { + val listener = active ?: return@execute + val socket = listener.socket ?: return@execute + if (!listener.authenticated) { + chat("&cAuthenticate V5 with Discord before sending IRC messages.") + return@execute + } + try { + socket.sendText(content, true).orTimeout(10, TimeUnit.SECONDS).join() + } catch (e: Exception) { + chat("Failed to send message") + listener.disconnect(error = e) + } + } + } + + private fun connect() { + if (stopped) return + active?.socket?.abort() + val token = SecureLoader.getFreshJwtToken() + val listener = SocketListener(!token.isNullOrBlank()) + active = listener + try { + val builder = http.newWebSocketBuilder() + .connectTimeout(Duration.ofSeconds(10)) + .header("Authorization", if (token.isNullOrBlank()) "Guest" else "Bearer $token") + .header("X-Connection-Key", connectionKey) + builder + .buildAsync(URI("wss://${V5Http.BACKEND_HOST}/api/chat"), listener) + .whenComplete { _, error -> + if (error != null) worker.execute { listener.disconnect(error = error) } + } + } catch (e: Exception) { + listener.disconnect(error = e) + } + } + + private class SocketListener(val authenticated: Boolean) : WebSocket.Listener { + var socket: WebSocket? = null + private var connectedAt = 0L + private val message = StringBuilder() + + override fun onOpen(webSocket: WebSocket) { + worker.execute { + if (active !== this || stopped) { + webSocket.abort() + } else { + socket = webSocket + connectedAt = System.nanoTime() + webSocket.request(1) + } + } + } + + override fun onText(webSocket: WebSocket, data: CharSequence, last: Boolean): CompletionStage<*>? { + val fragment = data.toString() + worker.execute { + if (active !== this || stopped) return@execute + if (message.length + fragment.length > 1_048_576) { + disconnect(error = IllegalArgumentException("IRC message exceeds 1 MiB")) + return@execute + } + message.append(fragment) + if (last) { + handleMessage(message.toString()) + message.setLength(0) + } + webSocket.request(1) + } + return null + } + + override fun onClose(webSocket: WebSocket, statusCode: Int, reason: String): CompletionStage<*>? { + worker.execute { disconnect(statusCode) } + return null + } + + override fun onError(webSocket: WebSocket, error: Throwable) { + worker.execute { disconnect(error = error) } + } + + fun disconnect(code: Int? = null, error: Throwable? = null) { + if (active !== this) return + active = null + socket?.abort() + if (stopped || code == WebSocket.NORMAL_CLOSURE) return + if (connectedAt != 0L && System.nanoTime() - connectedAt >= TimeUnit.SECONDS.toNanos(10)) attempts = 0 + if (error != null) { + chat("Connection error: ${error.cause?.message ?: error.message}") + error.printStackTrace() + } + val delay = if (attempts == 0) 0L else (1L shl attempts.coerceAtMost(6)).coerceAtMost(60) + attempts = (attempts + 1).coerceAtMost(7) + retry = worker.schedule({ connect() }, delay, TimeUnit.SECONDS) + } + } + + private fun handleMessage(raw: String) { + try { + val data = Json.parseToJsonElement(raw) as? JsonObject ?: return + fun value(key: String) = (data[key] as? JsonPrimitive)?.contentOrNull.orEmpty() + when (value("type")) { + "remote" -> if (value("action") == "crash_game") { + stopped = true + retry?.cancel(false) + active?.socket?.abort() + active = null + SecureLoader.killClientHard() + } + "message" -> if (enabled) { + chat("&9${value("user").ifEmpty { "Unknown" }}&r: ${value("msg")}") + if (autoMeow && value("msg").trim().equals("meow", ignoreCase = true)) { + send(if (randomChoiceMeow) meows.random() else "meow!") + } + } + "error" -> chat("Error: ${value("code").ifEmpty { "Unknown" }}") + "system" -> chat(when (value("code")) { + "PREFIX_UPDATED" -> "Your prefix has been changed" + "MUTED" -> { + val expiry = value("mute_expires_at").toDoubleOrNull()?.takeIf { it.isFinite() } + val date = expiry?.let { runCatching { muteDateFormat.format(Instant.ofEpochMilli((it * 1000).toLong())) }.getOrNull() } + if (date == null) "You have been muted" else "You have been muted until $date" + } + else -> "System: ${value("code")}" + }) + "announcement" -> if (enabled && value("msg").isNotEmpty()) { + Client.getMinecraft().execute { + Chat.sendGradientMsg("V5 Announcement »", 0xf4a261, 0xe76f51, value("msg")) + } + } + } + } catch (e: Exception) { + chat("An error occurred parsing message") + e.printStackTrace() + } + } + + private fun chat(message: String) { + Client.getMinecraft().execute { Chat.sendGradientMsg("IRC »", 0x05b9f9, 0x0539f9, message) } + } +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/Client.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/Client.kt index 6444345a..f05833a8 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/client/Client.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/client/Client.kt @@ -1,8 +1,10 @@ package com.chattriggers.ctjs.api.client +import com.chattriggers.ctjs.CTJS import com.chattriggers.ctjs.api.inventory.Slot import com.chattriggers.ctjs.api.message.TextComponent import com.chattriggers.ctjs.api.world.World +import com.chattriggers.ctjs.internal.engine.JSLoader import com.chattriggers.ctjs.internal.listeners.ClientListener import com.chattriggers.ctjs.internal.mixins.ChatScreenAccessor import com.chattriggers.ctjs.internal.mixins.AbstractSignEditScreenAccessor @@ -11,7 +13,9 @@ import com.chattriggers.ctjs.internal.mixins.AbstractContainerScreenAccessor import com.chattriggers.ctjs.internal.mixins.KeyMappingAccessor import com.chattriggers.ctjs.internal.mixins.MinecraftAccessor import com.chattriggers.ctjs.internal.utils.asMixin +import com.chattriggers.ctjs.internal.utils.NameReplacement import com.mojang.blaze3d.platform.InputConstants +import com.mojang.blaze3d.pipeline.RenderTarget import gg.essential.universal.UKeyboard import net.minecraft.client.Minecraft import net.minecraft.client.gui.components.ChatComponent @@ -32,11 +36,40 @@ import com.mojang.realmsclient.RealmsMainScreen import net.minecraft.network.protocol.Packet import net.minecraft.network.protocol.game.ServerGamePacketListener import net.minecraft.network.chat.Component +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.phys.Vec3 +import org.mozilla.javascript.Callable +import org.mozilla.javascript.Undefined object Client { + enum class RenderLimiter { + OFF, + LIMIT_CHUNKS, + NO_RENDER, + } + internal var referenceSystemTime: Long = 0 private val heldKeys = mutableSetOf() + @JvmStatic @Volatile var isFreecam = false + @JvmStatic @Volatile var isFreelook = false + @JvmStatic @Volatile var isUngrabbed = false + @JvmStatic @Volatile var isInputLocked = false + @JvmStatic @Volatile var isMacroEnabled = false + @JvmStatic @Volatile var isForcePerspective = false + @JvmStatic @Volatile var limitFps = false + @JvmStatic @Volatile var muteGame = false + @JvmStatic @Volatile var renderLimiter = RenderLimiter.OFF + @Volatile private var cameraYaw: Float? = null + @Volatile private var cameraPitch: Float? = null + @JvmStatic @Volatile var cameraPosition: Vec3? = null + @JvmStatic @Volatile var freelookDistance = 4.0 + set(value) { + field = value.coerceIn(1.0, 12.0) + } + @JvmStatic @Volatile var spectatedEntity: LivingEntity? = null + @Volatile private var nameProcessor: Callable? = null + @JvmField internal var automatedAttackHeld = false @@ -46,6 +79,51 @@ object Client { @JvmField val camera = CameraWrapper() + @JvmStatic + fun setCameraRotation(yaw: Float, pitch: Float) { + cameraYaw = yaw + cameraPitch = pitch + } + + @JvmStatic + fun clearCameraRotation() { + cameraYaw = null + cameraPitch = null + } + + @JvmStatic + fun getCameraYaw(): Float? = cameraYaw + + @JvmStatic + fun getCameraPitch(): Float? = cameraPitch + + @JvmStatic + fun setNameProcessor(processor: Callable?) { + nameProcessor = processor + } + + @JvmStatic + fun setNameReplacement(username: String?, replacement: String?) { + NameReplacement.configure(username, replacement) + } + + @JvmStatic + fun hasNameProcessor(): Boolean = nameProcessor != null && CTJS.isLoaded + + @JvmStatic + fun processName(original: Component): Component { + if (!CTJS.isLoaded) return original + val renamed = NameReplacement.process(original) + val processor = nameProcessor ?: return renamed + + return try { + val result = JSLoader.invokeMixin(processor, arrayOf(renamed)) + if (result != null && result != Undefined.instance && result is Component) result else renamed + } catch (_: Throwable) { + renamed + } + } + /** * Gets Minecraft's Minecraft object * @@ -83,13 +161,11 @@ object Client { scheduleTask { World.toMC()?.disconnect(Component.empty()) - getMinecraft().setScreen( - when { - getMinecraft().isLocalServer -> TitleScreen() - getMinecraft().currentServer?.isRealm == true -> RealmsMainScreen(TitleScreen()) - else -> JoinMultiplayerScreen(TitleScreen()) - } - ) + getMinecraft().setScreenCompat(when { + getMinecraft().isLocalServer -> TitleScreen() + getMinecraft().currentServer?.isRealm == true -> RealmsMainScreen(TitleScreen()) + else -> JoinMultiplayerScreen(TitleScreen()) + }) } } @@ -112,19 +188,31 @@ object Client { } } + @JvmStatic + fun getCurrentScreen(): Screen? = getMinecraft().screenCompat + + @JvmStatic + fun setCurrentScreen(screen: Screen?) = getMinecraft().setScreenCompat(screen) + + @JvmStatic + fun getMainRenderTarget(): RenderTarget = MinecraftCompat.mainRenderTarget(getMinecraft()) + + @JvmStatic + fun reloadWorldRenderer() = MinecraftCompat.reloadLevelRenderer(getMinecraft()) + /** * Gets the Minecraft ChatHud object for the chat gui * * @return The GuiNewChat object for the chat gui */ @JvmStatic - fun getChatGui(): ChatComponent? = getMinecraft().gui.chat + fun getChatGui(): ChatComponent? = getMinecraft().gui.chatCompat @JvmStatic - fun isInChat(): Boolean = getMinecraft().screen is ChatScreen + fun isInChat(): Boolean = getMinecraft().screenCompat is ChatScreen @JvmStatic - fun getTabGui(): PlayerTabOverlay? = getMinecraft().gui.tabList + fun getTabGui(): PlayerTabOverlay? = getMinecraft().gui.tabListCompat @JvmStatic fun isInTab(): Boolean = getMinecraft().options.keyPlayerList.isDown @@ -179,7 +267,7 @@ object Client { @JvmStatic fun getCurrentChatMessage(): String { return if (isInChat()) { - val chatGui = getMinecraft().screen as ChatScreen + val chatGui = getMinecraft().screenCompat as ChatScreen chatGui.asMixin().input.value } else "" } @@ -192,14 +280,14 @@ object Client { @JvmStatic fun setCurrentChatMessage(message: String) { if (isInChat()) { - val chatGui = getMinecraft().screen as ChatScreen + val chatGui = getMinecraft().screenCompat as ChatScreen chatGui.asMixin().input.value = message } else currentGui.set(ChatScreen(message, false)) } @JvmStatic fun setSignLine(line: Int, text: String) { - val messages = (getMinecraft().screen as? AbstractSignEditScreen) + val messages = (getMinecraft().screenCompat as? AbstractSignEditScreen) ?.asMixin() ?.messages ?: return if (line in messages.indices) messages[line] = text @@ -221,8 +309,8 @@ object Client { private fun canAutomateInput(minecraft: Minecraft) = minecraft.level != null && minecraft.player != null && - minecraft.screen == null && - minecraft.overlay == null + minecraft.screenCompat == null && + minecraft.overlayCompat == null private fun mutateInput(action: (Minecraft) -> Unit) = getMinecraft().let { it.execute { action(it) } } @@ -323,12 +411,10 @@ object Client { */ @JvmStatic fun showTitle(title: String?, subtitle: String?, fadeIn: Int, time: Int, fadeOut: Int) { - getMinecraft().gui.apply { - setTimes(fadeIn, time, fadeOut) - if (title != null) - setTitle(TextComponent(title)) - if (subtitle != null) - setSubtitle(TextComponent(subtitle)) + getMinecraft().gui.let { gui -> + MinecraftCompat.setTimes(gui, fadeIn, time, fadeOut) + if (title != null) MinecraftCompat.setTitle(gui, TextComponent(title)) + if (subtitle != null) MinecraftCompat.setSubtitle(gui, TextComponent(subtitle)) } } @@ -408,11 +494,11 @@ object Client { * * @return the Minecraft gui */ - fun get(): Screen? = getMinecraft().screen + fun get(): Screen? = getMinecraft().screenCompat fun set(screen: Screen?) { scheduleTask { - getMinecraft().setScreen(screen) + getMinecraft().setScreenCompat(screen) } } @@ -437,10 +523,10 @@ object Client { } class CameraWrapper { - fun getX(): Double = getMinecraft().gameRenderer.mainCamera.position().x + fun getX(): Double = MinecraftCompat.mainCamera(getMinecraft().gameRenderer).position().x - fun getY(): Double = getMinecraft().gameRenderer.mainCamera.position().y + fun getY(): Double = MinecraftCompat.mainCamera(getMinecraft().gameRenderer).position().y - fun getZ(): Double = getMinecraft().gameRenderer.mainCamera.position().z + fun getZ(): Double = MinecraftCompat.mainCamera(getMinecraft().gameRenderer).position().z } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/MinecraftCompat.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/MinecraftCompat.kt new file mode 100644 index 00000000..a526116d --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/client/MinecraftCompat.kt @@ -0,0 +1,66 @@ +package com.chattriggers.ctjs.api.client + +//? if >=26.2 { +import com.chattriggers.ctjs.internal.mixins.GameRendererAccessor +import com.chattriggers.ctjs.internal.utils.asMixin +//?} +import com.mojang.blaze3d.pipeline.RenderTarget +import net.minecraft.client.Camera +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.Gui +import net.minecraft.client.gui.components.BossHealthOverlay +import net.minecraft.client.gui.components.ChatComponent +import net.minecraft.client.gui.components.PlayerTabOverlay +import net.minecraft.client.gui.components.toasts.ToastManager +import net.minecraft.client.gui.screens.Overlay +import net.minecraft.client.gui.screens.Screen +import net.minecraft.client.renderer.GameRenderer +import net.minecraft.client.renderer.SubmitNodeStorage +import net.minecraft.client.renderer.state.GameRenderState +import net.minecraft.network.chat.Component + +//? if <26.2 { +/*internal object MinecraftCompat { + fun bossOverlay(gui: Gui): BossHealthOverlay = gui.bossOverlay + fun setTimes(gui: Gui, fadeIn: Int, stay: Int, fadeOut: Int) = gui.setTimes(fadeIn, stay, fadeOut) + fun setTitle(gui: Gui, title: Component) = gui.setTitle(title) + fun setSubtitle(gui: Gui, subtitle: Component) = gui.setSubtitle(subtitle) + fun toastManager(minecraft: Minecraft): ToastManager = minecraft.toastManager + fun mainCamera(renderer: GameRenderer): Camera = renderer.mainCamera + fun mainRenderTarget(minecraft: Minecraft): RenderTarget = minecraft.mainRenderTarget + fun reloadLevelRenderer(minecraft: Minecraft) = minecraft.levelRenderer.allChanged() + fun submitNodeStorage(renderer: GameRenderer): SubmitNodeStorage = renderer.submitNodeStorage + fun gameRenderState(renderer: GameRenderer): GameRenderState = renderer.gameRenderState + fun isSingleplayer(minecraft: Minecraft): Boolean = minecraft.isSingleplayer +} + +internal val Minecraft.screenCompat: Screen? get() = screen +internal val Minecraft.overlayCompat: Overlay? get() = overlay +internal fun Minecraft.setScreenCompat(screen: Screen?) = setScreen(screen) +internal val Gui.chatCompat: ChatComponent get() = chat +internal val Gui.tabListCompat: PlayerTabOverlay get() = tabList +*///?} else { +internal object MinecraftCompat { + fun bossOverlay(gui: Gui): BossHealthOverlay = gui.hud.bossOverlay + fun setTimes(gui: Gui, fadeIn: Int, stay: Int, fadeOut: Int) = gui.hud.setTimes(fadeIn, stay, fadeOut) + fun setTitle(gui: Gui, title: Component) = gui.hud.setTitle(title) + fun setSubtitle(gui: Gui, subtitle: Component) = gui.hud.setSubtitle(subtitle) + fun toastManager(minecraft: Minecraft): ToastManager = minecraft.gui.toastManager() + fun mainCamera(renderer: GameRenderer): Camera = renderer.mainCamera() + fun mainRenderTarget(minecraft: Minecraft): RenderTarget = minecraft.gameRenderer.mainRenderTarget() + fun reloadLevelRenderer(minecraft: Minecraft) { + val level = minecraft.level ?: return + minecraft.levelRenderer.invalidateCompiledGeometry(level, minecraft.options, mainCamera(minecraft.gameRenderer), minecraft.blockColors) + } + fun submitNodeStorage(renderer: GameRenderer): SubmitNodeStorage = + renderer.asMixin().handAndScreenSubmitNodeStorage + fun gameRenderState(renderer: GameRenderer): GameRenderState = renderer.gameRenderState() + fun isSingleplayer(minecraft: Minecraft): Boolean = minecraft.hasSingleplayerServer() +} + +internal val Minecraft.screenCompat: Screen? get() = gui.screen() +internal val Minecraft.overlayCompat: Overlay? get() = gui.overlay() +internal fun Minecraft.setScreenCompat(screen: Screen?) = gui.setScreen(screen) +internal val Gui.chatCompat: ChatComponent get() = hud.chat +internal val Gui.tabListCompat: PlayerTabOverlay get() = hud.tabList +//?} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/Player.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/Player.kt index 86ffa961..d7a42672 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/client/Player.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/client/Player.kt @@ -6,7 +6,7 @@ import com.chattriggers.ctjs.api.entity.Team import com.chattriggers.ctjs.api.inventory.Inventory import com.chattriggers.ctjs.api.inventory.Item import com.chattriggers.ctjs.api.message.TextComponent -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.api.world.PotionEffect import com.chattriggers.ctjs.api.world.Scoreboard import com.chattriggers.ctjs.api.world.World @@ -69,13 +69,13 @@ object Player { fun getLastZ(): Double = toMC()?.zOld ?: 0.0 @JvmStatic - fun getRenderX(): Double = getLastX() + (getX() - getLastX()) * Renderer.partialTicks + fun getRenderX(): Double = getLastX() + (getX() - getLastX()) * Render2D.partialTicks @JvmStatic - fun getRenderY(): Double = getLastY() + (getY() - getLastY()) * Renderer.partialTicks + fun getRenderY(): Double = getLastY() + (getY() - getLastY()) * Render2D.partialTicks @JvmStatic - fun getRenderZ(): Double = getLastZ() + (getZ() - getLastZ()) * Renderer.partialTicks + fun getRenderZ(): Double = getLastZ() + (getZ() - getLastZ()) * Render2D.partialTicks /** * Gets the player's x motion. @@ -307,18 +307,18 @@ object Player { * @return the currently opened container */ @JvmStatic - fun getContainer(): Inventory? = (Client.getMinecraft().screen as? AbstractContainerScreen<*>)?.let(::Inventory) + fun getContainer(): Inventory? = (Client.getMinecraft().screenCompat as? AbstractContainerScreen<*>)?.let(::Inventory) /** - * Draws the player in the GUI. Takes the same parameters as [Renderer.drawPlayer] + * Draws the player in the GUI. Takes the same parameters as [Render2D.drawPlayer] * minus `player`. * - * @see Renderer.drawPlayer + * @see Render2D.drawPlayer */ @JvmStatic fun draw(obj: NativeObject) = apply { obj["player"] = this - Renderer.drawPlayer(obj) + Render2D.drawPlayer(obj) } class ArmorWrapper { diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyInfo.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyInfo.kt index db268b68..862c9565 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyInfo.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyInfo.kt @@ -34,6 +34,9 @@ object ProxyInfo { } private fun saveProxies() { + val normalized = normalizeProxies(cachedProxies) + cachedProxies.clear() + cachedProxies.addAll(normalized) getProxyConfigFile().writeText(gson.toJson(cachedProxies)) } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyScreens.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyScreens.kt index 2f46fe5a..b5b47cb1 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyScreens.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/client/ProxyScreens.kt @@ -32,19 +32,19 @@ class ProxyManagerScreen(private val parent: Screen) : Screen(Component.literal( val buttonY = height - 28 addButton = addRenderableWidget( Button.builder(Component.literal("Add Proxy")) { - minecraft.setScreen(ProxyEditScreen(this, null)) + minecraft.setScreenCompat(ProxyEditScreen(this, null)) }.bounds(width / 2 - 102, buttonY, 100, 20).build() ) backButton = addRenderableWidget( Button.builder(Component.literal("Back")) { - minecraft.setScreen(parent) + minecraft.setScreenCompat(parent) }.bounds(width / 2 + 2, buttonY, 100, 20).build() ) syncRowButtons() } override fun onClose() { - minecraft.setScreen(parent) + minecraft.setScreenCompat(parent) } override fun extractRenderState(context: GuiGraphicsExtractor, mouseX: Int, mouseY: Int, delta: Float) { @@ -157,7 +157,7 @@ class ProxyManagerScreen(private val parent: Screen) : Screen(Component.literal( ) val edit = addRenderableWidget( Button.builder(Component.literal("Edit")) { - minecraft.setScreen(ProxyEditScreen(this, proxy)) + minecraft.setScreenCompat(ProxyEditScreen(this, proxy)) }.bounds(0, 0, 40, 20).build() ) val delete = addRenderableWidget( @@ -303,13 +303,13 @@ class ProxyEditScreen( ) cancelButton = addRenderableWidget( Button.builder(Component.literal("Cancel")) { - minecraft.setScreen(parent) + minecraft.setScreenCompat(parent) }.bounds(centerX + 5, height - 40, 100, 20).build() ) } override fun onClose() { - minecraft.setScreen(parent) + minecraft.setScreenCompat(parent) } private fun createField(centerX: Int, y: Int, placeholder: String, value: String?): EditBox { @@ -339,7 +339,7 @@ class ProxyEditScreen( } parent.refreshList() - minecraft.setScreen(parent) + minecraft.setScreenCompat(parent) } override fun extractRenderState(context: GuiGraphicsExtractor, mouseX: Int, mouseY: Int, delta: Float) { diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/ScreenHelper.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/ScreenHelper.kt index 743b0eb3..6bc214d9 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/client/ScreenHelper.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/client/ScreenHelper.kt @@ -1,10 +1,8 @@ package com.chattriggers.ctjs.api.client import com.chattriggers.ctjs.api.render.Font -import com.chattriggers.ctjs.api.render.NVGRenderer +import com.chattriggers.ctjs.api.render.Render2D import net.minecraft.util.ARGB -import org.lwjgl.nanovg.NanoVG.NVG_ALIGN_CENTER -import org.lwjgl.nanovg.NanoVG.NVG_ALIGN_MIDDLE object ScreenHelper { @JvmField @@ -41,17 +39,17 @@ object ScreenHelper { val defaultTextColor = if (hovered) argb(255, 255, 255, 255) else argb(252, 224, 232, 242) val textColor = textColorOverride ?: defaultTextColor - NVGRenderer.drawDropShadow(x, y, width, height, 5f, 14f, 1.3f, argb(60, 0, 10, 28)) - NVGRenderer.drawRoundedRect(x, y, width, height, 5f, bg) - NVGRenderer.drawHollowRect(x, y, width, height, 0.65f, border, 5f) - NVGRenderer.text( + Render2D.drawDropShadow(x, y, width, height, 5f, 14f, 1.3f, argb(60, 0, 10, 28)) + Render2D.drawRoundedRect(x, y, width, height, 5f, bg) + Render2D.drawHollowRect(x, y, width, height, 0.65f, border, 5f) + Render2D.text( label, x + width / 2f, y + height / 2f, 8.7f, textColor, smallerFont, - NVG_ALIGN_CENTER or NVG_ALIGN_MIDDLE + Render2D.ALIGN_CENTER or Render2D.ALIGN_MIDDLE ) } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/Sound.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/Sound.kt index 9aa61fd3..6e0fb5fe 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/client/Sound.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/client/Sound.kt @@ -131,6 +131,7 @@ class Sound(private val config: NativeObject) { soundManagerAccessor.registry.remove(identifier) soundManagerAccessor.soundCache.remove(identifier) } + CTJS.sounds.remove(this) } /** diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/client/WelcomeScreen.kt b/src/main/kotlin/com/chattriggers/ctjs/api/client/WelcomeScreen.kt deleted file mode 100644 index 5bc8af24..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/client/WelcomeScreen.kt +++ /dev/null @@ -1,206 +0,0 @@ -package com.chattriggers.ctjs.api.client - -import com.chattriggers.ctjs.api.Config -import net.minecraft.client.Minecraft -import net.minecraft.client.gui.GuiGraphicsExtractor -import net.minecraft.client.gui.screens.ConfirmLinkScreen -import net.minecraft.client.gui.screens.Screen -import net.minecraft.client.gui.components.Button -import net.minecraft.client.gui.components.EditBox -import net.minecraft.client.input.MouseButtonEvent -import net.minecraft.network.chat.Component -import net.minecraft.ChatFormatting -import net.minecraft.util.Util -import java.awt.Color - -class WelcomeScreen : Screen(Component.literal("Welcome Screen")) { - - companion object { - private const val SITE_URL = "https://rdbt.top/" - private const val GUIDE_URL = "https://rdbt.top/docs/ratted" - private const val REQUIRED_TEXT = "I UNDERSTAND" - private const val TITLE_SCALE = 3.0f - private const val TARGET_SCALE = 2.0f - private const val LINE_HEIGHT = 10f - - private const val TITLE_HEIGHT = 50 - private const val TEXT_LINES = 11 - private const val GAP_AFTER_TEXT = 15 - private const val INPUT_HEIGHT = 20 - private const val GAP_AFTER_INPUT = 10 - private const val BUTTON_HEIGHT = 20 - - @JvmStatic - fun open() { - val client = Minecraft.getInstance() - client.execute { client.setScreen(WelcomeScreen()) } - } - } - - private val forcedMultiplier = calculateForcedMultiplier() - private lateinit var inputBox: EditBox - private lateinit var closeButton: Button - private var contentOffsetY = 0f - - private fun calculateForcedMultiplier(): Float { - val currentScale = Minecraft.getInstance().window.guiScale.toFloat() - return if (currentScale < TARGET_SCALE) TARGET_SCALE / currentScale else 1.0f - } - - override fun shouldCloseOnEsc(): Boolean = false - - override fun init() { - super.init() - - val virtualHeight = (height / forcedMultiplier).toInt() - - val textHeight = (TEXT_LINES * LINE_HEIGHT).toInt() - val totalContentHeight = TITLE_HEIGHT + textHeight + GAP_AFTER_TEXT + INPUT_HEIGHT + GAP_AFTER_INPUT + BUTTON_HEIGHT - - contentOffsetY = (virtualHeight - totalContentHeight) / 2f - - val inputY = (contentOffsetY + TITLE_HEIGHT + textHeight + GAP_AFTER_TEXT).toInt() - val buttonY = inputY + INPUT_HEIGHT + GAP_AFTER_INPUT - - setupInputBox(inputY) - setupButtons(buttonY) - } - - private fun setupInputBox(y: Int) { - inputBox = EditBox(font, -100, y, 200, 20, Component.literal("Verify")) - inputBox.setResponder { text -> - closeButton.active = text.equals(REQUIRED_TEXT, ignoreCase = true) - } - addRenderableWidget(inputBox) - } - - private fun setupButtons(y: Int) { - addRenderableWidget( - Button.builder(Component.literal("Read the Guide")) { _ -> - confirmOpenUrl(GUIDE_URL) - }.bounds(-105, y, 100, 20).build() - ) - - closeButton = Button.builder(Component.literal("Close")) { _ -> - Config.markWelcomeShown() - onClose() - }.bounds(5, y, 100, 20).build() - closeButton.active = false - addRenderableWidget(closeButton) - } - - override fun extractRenderState(context: GuiGraphicsExtractor, mouseX: Int, mouseY: Int, delta: Float) { - val matrices = context.pose() - - matrices.pushMatrix() - matrices.translate(width / 2f, 0f) - matrices.scale(forcedMultiplier, forcedMultiplier) - - renderTitle(context) - renderWarningText(context) - - val (scaledMouseX, scaledMouseY) = scaled(mouseX.toDouble(), mouseY.toDouble()) - - super.extractRenderState(context, scaledMouseX.toInt(), scaledMouseY.toInt(), delta) - matrices.popMatrix() - } - - private fun renderTitle(context: GuiGraphicsExtractor) { - val matrices = context.pose() - - matrices.pushMatrix() - matrices.scale(TITLE_SCALE, TITLE_SCALE) - - val titleText = "Welcome to V5" - val totalWidth = font.width(titleText) - var currentX = -totalWidth / 2f - val yPos = ((contentOffsetY + 10) / TITLE_SCALE).toInt() - - for (char in titleText) { - val charStr = char.toString() - val hue = ((System.currentTimeMillis() + (currentX * 10).toLong()) % 2000) / 2000f - val color = Color.getHSBColor(hue, 0.9f, 1f).rgb - context.text(font, charStr, currentX.toInt(), yPos, color, true) - currentX += font.width(charStr) - } - - matrices.popMatrix() - } - - private fun renderWarningText(context: GuiGraphicsExtractor) { - val lines = arrayOf( - Component.literal("⚠ THE OFFICIAL V5 WEBSITE IS: ").withStyle(ChatFormatting.RED) - .append(Component.literal(SITE_URL).withStyle(ChatFormatting.BLUE, ChatFormatting.UNDERLINE)) - .append(Component.literal(" ⚠").withStyle(ChatFormatting.RED)), - Component.literal("⚠ IF YOU DOWNLOADED THIS FROM ANYWHERE ELSE, IT MAY BE A VIRUS! ⚠").withStyle( - ChatFormatting.RED), - Component.empty(), - Component.literal("BEWARE OF FAKE RELEASES:").withStyle(ChatFormatting.RED), - Component.literal("If you did not download this from the official Discord,"), - Component.literal("your account may be at risk!"), - Component.literal("Click \"Read the Guide\" to learn how to protect your account."), - Component.empty(), - Component.literal("TO ACCESS THE CLIENT:").withStyle(ChatFormatting.YELLOW), - Component.literal("If you understand the risks and are using the official version,"), - Component.literal("type \"I understand\" in the box below and click Close.") - ) - - var yPosition = contentOffsetY + TITLE_HEIGHT - for (line in lines) { - val xPos = -font.width(line) / 2 - context.text(font, line, xPos, yPosition.toInt(), -1, true) - yPosition += LINE_HEIGHT - } - } - - override fun mouseClicked(click: MouseButtonEvent, doubled: Boolean): Boolean { - val (scaledX, scaledY) = scaled(click.x, click.y) - val scaledClick = MouseButtonEvent(scaledX, scaledY, click.buttonInfo()) - - if (handleSiteLinkClick(scaledX, scaledY)) return true - - updateInputBoxFocus(scaledX, scaledY) - return super.mouseClicked(scaledClick, doubled) - } - - private fun handleSiteLinkClick(scaledX: Double, scaledY: Double): Boolean { - val prefix = "⚠ THE OFFICIAL V5 WEBSITE IS: " - val fullLine = "$prefix$SITE_URL ⚠" - val fullWidth = font.width(fullLine) - val prefixWidth = font.width(prefix) - val linkWidth = font.width(SITE_URL) - - val linkStartX = (-fullWidth / 2.0) + prefixWidth - val linkEndX = linkStartX + linkWidth - val linkYStart = (contentOffsetY + TITLE_HEIGHT).toDouble() - val linkYEnd = linkYStart + LINE_HEIGHT - - if (scaledX in linkStartX..linkEndX && scaledY in linkYStart..linkYEnd) { - confirmOpenUrl(SITE_URL) - return true - } - return false - } - - private fun updateInputBoxFocus(scaledX: Double, scaledY: Double) { - inputBox.isFocused = inputBox.isMouseOver(scaledX, scaledY) - if (inputBox.isFocused) focused = inputBox - } - - override fun mouseReleased(click: MouseButtonEvent): Boolean { - val (scaledX, scaledY) = scaled(click.x, click.y) - val scaledClick = MouseButtonEvent(scaledX, scaledY, click.buttonInfo()) - return super.mouseReleased(scaledClick) - } - - private fun scaled(x: Double, y: Double) = - (x - width / 2.0) / forcedMultiplier to y / forcedMultiplier - - private fun confirmOpenUrl(url: String) { - minecraft.setScreen(ConfirmLinkScreen({ confirmed -> - if (confirmed) Util.getPlatform().openUri(url) - minecraft.setScreen(this) - }, url, true)) - } - -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/commands/ColorArgumentCompat.kt b/src/main/kotlin/com/chattriggers/ctjs/api/commands/ColorArgumentCompat.kt new file mode 100644 index 00000000..88dc5b4a --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/commands/ColorArgumentCompat.kt @@ -0,0 +1,34 @@ +package com.chattriggers.ctjs.api.commands + +import com.mojang.brigadier.StringReader +import com.mojang.brigadier.arguments.ArgumentType +import com.mojang.brigadier.context.CommandContext +import com.mojang.brigadier.exceptions.DynamicCommandExceptionType +import com.mojang.brigadier.suggestion.Suggestions +import com.mojang.brigadier.suggestion.SuggestionsBuilder +import net.minecraft.ChatFormatting +import net.minecraft.commands.SharedSuggestionProvider +import net.minecraft.network.chat.Component +import java.util.concurrent.CompletableFuture + +/** Version-neutral replacement for the removed vanilla ColorArgument in 26.2. */ +internal object ColorArgumentCompat : ArgumentType { + private val colors = ChatFormatting.entries.filter { it <= ChatFormatting.WHITE || it == ChatFormatting.RESET } + private val invalidColor = DynamicCommandExceptionType { + Component.translatableEscape("argument.color.invalid", it) + } + + override fun parse(reader: StringReader): ChatFormatting { + val value = reader.readUnquotedString() + return colors.firstOrNull { it.name.equals(value, ignoreCase = true) } + ?: throw invalidColor.createWithContext(reader, value) + } + + override fun listSuggestions( + context: CommandContext, + builder: SuggestionsBuilder, + ): CompletableFuture = + SharedSuggestionProvider.suggest(colors.map { it.name.lowercase() }, builder) + + override fun getExamples(): Collection = listOf("red", "green") +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/commands/DynamicCommands.kt b/src/main/kotlin/com/chattriggers/ctjs/api/commands/DynamicCommands.kt index 04d35095..8f56fcc4 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/commands/DynamicCommands.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/commands/DynamicCommands.kt @@ -20,12 +20,10 @@ import com.chattriggers.ctjs.api.world.block.BlockPos import com.chattriggers.ctjs.internal.commands.CommandCollection import com.chattriggers.ctjs.internal.commands.DynamicCommand import com.chattriggers.ctjs.internal.engine.JSLoader -import com.chattriggers.ctjs.internal.mixins.commands.EntitySelectorAccessor import com.chattriggers.ctjs.MCEntity import com.chattriggers.ctjs.MCNbtCompound import com.chattriggers.ctjs.api.client.Client import com.chattriggers.ctjs.api.message.ChatLib -import com.chattriggers.ctjs.internal.utils.asMixin import com.mojang.brigadier.CommandDispatcher import com.mojang.brigadier.ImmutableStringReader import com.mojang.brigadier.StringReader @@ -46,7 +44,6 @@ import net.minecraft.commands.CommandSourceStack import net.minecraft.commands.Commands import net.minecraft.commands.SharedSuggestionProvider import net.minecraft.commands.arguments.AngleArgument -import net.minecraft.commands.arguments.ColorArgument import net.minecraft.commands.arguments.CompoundTagArgument import net.minecraft.commands.arguments.EntityArgument import net.minecraft.commands.arguments.GameModeArgument @@ -73,6 +70,8 @@ import net.minecraft.commands.arguments.item.ItemArgument import net.minecraft.commands.arguments.item.ItemInput import net.minecraft.commands.arguments.item.ItemPredicateArgument import net.minecraft.commands.arguments.selector.EntitySelector +import net.minecraft.ChatFormatting +import net.minecraft.world.level.entity.EntityTypeTest import net.minecraft.data.registries.VanillaRegistries import net.minecraft.network.chat.Component import net.minecraft.server.permissions.PermissionSet @@ -86,6 +85,7 @@ import org.mozilla.javascript.Function import org.mozilla.javascript.NativeObject import org.mozilla.javascript.WrappedException import java.util.concurrent.CompletableFuture +import java.util.UUID import java.util.function.Predicate import kotlin.math.min @@ -373,7 +373,7 @@ object DynamicCommands : CommandCollection() { * @see minecraft:color */ @JvmStatic - fun color() = ColorArgument.color() + fun color(): ArgumentType = ColorArgumentCompat /** * @see minecraft:column_pos @@ -771,8 +771,27 @@ object DynamicCommands : CommandCollection() { override fun toString() = "BlockStateArgument" } + private class EntitySelectorAccess(private val impl: EntitySelector) { + private fun field(name: String): Any? = impl.javaClass.getDeclaredField(name).apply { trySetAccessible() }.get(impl) + val maxResults get() = field("maxResults") as Int + val includesEntities get() = field("includesEntities") as Boolean + @Suppress("UNCHECKED_CAST") + val contextFreePredicates get() = field("contextFreePredicates") as List> + val range get() = field("range")!! + @Suppress("UNCHECKED_CAST") + val position get() = field("position") as java.util.function.Function + val aabb get() = field("aabb") as AABB? + @Suppress("UNCHECKED_CAST") + val order get() = field("order") as java.util.function.BiConsumer> + val playerName get() = field("playerName") as String? + val entityUUID get() = field("entityUUID") as UUID? + @Suppress("UNCHECKED_CAST") + val type get() = field("type") as EntityTypeTest + val currentEntity get() = field("currentEntity") as Boolean + } + class EntitySelectorWrapper(private val impl: EntitySelector) { - private val mixed get() = impl.asMixin() + private val mixed get() = EntitySelectorAccess(impl) fun getEntity(): Entity { val entities = getEntities() @@ -876,8 +895,8 @@ object DynamicCommands : CommandCollection() { val box = mixed.aabb!!.move(pos) predicate = predicate.and { box.intersects(it.boundingBox) } } - if (!mixed.range.isAny) - predicate = predicate.and { mixed.range.matchesSqr(it.distanceToSqr(pos)) } + if (!(mixed.range.javaClass.getMethod("isAny").invoke(mixed.range) as Boolean)) + predicate = predicate.and { mixed.range.javaClass.getMethod("matchesSqr", Double::class.javaPrimitiveType).invoke(mixed.range, it.distanceToSqr(pos)) as Boolean } return predicate } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/entity/Entity.kt b/src/main/kotlin/com/chattriggers/ctjs/api/entity/Entity.kt index 584424ad..62b13ec1 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/entity/Entity.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/entity/Entity.kt @@ -2,7 +2,7 @@ package com.chattriggers.ctjs.api.entity import com.chattriggers.ctjs.api.CTWrapper import com.chattriggers.ctjs.api.message.TextComponent -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.api.world.Chunk import com.chattriggers.ctjs.api.world.World import com.chattriggers.ctjs.api.world.block.BlockPos @@ -46,7 +46,7 @@ open class Entity(override val mcValue: MCEntity) : CTWrapper { * * @return the entity's pitch */ - fun getPitch() = Mth.wrapDegrees(mcValue.getViewXRot(Renderer.partialTicks)) + fun getPitch() = Mth.wrapDegrees(mcValue.getViewXRot(Render2D.partialTicks)) /** * Gets the yaw, the vertical direction the entity is facing towards. @@ -54,7 +54,7 @@ open class Entity(override val mcValue: MCEntity) : CTWrapper { * * @return the entity's yaw */ - fun getYaw() = Mth.wrapDegrees(mcValue.getViewYRot(Renderer.partialTicks)) + fun getYaw() = Mth.wrapDegrees(mcValue.getViewYRot(Render2D.partialTicks)) /** * Gets the entity's x motion. @@ -211,10 +211,10 @@ open class Entity(override val mcValue: MCEntity) : CTWrapper { fun isInLava() = mcValue.isInLava @JvmOverloads - fun getLookVector(partialTicks: Float = Renderer.partialTicks) = mcValue.getViewVector(partialTicks) + fun getLookVector(partialTicks: Float = Render2D.partialTicks) = mcValue.getViewVector(partialTicks) @JvmOverloads - fun getEyePosition(partialTicks: Float = Renderer.partialTicks) = mcValue.getEyePosition(partialTicks) + fun getEyePosition(partialTicks: Float = Render2D.partialTicks) = mcValue.getEyePosition(partialTicks) fun canBeCollidedWith() = mcValue.canBeCollidedWith(null) @@ -240,7 +240,7 @@ open class Entity(override val mcValue: MCEntity) : CTWrapper { } private fun renderPosition(previous: Double, current: Double) = - previous + (current - previous) * Renderer.partialTicks + previous + (current - previous) * Render2D.partialTicks enum class DimensionType( override val mcValue: ResourceKey, diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/entity/Particle.kt b/src/main/kotlin/com/chattriggers/ctjs/api/entity/Particle.kt index a6133dac..adedb4e2 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/entity/Particle.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/entity/Particle.kt @@ -1,7 +1,7 @@ package com.chattriggers.ctjs.api.entity import com.chattriggers.ctjs.api.CTWrapper -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.internal.mixins.ParticleAccessor import com.chattriggers.ctjs.MCParticle import com.chattriggers.ctjs.internal.utils.asMixin @@ -45,9 +45,9 @@ class Particle(override val mcValue: MCParticle) : CTWrapper { mixed.zo = value } - val renderX get() = lastX + (x - lastX) * Renderer.partialTicks - val renderY get() = lastY + (y - lastY) * Renderer.partialTicks - val renderZ get() = lastZ + (z - lastZ) * Renderer.partialTicks + val renderX get() = lastX + (x - lastX) * Render2D.partialTicks + val renderY get() = lastY + (y - lastY) * Render2D.partialTicks + val renderZ get() = lastZ + (z - lastZ) * Render2D.partialTicks var motionX get() = mixed.xd diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/entity/PlayerMP.kt b/src/main/kotlin/com/chattriggers/ctjs/api/entity/PlayerMP.kt index 36490bbe..33625eed 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/entity/PlayerMP.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/entity/PlayerMP.kt @@ -2,7 +2,7 @@ package com.chattriggers.ctjs.api.entity import com.chattriggers.ctjs.api.client.Client import com.chattriggers.ctjs.api.message.TextComponent -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.internal.NameTagOverridable import com.chattriggers.ctjs.MCTeam import com.chattriggers.ctjs.internal.utils.asMixin @@ -44,14 +44,14 @@ class PlayerMP(override val mcValue: Player) : LivingEntity(mcValue) { } /** - * Draws the player in the GUI. Takes the same parameters as [Renderer.drawPlayer] + * Draws the player in the GUI. Takes the same parameters as [Render2D.drawPlayer] * minus `player`. * - * @see Renderer.drawPlayer + * @see Render2D.drawPlayer */ fun draw(obj: NativeObject) = apply { obj["player"] = this - Renderer.drawPlayer(obj) + Render2D.drawPlayer(obj) } private fun getPlayerName(playerListEntry: PlayerInfo?): TextComponent { diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/entity/Team.kt b/src/main/kotlin/com/chattriggers/ctjs/api/entity/Team.kt index 257d1744..ae878bd2 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/entity/Team.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/entity/Team.kt @@ -81,22 +81,19 @@ class Team(override val mcValue: MCTeam) : CTWrapper { */ fun setSuffix(suffix: String) = setSuffix(TextComponent(suffix)) - fun getColor() = mcValue.color.toString() + fun getColor() = /*? if >=26.2 {*/ mcValue.color.map { ChatFormatting.valueOf(it.name).toString() }.orElse(ChatFormatting.RESET.toString()) /*?} else {*/ /*mcValue.color.toString()*//*?}*/ - /** - * Sets the team color - * @param color a string format of a [Formatting], or a hex value - * @return the team for method chaining - */ + /** Sets the team color using the legacy ChatFormatting name or numeric id. */ fun setColor(color: Any?) = apply { - mcValue.color = when (color) { - is Number -> ChatFormatting.getById(color.toInt()) ?: ChatFormatting.RESET + val formatting = when (color) { + is Number -> "0123456789abcdef".getOrNull(color.toInt())?.let(ChatFormatting::getByCode) ?: ChatFormatting.RESET is CharSequence -> ChatFormatting.entries.find { it.toString() == ChatLib.addColor(color.toString()) } ?: ChatFormatting.RESET null -> ChatFormatting.RESET else -> throw IllegalArgumentException("Could not convert type ${color::class.simpleName} to a Formatting") } + /*? if >=26.2 {*/ mcValue.setColor(java.util.Optional.ofNullable(net.minecraft.world.scores.TeamColor.byName(formatting.name.lowercase()))) /*?} else {*/ /*mcValue.color = formatting*//*?}*/ } /** diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/inventory/nbt/NBT.kt b/src/main/kotlin/com/chattriggers/ctjs/api/inventory/nbt/NBT.kt index 3e8d2818..3356c06b 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/inventory/nbt/NBT.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/inventory/nbt/NBT.kt @@ -3,7 +3,7 @@ package com.chattriggers.ctjs.api.inventory.nbt import com.chattriggers.ctjs.MCNbtBase import com.chattriggers.ctjs.MCNbtCompound import com.chattriggers.ctjs.MCNbtList -import com.chattriggers.ctjs.internal.utils.getOption +import com.chattriggers.ctjs.internal.utils.getOrDefault import net.minecraft.nbt.ByteArrayTag import net.minecraft.nbt.ByteTag import net.minecraft.nbt.DoubleTag @@ -60,8 +60,8 @@ object NBT { fun toArray(nbt: NBTTagList): NativeArray = nbt.toArray() private fun Any.toNBT(options: NativeObject?): MCNbtBase { - val preferArraysOverLists = options.getOption("preferArraysOverLists", false) - val coerceNumericStrings = options.getOption("coerceNumericStrings", false) + val preferArraysOverLists = options.getOrDefault("preferArraysOverLists", false) + val coerceNumericStrings = options.getOrDefault("coerceNumericStrings", false) return when (this) { is NativeObject -> MCNbtCompound().apply { diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/message/Chat.kt b/src/main/kotlin/com/chattriggers/ctjs/api/message/Chat.kt index b2c8dc3f..f89beee2 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/message/Chat.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/message/Chat.kt @@ -1,5 +1,6 @@ package com.chattriggers.ctjs.api.message +import com.chattriggers.ctjs.api.client.chatCompat import net.minecraft.client.Minecraft import net.minecraft.network.chat.Style import net.minecraft.network.chat.Component @@ -35,6 +36,6 @@ object Chat { finalMessage.append(partText) } - mc.gui.chat.addClientSystemMessage(finalMessage) + mc.gui.chatCompat.addClientSystemMessage(finalMessage) } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/message/ChatLib.kt b/src/main/kotlin/com/chattriggers/ctjs/api/message/ChatLib.kt index 46d72a1c..782b17ec 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/message/ChatLib.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/message/ChatLib.kt @@ -1,7 +1,10 @@ package com.chattriggers.ctjs.api.message +import com.chattriggers.ctjs.api.client.MinecraftCompat +import com.chattriggers.ctjs.api.client.chatCompat + import com.chattriggers.ctjs.api.client.Client -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.internal.listeners.ClientListener import com.chattriggers.ctjs.internal.mixins.ChatComponentAccessor import com.chattriggers.ctjs.internal.utils.asMixin @@ -17,6 +20,9 @@ import java.util.regex.Pattern import kotlin.math.roundToInt object ChatLib { + private val ADD_COLOR_REGEX = "(?() private val chatHudAccessor get() = Client.getChatGui()?.asMixin() @@ -62,7 +68,7 @@ object ChatLib { */ @JvmStatic fun addColor(message: String?): String { - return message.toString().replace("(?= chatWidth) return text val spaceWidth = (chatWidth - textWidth) / 2f - return " ".repeat((spaceWidth / Renderer.getStringWidth(" ")).roundToInt()) + text + return " ".repeat((spaceWidth / Render2D.getStringWidth(" ")).roundToInt()) + text } /** @@ -245,7 +255,7 @@ object ChatLib { private fun editLines(replacements: Array, matcher: (GuiMessage) -> Boolean) { val mc = Client.getMinecraft() - val indicator = if (mc.isSingleplayer) GuiMessageTag.systemSinglePlayer() else GuiMessageTag.system() + val indicator = if (MinecraftCompat.isSingleplayer(mc)) GuiMessageTag.systemSinglePlayer() else GuiMessageTag.system() var edited = false val accessor = chatHudAccessor ?: return val it = accessor.allMessages.listIterator() @@ -371,9 +381,9 @@ object ChatLib { @JvmOverloads fun addToSentMessageHistory(index: Int = -1, message: String) { if (index == -1) { - Client.getMinecraft().gui.chat.addRecentChat(message) + Client.getMinecraft().gui.chatCompat.addRecentChat(message) } else { - Client.getMinecraft().gui.chat.recentChat.add(index, message) + Client.getMinecraft().gui.chatCompat.recentChat.add(index, message) } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Book.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Book.kt index f3becb99..2f2439e0 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Book.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Book.kt @@ -1,6 +1,7 @@ package com.chattriggers.ctjs.api.render import com.chattriggers.ctjs.api.client.Client +import com.chattriggers.ctjs.api.client.setScreenCompat import com.chattriggers.ctjs.api.message.TextComponent import com.chattriggers.ctjs.internal.mixins.BookViewScreenAccessor import com.chattriggers.ctjs.internal.utils.asMixin @@ -71,7 +72,7 @@ class Book { val newScreen = BookViewScreen(customContents) screen = newScreen Client.scheduleTask { - Client.getMinecraft().setScreen(newScreen) + Client.getMinecraft().setScreenCompat(newScreen) newScreen.setPage(pageIndex) } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Display.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Display.kt index 679f4667..9300f41c 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Display.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Display.kt @@ -1,6 +1,5 @@ package com.chattriggers.ctjs.api.render -import com.chattriggers.ctjs.internal.utils.getOption import com.chattriggers.ctjs.internal.utils.getOrDefault import net.minecraft.client.gui.GuiGraphicsExtractor import org.mozilla.javascript.NativeObject @@ -25,9 +24,9 @@ class Display() { constructor(config: NativeObject?) : this() { setBackgroundColor(config.getOrDefault("backgroundColor", 0x50000000).toLong()) setTextColor(config.getOrDefault("textColor", 0xffffffff).toLong()) - setBackground(config.getOption("background", Background.NONE)) - setAlign(config.getOption("align", Text.Align.LEFT)) - setOrder(config.getOption("order", Order.NORMAL)) + setBackground(config.getOrDefault("background", Background.NONE)) + setAlign(config.getOrDefault("align", Text.Align.LEFT)) + setOrder(config.getOrDefault("order", Order.NORMAL)) setX(config.getOrDefault("x", 0).toInt()) setY(config.getOrDefault("y", 0).toInt()) setMinWidth(config.getOrDefault("minWidth", 0).toInt()) diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/DrawContextHolder.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/DrawContextHolder.kt index 502a69a9..77878655 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/DrawContextHolder.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/DrawContextHolder.kt @@ -3,7 +3,7 @@ package com.chattriggers.ctjs.api.render import net.minecraft.client.gui.GuiGraphicsExtractor object DrawContextHolder { - @JvmStatic + @JvmField var currentContext: GuiGraphicsExtractor? = null inline fun withContext(context: GuiGraphicsExtractor, block: () -> T): T { diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Gui.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Gui.kt index 7de89139..32ea263b 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Gui.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Gui.kt @@ -1,6 +1,7 @@ package com.chattriggers.ctjs.api.render import com.chattriggers.ctjs.api.client.Client +import com.chattriggers.ctjs.api.client.screenCompat import com.chattriggers.ctjs.api.message.TextComponent import com.chattriggers.ctjs.api.triggers.RegularTrigger import com.chattriggers.ctjs.api.triggers.TriggerType @@ -42,7 +43,7 @@ class Gui @JvmOverloads constructor( } - fun isOpen(): Boolean = Client.getMinecraft().screen === this + fun isOpen(): Boolean = Client.getMinecraft().screenCompat === this /** * Registers a method to be run while gui is open. @@ -277,15 +278,14 @@ class Gui @JvmOverloads constructor( @Suppress("UNCHECKED_CAST") val drawContexts = drawContextsField.get(this) as List - Renderer.pushMatrix(UMatrixStack(drawContexts.last().pose())) - - Renderer.partialTicks = partialTicks - - this.mouseX = mouseX - this.mouseY = mouseY - onDraw?.trigger(arrayOf(mouseX, mouseY, partialTicks)) - - Renderer.popMatrix() + DrawContextHolder.withContext(drawContexts.last()) { + Render2D.pushMatrix(UMatrixStack(drawContexts.last().pose())) + Render2D.partialTicks = partialTicks + this.mouseX = mouseX + this.mouseY = mouseY + onDraw?.trigger(arrayOf(mouseX, mouseY, partialTicks)) + Render2D.popMatrix() + } } /** diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/GuiRendererBackend.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/GuiRendererBackend.kt new file mode 100644 index 00000000..a698eaf7 --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/GuiRendererBackend.kt @@ -0,0 +1,478 @@ +package com.chattriggers.ctjs.api.render + +import com.chattriggers.ctjs.api.client.screenCompat +import com.chattriggers.ctjs.api.render.skia.SkijaPIP +import io.github.humbleui.skija.* +import io.github.humbleui.skija.Image as SkijaImage +import io.github.humbleui.skija.svg.SVGDOM +import io.github.humbleui.skija.svg.SVGLengthContext +import io.github.humbleui.types.RRect +import io.github.humbleui.types.Rect +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiGraphicsExtractor +import java.awt.Color +import java.awt.image.BufferedImage +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.FileInputStream +import java.io.FileNotFoundException +import java.net.URI +import java.util.LinkedHashMap +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.ConcurrentLinkedQueue +import java.util.concurrent.CopyOnWriteArrayList +import javax.imageio.ImageIO +import javax.imageio.metadata.IIOMetadataNode +import kotlin.math.max +import kotlin.math.roundToInt + +/** Skija-backed 2D renderer used by the JavaScript-facing [Render2D] API. */ +open class GuiRendererBackend { + private val callbacks = CopyOnWriteArrayList() + private val preCallbacks = CopyOnWriteArrayList() + private val images = ConcurrentHashMap() + private val gifs = HashMap() + private val urlImages = HashMap() + private val pendingUrls = ConcurrentHashMap.newKeySet() + private val failedUrls = ConcurrentHashMap.newKeySet() + private val downloadedUrls = ConcurrentLinkedQueue>() + private val typefaces = HashMap() + private val fonts = HashMap() + private val textLines = object : LinkedHashMap(TEXT_CACHE_SIZE, 0.75f, true) { + override fun removeEldestEntry(eldest: MutableMap.MutableEntry) = + (size > TEXT_CACHE_SIZE).also { if (it) eldest.value.close() } + } + private val alphaStack = ArrayDeque() + private val scissorDepths = ArrayDeque() + private var canvas: Canvas? = null + private var checkerImage: SkijaImage? = null + private val checkerShaders = HashMap() + private val gradientShaders = HashMap() + private val hueColors = IntArray(7) { 0xff000000.toInt() or (Color.HSBtoRGB(it / 6f, 1f, 1f) and 0xffffff) } + private var alpha = 1f + private var saveDepth = 0 + + @JvmField + val defaultFont = Font("Default", "/assets/v5/font.otf") + + @JvmField val ALIGN_CENTER = 2 + @JvmField val ALIGN_MIDDLE = 16 + + data class GifData(val width: Int, val height: Int, val frameCount: Int, val delays: IntArray) { + override fun equals(other: Any?) = other is GifData && width == other.width && height == other.height && + frameCount == other.frameCount && delays.contentEquals(other.delays) + override fun hashCode() = 31 * (31 * (31 * width + height) + frameCount) + delays.contentHashCode() + } + + private data class CachedImage(val image: SkijaImage, var refs: Int = 1) + private data class CachedGif(val frames: List, val delays: IntArray, val width: Int, val height: Int, var refs: Int = 1) + private data class FontKey(val font: Font, val size: Float) + private data class TextKey(val text: String, val font: FontKey) + private data class GradientKey(val x: Float, val y: Float, val width: Float, val height: Float, val color1: Int, val color2: Int, val direction: Gradient, val alpha: Float) + private enum class Gradient { LEFT_TO_RIGHT, TOP_TO_BOTTOM, TL_TO_BR, BL_TO_TR } + + fun registerV5Render(callback: Runnable) = callback.also(callbacks::add) + fun unregisterV5Render(callback: Runnable) { callbacks -= callback } + fun registerV5PreRender(callback: Runnable) = callback.also(preCallbacks::add) + fun unregisterV5PreRender(callback: Runnable) { preCallbacks -= callback } + fun clearCallbacks() { callbacks.clear(); preCallbacks.clear() } + + fun runPreDrawables(context: GuiGraphicsExtractor) { + if (preCallbacks.isNotEmpty()) SkijaPIP.draw(context, Runnable { runCallbacks(preCallbacks) }, pre = true) + } + + fun runDrawables(context: GuiGraphicsExtractor) { + if (callbacks.isEmpty()) return + if (Minecraft.getInstance().screenCompat is Gui) context.blurBeforeThisStratum() + SkijaPIP.draw(context, Runnable { runCallbacks(callbacks) }) + } + + private fun runCallbacks(list: List) = list.forEach { + try { it.run() } catch (error: Exception) { error.printStackTrace() } + } + + internal fun beginSkijaFrame(canvas: Canvas) { + this.canvas = canvas + alpha = 1f + alphaStack.clear() + scissorDepths.clear() + saveDepth = 0 + processDownloads() + } + + internal fun endSkijaFrame() { + canvas?.restoreToCount(1) + canvas = null + alpha = 1f + alphaStack.clear() + scissorDepths.clear() + saveDepth = 0 + } + + internal fun translateSkija(x: Float, y: Float) = canvas?.translate(x, y) != null + internal fun scaleSkija(x: Float, y: Float) = canvas?.scale(x, y) != null + internal fun rotateSkija(degrees: Float) = canvas?.rotate(degrees) != null + + fun blurBackground() = Unit + fun save() { + canvas?.save() ?: return + alphaStack.addLast(alpha) + saveDepth++ + } + fun restore() { + val active = canvas ?: return + while (scissorDepths.lastOrNull() == saveDepth) { + active.restore() + scissorDepths.removeLast() + } + if (alphaStack.isNotEmpty()) { + active.restore() + alpha = alphaStack.removeLast() + saveDepth-- + } + } + fun globalAlpha(value: Float) { alpha = value.coerceIn(0f, 1f) } + fun scissor(x: Float, y: Float, width: Float, height: Float) { + val active = canvas ?: return + active.save() + active.clipRect(Rect.makeXYWH(x, y, width, height), true) + scissorDepths.addLast(saveDepth) + } + fun resetScissor() { + val active = canvas ?: return + while (scissorDepths.lastOrNull() == saveDepth) { + active.restore() + scissorDepths.removeLast() + } + } + fun pushScissor(x: Float, y: Float, width: Float, height: Float) { save(); canvas?.clipRect(Rect.makeXYWH(x, y, width, height), true) } + fun popScissor() = restore() + + fun drawRect(x: Float, y: Float, width: Float, height: Float, color: Int) = paint(color).use { + canvas?.drawRect(Rect.makeXYWH(x, y, width, height), it) + Unit + } + + fun drawRoundedRect(x: Float, y: Float, width: Float, height: Float, radius: Float, color: Int) = paint(color).use { + canvas?.drawRRect(RRect.makeXYWH(x, y, width, height, radius.coerceAtLeast(0f)), it) + Unit + } + + fun drawRoundedRectVaried(x: Float, y: Float, width: Float, height: Float, color: Int, tl: Float, tr: Float, br: Float, bl: Float) = + paint(color).use { + canvas?.drawRRect(RRect.makeComplexXYWH(x, y, width, height, radii(tl, tr, br, bl)), it) + Unit + } + + fun drawCircle(x: Float, y: Float, radius: Float, color: Int) = paint(color).use { canvas?.drawCircle(x, y, radius, it); Unit } + + @JvmOverloads + fun drawHollowRect(x: Float, y: Float, width: Float, height: Float, thickness: Float, color: Int, radius: Float = 0f) = + paint(color, PaintMode.STROKE).use { + it.strokeWidth = thickness + if (radius > 0f) canvas?.drawRRect(RRect.makeXYWH(x, y, width, height, radius), it) + else canvas?.drawRect(Rect.makeXYWH(x, y, width, height), it) + Unit + } + + fun drawLine(x1: Float, y1: Float, x2: Float, y2: Float, thickness: Float, color: Int) = paint(color, PaintMode.STROKE).use { + it.strokeWidth = thickness + canvas?.drawLine(x1, y1, x2, y2, it) + Unit + } + + fun drawDropShadow(x: Float, y: Float, width: Float, height: Float, radius: Float, blur: Float, spread: Float, color: Int) = + MaskFilter.makeBlur(FilterBlurMode.NORMAL, blur / 2f).use { filter -> + paint(color).setMaskFilter(filter).use { + canvas?.drawRRect(RRect.makeXYWH(x - spread, y - spread, width + spread * 2, height + spread * 2, radius + spread), it) + Unit + } + } + + @JvmOverloads + fun drawGradientRect(x: Float, y: Float, width: Float, height: Float, color1: Int, color2: Int, direction: Any, radius: Float = 0f) = + gradientShader(x, y, width, height, color1, color2, direction).let { shader -> + Paint().setAntiAlias(true).setShader(shader).use { + if (radius > 0f) canvas?.drawRRect(RRect.makeXYWH(x, y, width, height, radius), it) + else canvas?.drawRect(Rect.makeXYWH(x, y, width, height), it) + Unit + } + } + + @JvmOverloads + fun drawHollowGradientRect(x: Float, y: Float, width: Float, height: Float, thickness: Float, color1: Int, color2: Int, direction: Any, radius: Float = 0f) = + gradientShader(x, y, width, height, color1, color2, direction).let { shader -> + Paint().setAntiAlias(true).setShader(shader).setMode(PaintMode.STROKE).setStrokeWidth(thickness).use { + if (radius > 0f) canvas?.drawRRect(RRect.makeXYWH(x, y, width, height, radius), it) + else canvas?.drawRect(Rect.makeXYWH(x, y, width, height), it) + Unit + } + } + + @JvmOverloads + fun drawCheckerboard(x: Float, y: Float, width: Float, height: Float, radius: Float, size: Float = 4f) { + val active = canvas ?: return + val step = size.coerceAtLeast(0.1f) + active.save() + active.clipRRect(RRect.makeXYWH(x, y, width, height, radius), true) + checkerShader(step).let { shader -> + Paint().setShader(shader).setAlphaf(alpha).use { + active.drawRect(Rect.makeXYWH(x, y, width, height), it) + } + } + active.restore() + } + + fun drawHueBar(x: Float, y: Float, width: Float, height: Float, radius: Float) { + val colors = if (alpha == 1f) hueColors else IntArray(7) { applyAlpha(hueColors[it]) } + Shader.makeLinearGradient(x, y, x + width, y, colors).use { shader -> + Paint().setAntiAlias(true).setShader(shader).use { paint -> + canvas?.drawRRect(RRect.makeXYWH(x, y, width, height, radius), paint) + } + } + } + + fun getDefaultFont() = defaultFont + + @JvmOverloads + fun text(text: String, x: Float, y: Float, size: Float, color: Int, font: Font? = defaultFont, align: Int) { + val fontKey = FontKey(font ?: defaultFont, size) + val skijaFont = skijaFont(fontKey) + val line = textLine(text, fontKey, skijaFont) + val metrics = skijaFont.metrics + val baseline = when { + align and 32 != 0 -> y - metrics.descent + align and 16 != 0 -> y - (metrics.ascent + metrics.descent) / 2f + align and 8 != 0 -> y - metrics.ascent + else -> y + } + val drawX = when { + align and 4 != 0 -> x - line.width + align and 2 != 0 -> x - line.width / 2f + else -> x + } + paint(color).use { canvas?.drawTextLine(line, drawX, baseline, it) } + } + + @JvmOverloads + fun textWidth(text: String, size: Float, font: Font? = defaultFont) = + FontKey(font ?: defaultFont, size).let { textLine(text, it, skijaFont(it)).width } + + fun loadImage(path: String): String { + if (path.isUrl()) return path + synchronized(images) { + images[path]?.let { it.refs++; return path } + images[path] = CachedImage(createImage(readImage(path), path)) + } + return path + } + + fun unloadImage(path: String) { + if (path.isUrl()) { + urlImages.remove(path)?.close() + pendingUrls -= path + failedUrls -= path + downloadedUrls.removeIf { it.first == path } + return + } + synchronized(images) { + images[path]?.let { if (--it.refs <= 0) { it.image.close(); images.remove(path) } } + } + } + + fun isImageLoaded(path: String) = images.containsKey(path) + + @JvmOverloads + fun drawImage(path: String, x: Float, y: Float, width: Float, height: Float, radius: Float = 0f, imageAlpha: Float = 1f) { + if (path.isUrl()) return drawImageFromUrl(path, x, y, width, height, radius, imageAlpha) + val image = images[path] ?: runCatching { loadImage(path) }.getOrNull()?.let(images::get) ?: return + drawImage(image.image, x, y, width, height, radius, imageAlpha) + } + + @JvmOverloads + fun drawImageFromUrl(url: String, x: Float, y: Float, width: Float, height: Float, radius: Float = 0f, imageAlpha: Float = 1f) { + if (url == "none" || url in failedUrls) return + urlImages[url]?.let { return drawImage(it, x, y, width, height, radius, imageAlpha) } + if (pendingUrls.add(url)) Thread({ + val bytes = runCatching { + URI(url).toURL().openConnection().apply { + connectTimeout = 5000; readTimeout = 5000; setRequestProperty("User-Agent", "V5-Loader") + }.getInputStream().use { it.readBytes() } + }.getOrNull() + downloadedUrls += url to bytes + }, "V5 image ${url.hashCode()}").apply { isDaemon = true }.start() + } + + fun loadGif(path: String): GifData? { + synchronized(gifs) { + gifs[path]?.let { it.refs++; return GifData(it.width, it.height, it.frames.size, it.delays) } + } + val decoded = decodeGif(path) ?: return null + synchronized(gifs) { gifs[path] = decoded } + return GifData(decoded.width, decoded.height, decoded.frames.size, decoded.delays) + } + + fun unloadGif(path: String) = synchronized(gifs) { + gifs[path]?.let { if (--it.refs <= 0) { it.frames.forEach(SkijaImage::close); gifs.remove(path) } } + } + + @JvmOverloads + fun drawGif(path: String, x: Float, y: Float, width: Float, height: Float, frameIndex: Int, radius: Float = 0f, imageAlpha: Float = 1f) { + val frames = synchronized(gifs) { gifs[path]?.frames } ?: return + if (frames.isNotEmpty()) drawImage(frames[Math.floorMod(frameIndex, frames.size)], x, y, width, height, radius, imageAlpha) + } + + fun clearImageCache() { + synchronized(images) { images.values.forEach { it.image.close() }; images.clear() } + synchronized(gifs) { gifs.values.flatMap { it.frames }.forEach(SkijaImage::close); gifs.clear() } + urlImages.values.forEach(SkijaImage::close); urlImages.clear(); pendingUrls.clear(); failedUrls.clear(); downloadedUrls.clear() + } + + fun getCacheStats() = "Images: ${images.size}, GIFs: ${gifs.size}, URLs: ${urlImages.size}" + + fun destroy() { + clearImageCache() + checkerImage?.close(); checkerImage = null + checkerShaders.values.forEach(Shader::close); checkerShaders.clear() + gradientShaders.values.forEach(Shader::close); gradientShaders.clear() + textLines.values.forEach(TextLine::close); textLines.clear() + fonts.values.forEach(io.github.humbleui.skija.Font::close); fonts.clear() + typefaces.values.forEach(Typeface::close); typefaces.clear() + } + + private fun drawImage(image: SkijaImage, x: Float, y: Float, width: Float, height: Float, radius: Float, imageAlpha: Float) { + Paint().setAntiAlias(true).setAlphaf(alpha * imageAlpha.coerceIn(0f, 1f)).use { paint -> + val active = canvas ?: return + if (radius > 0f) { + active.save() + active.clipRRect(RRect.makeXYWH(x, y, width, height, radius), true) + } + active.drawImageRect( + image, Rect.makeWH(image.width.toFloat(), image.height.toFloat()), Rect.makeXYWH(x, y, width, height), + SamplingMode.LINEAR, paint, true, + ) + if (radius > 0f) active.restore() + } + } + + private fun checkerImage() = checkerImage ?: Surface.makeRaster( + ImageInfo(2, 2, ColorType.N32, ColorAlphaType.PREMUL, ColorSpace.getSRGB()), + ).use { surface -> + Paint().setColor(0xff404040.toInt()).use { surface.canvas.drawRect(Rect.makeWH(2f, 2f), it) } + Paint().setColor(0xff737373.toInt()).use { + surface.canvas.drawRect(Rect.makeXYWH(1f, 0f, 1f, 1f), it) + surface.canvas.drawRect(Rect.makeXYWH(0f, 1f, 1f, 1f), it) + } + surface.makeImageSnapshot().also { checkerImage = it } + } + + private fun checkerShader(size: Float) = checkerShaders.getOrPut(size) { + checkerImage().makeShader(FilterTileMode.REPEAT, FilterTileMode.REPEAT, SamplingMode.DEFAULT, Matrix33.makeScale(size)) + } + + private fun processDownloads() { + repeat(5) { + val (url, bytes) = downloadedUrls.poll() ?: return + if (!pendingUrls.remove(url)) return@repeat + if (bytes == null) failedUrls += url else runCatching { createImage(bytes, url) } + .onSuccess { urlImages[url] = it }.onFailure { failedUrls += url } + } + } + + private fun createImage(bytes: ByteArray, name: String): SkijaImage { + if (!name.substringBefore('?').endsWith(".svg", true)) return SkijaImage.makeDeferredFromEncodedBytes(bytes) + Data.makeFromBytes(bytes).use { data -> + SVGDOM(data).use { dom -> + val root = dom.root ?: error("Invalid SVG: $name") + val size = root.getIntrinsicSize(SVGLengthContext(256f, 256f, 96f)) + val width = max(1, size.x.roundToInt()) + val height = max(1, size.y.roundToInt()) + Surface.makeRaster(ImageInfo(width, height, ColorType.N32, ColorAlphaType.PREMUL, ColorSpace.getSRGB())).use { surface -> + surface.canvas.clear(0) + dom.setContainerSize(width.toFloat(), height.toFloat()) + dom.render(surface.canvas) + return surface.makeImageSnapshot() + } + } + } + } + + private fun decodeGif(path: String): CachedGif? = runCatching { + FileInputStream(path).use { stream -> + val reader = ImageIO.getImageReadersByFormatName("gif").next() + reader.input = ImageIO.createImageInputStream(stream) + val count = reader.getNumImages(true) + val first = reader.read(0) + val master = BufferedImage(first.width, first.height, BufferedImage.TYPE_INT_ARGB) + val graphics = master.createGraphics().apply { background = Color(0, 0, 0, 0) } + val frames = ArrayList(count) + val delays = IntArray(count) + repeat(count) { index -> + val frame = reader.read(index) + val tree = reader.getImageMetadata(index).getAsTree(reader.getImageMetadata(index).nativeMetadataFormatName) as IIOMetadataNode + val control = tree.getElementsByTagName("GraphicControlExtension").item(0) as IIOMetadataNode + val descriptor = tree.getElementsByTagName("ImageDescriptor").item(0) as IIOMetadataNode + val x = descriptor.getAttribute("imageLeftPosition").toInt() + val y = descriptor.getAttribute("imageTopPosition").toInt() + delays[index] = (control.getAttribute("delayTime").toInt() * 10).coerceAtLeast(10) + graphics.drawImage(frame, x, y, null) + frames += bufferedImage(master) + if (control.getAttribute("disposalMethod") == "restoreToBackgroundColor") graphics.clearRect(x, y, frame.width, frame.height) + } + graphics.dispose(); reader.dispose() + CachedGif(frames, delays, first.width, first.height) + } + }.onFailure { println("[V5] Failed to load GIF $path: ${it.message}") }.getOrNull() + + private fun bufferedImage(image: BufferedImage): SkijaImage { + val output = ByteArrayOutputStream() + ImageIO.write(image, "png", output) + return SkijaImage.makeDeferredFromEncodedBytes(output.toByteArray()) + } + + private fun skijaFont(key: FontKey) = fonts.getOrPut(key) { + io.github.humbleui.skija.Font(typefaces.getOrPut(key.font) { + FontMgr.getDefault().makeFromData(Data.makeFromBytes(key.font.buffer().let { buffer -> ByteArray(buffer.remaining()).also(buffer::get) })) + ?: error("Failed to load font ${key.font.name}") + }, key.size) + .setSubpixel(true) + .setEdging(FontEdging.SUBPIXEL_ANTI_ALIAS) + .setHinting(FontHinting.SLIGHT) + } + + private fun textLine(text: String, key: FontKey, font: io.github.humbleui.skija.Font) = + textLines.getOrPut(TextKey(text, key)) { TextLine.make(text, font) } + + private fun paint(color: Int, mode: PaintMode = PaintMode.FILL) = Paint() + .setAntiAlias(true).setMode(mode).setColor(applyAlpha(color)) + + private fun gradientShader(x: Float, y: Float, width: Float, height: Float, color1: Int, color2: Int, direction: Any): Shader { + val resolved = resolveGradient(direction) + val key = GradientKey(x, y, width, height, color1, color2, resolved, alpha) + gradientShaders[key]?.let { return it } + val (endX, endY) = when (resolved) { + Gradient.TOP_TO_BOTTOM -> x to y + height + Gradient.TL_TO_BR -> x + width to y + height + Gradient.BL_TO_TR -> x + width to y - height + Gradient.LEFT_TO_RIGHT -> x + width to y + } + return Shader.makeLinearGradient(x, y, endX, endY, intArrayOf(applyAlpha(color1), applyAlpha(color2))).also { gradientShaders[key] = it } + } + + private fun resolveGradient(direction: Any) = when { + direction.toString().contains("TopToBottom") -> Gradient.TOP_TO_BOTTOM + direction.toString().contains("TopLeftToBottomRight") -> Gradient.TL_TO_BR + direction.toString().contains("BottomLeftToTopRight") -> Gradient.BL_TO_TR + else -> Gradient.LEFT_TO_RIGHT + } + + private fun radii(tl: Float, tr: Float, br: Float, bl: Float) = floatArrayOf(tl, tl, tr, tr, br, br, bl, bl) + private fun applyAlpha(color: Int) = (color and 0xffffff) or ((((color ushr 24) and 255) * alpha).roundToInt().coerceIn(0, 255) shl 24) + private fun String.isUrl() = startsWith("http://", true) || startsWith("https://", true) + private fun readImage(path: String): ByteArray = when { + File(path).isFile -> FileInputStream(path) + else -> GuiRendererBackend::class.java.getResourceAsStream(path) ?: throw FileNotFoundException(path) + }.use { it.readBytes() } + + private companion object { const val TEXT_CACHE_SIZE = 256 } +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Image.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Image.kt index 50265a44..13c8bbc6 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Image.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Image.kt @@ -63,6 +63,7 @@ class Image(var image: BufferedImage?) { texture?.buffer?.let(MemoryUtil::memFree) texture = null image = null + CTJS.images.remove(this) } @JvmOverloads @@ -80,7 +81,7 @@ class Image(var image: BufferedImage?) { } if (texture != null) - Renderer.drawImage(this, x, y, drawWidth, drawHeight) + Render2D.drawImage(this, x, y, drawWidth, drawHeight) } private data class Texture(val texture: DynamicTexture, val buffer: ByteBuffer) @@ -145,7 +146,9 @@ class Image(var image: BufferedImage?) { val buffer = MemoryUtil.memAlloc(it.size()) buffer.put(it.toByteArray()) buffer.rewind() - Texture(DynamicTexture( { "ct:${UUID.randomUUID()}" }, NativeImage.read(buffer)), buffer) + NativeImage.read(buffer).use { + Texture(DynamicTexture({ "ct:${UUID.randomUUID()}" }, it), buffer) + } } } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt deleted file mode 100644 index fce0e5c9..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt +++ /dev/null @@ -1,92 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import com.mojang.blaze3d.pipeline.ColorTargetState -import com.mojang.blaze3d.pipeline.BlendFunction -import com.mojang.blaze3d.pipeline.DepthStencilState -import com.mojang.blaze3d.pipeline.RenderPipeline -import com.mojang.blaze3d.platform.CompareOp -import com.mojang.blaze3d.platform.DestFactor -import com.mojang.blaze3d.platform.SourceFactor -import net.minecraft.client.renderer.rendertype.RenderType - -object LegacyPipelineBuilder { - private val pipelineList = mutableMapOf() - private var cull: Boolean? = null - private var depth: Boolean? = null - private var blend: Boolean? = null - private var drawMode = Renderer.DrawMode.QUADS - private var vertexFormat = Renderer.VertexFormat.POSITION_COLOR - private var snippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET - - fun begin( - drawMode: Renderer.DrawMode = Renderer.DrawMode.QUADS, - vertexFormat: Renderer.VertexFormat = Renderer.VertexFormat.POSITION_COLOR, - snippet: Renderer.RenderSnippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET - ) = apply { - this.drawMode = drawMode - this.vertexFormat = vertexFormat - this.snippet = snippet - } - - fun enableBlend() = apply { - blend = true - } - - fun disableBlend() = apply { - blend = false - } - - fun enableCull() = apply { - cull = true - } - - fun disableCull() = apply { - cull = false - } - - fun enableDepth() = apply { - depth = true - } - - fun disableDepth() = apply { - depth = false - } - - fun build(): RenderPipeline { - val key = state() - return pipelineList.getOrPut(key) { - val basePipeline = RenderPipeline.builder(snippet.mcSnippet) - .withLocation("ctjs/custom/pipeline${hashCode()}") - .withVertexFormat(vertexFormat.toMC(), drawMode.toUC().mcMode) - if (blend == true) basePipeline.withColorTargetState(ColorTargetState(BlendFunction(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA, SourceFactor.ONE, DestFactor.ZERO))) - - cull?.let(basePipeline::withCull) - - if (depth == true) { - basePipeline - .withDepthStencilState(DepthStencilState(CompareOp.LESS_THAN_OR_EQUAL, true)) - } - else if (depth == false) { - basePipeline - .withDepthStencilState(DepthStencilState(CompareOp.ALWAYS_PASS, false)) - } - - basePipeline.build() - } - } - - fun layer(): RenderType { - throw Error("LegacyPipelineBuilder#layer currently not supported") - } - - fun state(): String { - return "LegacyPipelineBuilder[" + - "cull=$cull, " + - "depth=$depth, " + - "blend=$blend, " + - "drawMode=${drawMode.name}, " + - "vertexFormat=${vertexFormat.name}, " + - "snippet=${snippet.name}" + - "]" - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/NVGRenderer.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/NVGRenderer.kt deleted file mode 100644 index 0c523e35..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/NVGRenderer.kt +++ /dev/null @@ -1,875 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import com.mojang.blaze3d.opengl.GlStateManager -import com.mojang.blaze3d.opengl.GlTexture -import com.mojang.blaze3d.opengl.DirectStateAccess -import com.mojang.blaze3d.systems.GpuDevice -import com.mojang.blaze3d.systems.RenderSystem -import net.minecraft.client.Minecraft -import org.lwjgl.nanovg.NVGColor -import org.lwjgl.nanovg.NVGPaint -import org.lwjgl.nanovg.NanoVG.* -import org.lwjgl.nanovg.NanoVGGL3.* -import org.lwjgl.nanovg.NanoSVG.* -import org.lwjgl.opengl.GL20C -import org.lwjgl.opengl.GL30 -import org.lwjgl.opengl.GL33C -import org.lwjgl.stb.STBImage.stbi_load_from_memory -import org.lwjgl.stb.STBImage.stbi_image_free -import org.lwjgl.system.MemoryUtil -import java.nio.ByteBuffer -import java.awt.Color -import java.awt.image.BufferedImage -import javax.imageio.ImageIO -import javax.imageio.metadata.IIOMetadataNode -import java.util.concurrent.CopyOnWriteArrayList -import java.util.concurrent.ConcurrentHashMap -import java.io.File -import java.io.FileNotFoundException -import java.io.FileInputStream -import java.net.URI - -object NVGRenderer { - - private val mc = Minecraft.getInstance() - private val nvgColor = NVGColor.malloc() - private val nvgColor2 = NVGColor.malloc() - private val nvgPaint = NVGPaint.malloc() - - private var checkTexId = 0 - private var hueTexId = 0 - - val defaultFont by lazy { - try { - val stream = NVGRenderer::class.java.getResourceAsStream("/assets/v5/font.otf") - ?: throw Exception("Could not find /assets/v5/font.otf in classpath") - Font("Default", stream) - } catch (e: Exception) { - println("[V5] Failed to load font: ${e.message}") - null - } - } - - private val fontMap = HashMap() - private val fontBounds = FloatArray(4) - - private val imageCache = HashMap() - - private val gifCache = ConcurrentHashMap() - private val glTextureCache = ConcurrentHashMap() - - private val urlCache = ConcurrentHashMap() - private val pendingDownloads = ConcurrentHashMap.newKeySet() - - private data class DecodedImage( - val url: String, - val pixels: ByteBuffer?, - val width: Int, - val height: Int - ) - private val downloadQueue = java.util.concurrent.LinkedBlockingQueue() - private const val MAX_DOWNLOADS_PER_FRAME = 5 - - private val preRenderCallbacks = CopyOnWriteArrayList() - private val renderCallbacks = CopyOnWriteArrayList() - - private var drawing = false - @JvmField var vg = -1L - private var framebufferWarningPrinted = false - - private val gpuBackendField by lazy { - GpuDevice::class.java.getDeclaredField("backend").apply { isAccessible = true } - } - private val directStateAccessMethod by lazy { - Class.forName("com.mojang.blaze3d.opengl.GlDevice") - .getDeclaredMethod("directStateAccess") - .apply { isAccessible = true } - } - - data class GifData( - val width: Int, - val height: Int, - val frameCount: Int, - val delays: IntArray - ) { - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other !is GifData) return false - return width == other.width && height == other.height && - frameCount == other.frameCount && delays.contentEquals(other.delays) - } - override fun hashCode(): Int = 31 * (31 * (31 * width + height) + frameCount) + delays.contentHashCode() - } - - private data class CachedGif( - var frameIds: IntArray?, - var rawFrames: ArrayList?, - val delays: IntArray, - val width: Int, - val height: Int, - var refCount: Int - ) - - private data class CachedImage( - val nvgId: Int, - var refCount: Int, - ) - - private data class NVGFont(val id: Int, val buffer: ByteBuffer) - - @JvmStatic - fun registerV5Render(runnable: Runnable) { - renderCallbacks.add(runnable) - } - - @JvmStatic - fun unregisterV5Render(runnable: Runnable) { - renderCallbacks.remove(runnable) - } - - @JvmStatic - fun registerV5PreRender(runnable: Runnable) { - preRenderCallbacks.add(runnable) - } - - @JvmStatic - fun unregisterV5PreRender(runnable: Runnable) { - preRenderCallbacks.remove(runnable) - } - - fun clearCallbacks() { - renderCallbacks.clear() - preRenderCallbacks.clear() - } - - @JvmStatic - fun runPreDrawables() { - runCallbacks(preRenderCallbacks) - } - - @JvmStatic - fun runDrawables() { - processDownloadQueue() - runCallbacks(renderCallbacks) - } - - private fun runCallbacks(callbacks: List) { - callbacks.forEach { runnable -> - try { - runnable.run() - } catch (e: Exception) { - e.printStackTrace() - } - } - } - - private fun isGameReady(): Boolean { - return mc.window.handle() != 0L - } - - private fun ensureInitialized() { - if (vg != -1L) return - vg = nvgCreate(NVG_ANTIALIAS or NVG_STENCIL_STROKES) - if (vg == -1L) throw RuntimeException("Failed to initialize NanoVG") - } - - private fun mainFramebufferId(): Int { - val target = mc.mainRenderTarget - val colorTexture = target.colorTexture as? GlTexture ?: return GL33C.glGetInteger(GL30.GL_FRAMEBUFFER_BINDING) - return try { - val backend = gpuBackendField.get(RenderSystem.getDevice()) - val directStateAccess = directStateAccessMethod.invoke(backend) as DirectStateAccess - colorTexture.getFbo(directStateAccess, target.depthTexture) - } catch (e: Exception) { - if (!framebufferWarningPrinted) { - framebufferWarningPrinted = true - println("[V5] Failed to bind NanoVG to main framebuffer: ${e.message}") - } - GL33C.glGetInteger(GL30.GL_FRAMEBUFFER_BINDING) - } - } - - @JvmStatic - fun beginFrame(width: Float, height: Float) { - if (!isGameReady()) return - ensureInitialized() - if (drawing) return - - val framebuffer = mc.mainRenderTarget - val prevFramebuffer = GL33C.glGetInteger(GL30.GL_FRAMEBUFFER_BINDING) - val prevViewport = IntArray(4) - GL33C.glGetIntegerv(GL33C.GL_VIEWPORT, prevViewport) - val prevProgram = GL33C.glGetInteger(GL20C.GL_CURRENT_PROGRAM) - - GlStateManager._glBindFramebuffer(GL30.GL_FRAMEBUFFER, mainFramebufferId()) - GlStateManager._viewport(0, 0, framebuffer.width, framebuffer.height) - GlStateManager._activeTexture(GL30.GL_TEXTURE0) - - GL33C.glBindSampler(0, 0) - val pixelRatio = if (width > 0) framebuffer.width.toFloat() / width else 1.0f - - nvgBeginFrame(vg, width, height, pixelRatio) - nvgTextAlign(vg, NVG_ALIGN_LEFT or NVG_ALIGN_TOP) - drawing = true - - savedFramebuffer = prevFramebuffer - savedViewport = prevViewport - savedProgram = prevProgram - } - - private var savedFramebuffer = 0 - private var savedViewport = IntArray(4) - private var savedProgram = 0 - - @JvmStatic - fun endFrame() { - if (!drawing || vg == -1L) return - - nvgEndFrame(vg) - GL33C.glBindSampler(0, 0) - GlStateManager._disableCull() - GlStateManager._disableDepthTest() - GlStateManager._enableBlend() - GlStateManager._blendFuncSeparate(770, 771, 1, 0) - GlStateManager._glUseProgram(savedProgram) - - GlStateManager._glBindFramebuffer(GL30.GL_FRAMEBUFFER, savedFramebuffer) - GlStateManager._viewport(savedViewport[0], savedViewport[1], savedViewport[2], savedViewport[3]) - - GlStateManager._activeTexture(GL30.GL_TEXTURE0) - GlStateManager._bindTexture(0) - - drawing = false - } - - private fun applyColor(color: Int, target: NVGColor = nvgColor) { - nvgRGBA( - ((color shr 16) and 0xFF).toByte(), - ((color shr 8) and 0xFF).toByte(), - (color and 0xFF).toByte(), - ((color shr 24) and 0xFF).toByte(), - target - ) - } - - private fun applyGradient(x: Float, y: Float, w: Float, h: Float, color1: Int, color2: Int, direction: Any) { - applyColor(color1, nvgColor) - applyColor(color2, nvgColor2) - val dir = direction.toString() - when { - dir.contains("LeftToRight") -> nvgLinearGradient(vg, x, y, x + w, y, nvgColor, nvgColor2, nvgPaint) - dir.contains("TopToBottom") -> nvgLinearGradient(vg, x, y, x, y + h, nvgColor, nvgColor2, nvgPaint) - dir.contains("TopLeftToBottomRight") -> nvgLinearGradient(vg, x, y, x + w, y + h, nvgColor, nvgColor2, nvgPaint) - dir.contains("BottomLeftToTopRight") -> nvgLinearGradient(vg, x, y + h, x + w, y, nvgColor, nvgColor2, nvgPaint) - else -> nvgLinearGradient(vg, x, y, x + w, y, nvgColor, nvgColor2, nvgPaint) - } - } - - @JvmStatic - @JvmOverloads - fun drawCheckerboard(x: Float, y: Float, w: Float, h: Float, radius: Float, size: Float = 4f) { - if (!drawing) return - - if (checkTexId == 0) { - val buf = MemoryUtil.memAlloc(16) - val c1 = 64.toByte() - val c2 = 115.toByte() - val a = 255.toByte() - buf.put(c1).put(c1).put(c1).put(a).put(c2).put(c2).put(c2).put(a) - buf.put(c2).put(c2).put(c2).put(a).put(c1).put(c1).put(c1).put(a) - buf.flip() - checkTexId = nvgCreateImageRGBA(vg, 2, 2, NVG_IMAGE_REPEATX or NVG_IMAGE_REPEATY or NVG_IMAGE_NEAREST, buf) - MemoryUtil.memFree(buf) - } - - nvgImagePattern(vg, x, y, size * 2, size * 2, 0f, checkTexId, 1f, nvgPaint) - nvgBeginPath(vg) - nvgRoundedRect(vg, x, y, w, h, radius) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - @JvmStatic - fun drawHueBar(x: Float, y: Float, w: Float, h: Float, radius: Float) { - if (!drawing) return - - if (hueTexId == 0) { - val width = 128 - val buf = MemoryUtil.memAlloc(width * 4) - for (i in 0 until width) { - val rgb = Color.HSBtoRGB(i.toFloat() / width, 1f, 1f) - buf.put((rgb shr 16 and 0xFF).toByte()) - buf.put((rgb shr 8 and 0xFF).toByte()) - buf.put((rgb and 0xFF).toByte()) - buf.put(255.toByte()) - } - buf.flip() - hueTexId = nvgCreateImageRGBA(vg, width, 1, 0, buf) - MemoryUtil.memFree(buf) - } - - nvgImagePattern(vg, x, y, w, 1f, 0f, hueTexId, 1f, nvgPaint) - nvgBeginPath(vg) - nvgRoundedRect(vg, x, y, w, h, radius) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - @JvmStatic - @JvmOverloads - fun drawGradientRect(x: Float, y: Float, w: Float, h: Float, color1: Int, color2: Int, direction: Any, radius: Float = 0f) { - if (!drawing) return - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - applyGradient(x, y, w, h, color1, color2, direction) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - @JvmStatic - @JvmOverloads - fun drawHollowGradientRect(x: Float, y: Float, w: Float, h: Float, thickness: Float, color1: Int, color2: Int, direction: Any, radius: Float = 0f) { - if (!drawing) return - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - nvgStrokeWidth(vg, thickness) - applyGradient(x, y, w, h, color1, color2, direction) - nvgStrokePaint(vg, nvgPaint) - nvgStroke(vg) - } - - @JvmStatic - fun linearGradient(sx: Float, sy: Float, ex: Float, ey: Float, color1: Int, color2: Int) { - applyColor(color1, nvgColor) - applyColor(color2, nvgColor2) - nvgLinearGradient(vg, sx, sy, ex, ey, nvgColor, nvgColor2, nvgPaint) - } - - @JvmStatic - fun setGlobalCompositeOperation(op: Int) { - if (vg != -1L) nvgGlobalCompositeOperation(vg, op) - } - - @JvmStatic fun save() { if (vg != -1L) nvgSave(vg) } - @JvmStatic fun restore() { if (vg != -1L) nvgRestore(vg) } - @JvmStatic fun translate(x: Float, y: Float) { if (vg != -1L) nvgTranslate(vg, x, y) } - @JvmStatic fun rotate(angle: Float) { if (vg != -1L) nvgRotate(vg, Math.toRadians(angle.toDouble()).toFloat()) } - @JvmStatic fun scale(x: Float, y: Float) { if (vg != -1L) nvgScale(vg, x, y) } - @JvmStatic fun globalAlpha(alpha: Float) { if (vg != -1L) nvgGlobalAlpha(vg, alpha.coerceIn(0f, 1f)) } - - @JvmStatic - fun drawRect(x: Float, y: Float, w: Float, h: Float, color: Int) { - if (!drawing) return - nvgBeginPath(vg) - nvgRect(vg, x, y, w, h) - applyColor(color) - nvgFillColor(vg, nvgColor) - nvgFill(vg) - } - - @JvmStatic - fun drawRoundedRect(x: Float, y: Float, w: Float, h: Float, radius: Float, color: Int) { - if (!drawing) return - nvgBeginPath(vg) - nvgRoundedRect(vg, x, y, w, h, radius) - applyColor(color) - nvgFillColor(vg, nvgColor) - nvgFill(vg) - } - - @JvmStatic - fun drawRoundedRectVaried(x: Float, y: Float, w: Float, h: Float, color: Int, tl: Float, tr: Float, br: Float, bl: Float) { - if (!drawing) return - nvgBeginPath(vg) - nvgRoundedRectVarying(vg, x, y, w, h, tl, tr, br, bl) - applyColor(color) - nvgFillColor(vg, nvgColor) - nvgFill(vg) - } - - @JvmStatic - fun drawCircle(x: Float, y: Float, radius: Float, color: Int) { - if (!drawing) return - nvgBeginPath(vg) - nvgCircle(vg, x, y, radius) - applyColor(color) - nvgFillColor(vg, nvgColor) - nvgFill(vg) - } - - @JvmStatic - fun drawDropShadow(x: Float, y: Float, w: Float, h: Float, radius: Float, blur: Float, spread: Float, color: Int) { - if (!drawing) return - applyColor(color, nvgColor) - applyColor(0, nvgColor2) - - nvgBoxGradient(vg, x - spread, y - spread, w + 2 * spread, h + 2 * spread, radius + spread, blur, nvgColor, nvgColor2, nvgPaint) - - nvgBeginPath(vg) - nvgRect(vg, x - spread - blur, y - spread - blur, w + 2 * spread + 2 * blur, h + 2 * spread + 2 * blur) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - @JvmStatic - @JvmOverloads - fun drawHollowRect(x: Float, y: Float, w: Float, h: Float, thickness: Float, color: Int, radius: Float = 0f) { - if (!drawing) return - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - nvgStrokeWidth(vg, thickness) - nvgPathWinding(vg, NVG_HOLE) - applyColor(color) - nvgStrokeColor(vg, nvgColor) - nvgStroke(vg) - } - - @JvmStatic - fun drawLine(x1: Float, y1: Float, x2: Float, y2: Float, thickness: Float, color: Int) { - if (!drawing) return - nvgBeginPath(vg) - nvgMoveTo(vg, x1, y1) - nvgLineTo(vg, x2, y2) - nvgStrokeWidth(vg, thickness) - applyColor(color) - nvgStrokeColor(vg, nvgColor) - nvgStroke(vg) - } - - @JvmStatic - fun loadImage(path: String): String { - ensureInitialized() - - synchronized(imageCache) { - imageCache[path]?.let { - it.refCount++ - return path - } - } - - val bytes = readImage(path) - val nvgId = if (path.endsWith(".svg", true)) loadSVGImage(bytes, path) else loadRasterImage(bytes, path) - - synchronized(imageCache) { - imageCache[path] = CachedImage(nvgId, 1) - } - - return path - } - - @JvmStatic - fun unloadImage(path: String) { - synchronized(imageCache) { - val cached = imageCache[path] ?: return - if (--cached.refCount <= 0) { - nvgDeleteImage(vg, cached.nvgId) - imageCache.remove(path) - } - } - } - - @JvmStatic - fun isImageLoaded(path: String): Boolean = synchronized(imageCache) { imageCache.containsKey(path) } - - private fun readImage(path: String): ByteArray { - val trimmed = path.trim() - val stream = when { - trimmed.startsWith("http://") || trimmed.startsWith("https://") -> URI.create(trimmed).toURL().openStream() - File(trimmed).isFile -> FileInputStream(trimmed) - else -> NVGRenderer::class.java.getResourceAsStream(trimmed) - ?: throw FileNotFoundException("Cannot find image: $trimmed") - } - return stream.use { it.readBytes() } - } - - private fun loadRasterImage(bytes: ByteArray, identifier: String): Int { - val w = IntArray(1) - val h = IntArray(1) - val channels = IntArray(1) - val buffer = MemoryUtil.memAlloc(bytes.size).put(bytes).flip() as ByteBuffer - try { - val pixels = stbi_load_from_memory(buffer, w, h, channels, 4) - ?: throw RuntimeException("Failed to load image: $identifier") - val nvgId = nvgCreateImageRGBA(vg, w[0], h[0], 0, pixels) - stbi_image_free(pixels) - return nvgId - } finally { - MemoryUtil.memFree(buffer) - } - } - - private fun loadSVGImage(bytes: ByteArray, identifier: String): Int { - val svg = nsvgParse(String(bytes), "px", 96f) - ?: throw RuntimeException("Failed to parse SVG: $identifier") - - val width = svg.width().toInt() - val height = svg.height().toInt() - - if (width <= 0 || height <= 0) { - nsvgDelete(svg) - throw RuntimeException("Invalid SVG dimensions: $identifier") - } - - val buffer = MemoryUtil.memAlloc(width * height * 4) - try { - val rasterizer = nsvgCreateRasterizer() - nsvgRasterize(rasterizer, svg, 0f, 0f, 1f, buffer, width, height, width * 4) - val nvgId = nvgCreateImageRGBA(vg, width, height, 0, buffer) - nsvgDeleteRasterizer(rasterizer) - return nvgId - } finally { - nsvgDelete(svg) - MemoryUtil.memFree(buffer) - } - } - - @JvmStatic - fun loadGif(path: String): GifData? { - gifCache[path]?.let { cached -> - synchronized(cached) { cached.refCount++ } - val count = cached.frameIds?.size ?: cached.rawFrames?.size ?: 0 - return GifData(cached.width, cached.height, count, cached.delays) - } - - val file = File(path) - if (!file.exists()) return null - - try { - FileInputStream(file).use { stream -> - val readers = ImageIO.getImageReadersByFormatName("gif") - if (!readers.hasNext()) return null - val reader = readers.next() - reader.input = ImageIO.createImageInputStream(stream) - - val numFrames = reader.getNumImages(true) - val rawFrames = ArrayList(numFrames) - val delays = IntArray(numFrames) - - val firstFrame = reader.read(0) - val width = firstFrame.width - val height = firstFrame.height - - val masterImage = BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB) - val masterGraphics = masterImage.createGraphics() - masterGraphics.background = Color(0, 0, 0, 0) - - for (i in 0 until numFrames) { - val frameImage = reader.read(i) - val metadata = reader.getImageMetadata(i) - val tree = metadata.getAsTree(metadata.nativeMetadataFormatName) as IIOMetadataNode - - val gce = tree.getElementsByTagName("GraphicControlExtension").item(0) as IIOMetadataNode - delays[i] = (gce.getAttribute("delayTime").toInt() * 10).coerceAtLeast(10) - val disposal = gce.getAttribute("disposalMethod") - - val imgDesc = tree.getElementsByTagName("ImageDescriptor").item(0) as IIOMetadataNode - val fx = imgDesc.getAttribute("imageLeftPosition").toInt() - val fy = imgDesc.getAttribute("imageTopPosition").toInt() - - masterGraphics.drawImage(frameImage, fx, fy, null) - rawFrames.add(bufferedImageToByteBuffer(masterImage)) - - if (disposal == "restoreToBackgroundColor") { - masterGraphics.clearRect(fx, fy, frameImage.width, frameImage.height) - } - } - masterGraphics.dispose() - reader.dispose() - - gifCache[path] = CachedGif(null, rawFrames, delays, width, height, 1) - return GifData(width, height, numFrames, delays) - } - } catch (e: Exception) { - println("[V5] Failed to load GIF $path: ${e.message}") - return null - } - } - - @JvmStatic - fun unloadGif(path: String) { - val cached = gifCache[path] ?: return - val shouldFree = synchronized(cached) { --cached.refCount <= 0 } - - if (shouldFree) { - cached.frameIds?.forEach { nvgDeleteImage(vg, it) } - cached.rawFrames?.forEach { MemoryUtil.memFree(it) } - gifCache.remove(path) - } - } - - @JvmStatic - @JvmOverloads - fun drawGif(path: String, x: Float, y: Float, w: Float, h: Float, frameIndex: Int, radius: Float = 0f, alpha: Float = 1f) { - if (!drawing) return - val cached = gifCache[path] ?: return - - if (cached.frameIds == null) { - val raw = cached.rawFrames ?: return - cached.frameIds = IntArray(raw.size) { i -> - val id = nvgCreateImageRGBA(vg, cached.width, cached.height, 0, raw[i]) - MemoryUtil.memFree(raw[i]) - id - } - cached.rawFrames = null - } - - val frames = cached.frameIds!! - if (frames.isEmpty()) return - - nvgImagePattern(vg, x, y, w, h, 0f, frames[frameIndex % frames.size], alpha, nvgPaint) - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - private fun bufferedImageToByteBuffer(image: BufferedImage): ByteBuffer { - val pixels = IntArray(image.width * image.height) - image.getRGB(0, 0, image.width, image.height, pixels, 0, image.width) - - val buffer = MemoryUtil.memAlloc(pixels.size * 4) - for (pixel in pixels) { - buffer.put((pixel shr 16 and 0xFF).toByte()) // R - buffer.put((pixel shr 8 and 0xFF).toByte()) // G - buffer.put((pixel and 0xFF).toByte()) // B - buffer.put((pixel shr 24 and 0xFF).toByte()) // A - } - buffer.flip() - return buffer - } - - @JvmStatic - @JvmOverloads - fun drawImage(path: String, x: Float, y: Float, w: Float, h: Float, radius: Float = 0f, alpha: Float = 1f) { - if (!drawing) return - - val cached = synchronized(imageCache) { imageCache[path] } - - if (cached == null) { - try { - loadImage(path) - drawImage(path, x, y, w, h, radius, alpha) - } catch (e: Exception) { - println("[V5] Failed to load image: $path - ${e.message}") - } - return - } - - nvgImagePattern(vg, x, y, w, h, 0f, cached.nvgId, alpha, nvgPaint) - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - private fun processDownloadQueue() { - var processed = 0 - while (processed < MAX_DOWNLOADS_PER_FRAME) { - val decoded = downloadQueue.poll() ?: break - - if (decoded.pixels != null && vg != -1L) { - val nvgId = nvgCreateImageRGBA(vg, decoded.width, decoded.height, 0, decoded.pixels) - stbi_image_free(decoded.pixels) - urlCache[decoded.url] = nvgId - } else { - urlCache[decoded.url] = 0 - } - pendingDownloads.remove(decoded.url) - processed++ - } - } - - @JvmStatic - @JvmOverloads - fun drawImageFromUrl(url: String, x: Float, y: Float, w: Float, h: Float, radius: Float = 0f, alpha: Float = 1f) { - if (!drawing || url == "none") return - - urlCache[url]?.let { cachedId -> - if (cachedId > 0) { - nvgImagePattern(vg, x, y, w, h, 0f, cachedId, alpha, nvgPaint) - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - return - } - - if (pendingDownloads.add(url)) { - Thread({ - try { - val connection = URI.create(url).toURL().openConnection().apply { - connectTimeout = 5000 - readTimeout = 5000 - setRequestProperty("User-Agent", "Mozilla/5.0") - } - val bytes = connection.getInputStream().use { it.readBytes() } - - val buffer = MemoryUtil.memAlloc(bytes.size).put(bytes).flip() as ByteBuffer - val wArr = IntArray(1) - val hArr = IntArray(1) - val cArr = IntArray(1) - - val pixels = stbi_load_from_memory(buffer, wArr, hArr, cArr, 4) - MemoryUtil.memFree(buffer) - - if (pixels != null) { - downloadQueue.add(DecodedImage(url, pixels, wArr[0], hArr[0])) - } else { - downloadQueue.add(DecodedImage(url, null, 0, 0)) - } - } catch (e: Exception) { - downloadQueue.add(DecodedImage(url, null, 0, 0)) - } - }, "V5-ImageDownload-${url.hashCode()}").start() - } - } - - @JvmStatic - @JvmOverloads - fun drawGLTexture(glTextureId: Int, texW: Int, texH: Int, x: Float, y: Float, w: Float, h: Float, radius: Float = 0f, alpha: Float = 1f) { - if (!drawing) return - ensureInitialized() - - val nvgId = glTextureCache.getOrPut(glTextureId) { - nvglCreateImageFromHandle(vg, glTextureId, texW, texH, NVG_IMAGE_NODELETE) - } - if (nvgId == 0) return - - nvgImagePattern(vg, x, y, w, h, 0f, nvgId, alpha, nvgPaint) - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - @JvmStatic - @JvmOverloads - fun drawGLTextureRegion(glTextureId: Int, textureWidth: Int, textureHeight: Int, subX: Int, subY: Int, subW: Int, subH: Int, x: Float, y: Float, w: Float, h: Float, radius: Float = 0f, alpha: Float = 1f) { - if (!drawing) return - ensureInitialized() - - val nvgId = glTextureCache.getOrPut(glTextureId) { - nvglCreateImageFromHandle(vg, glTextureId, textureWidth, textureHeight, NVG_IMAGE_NODELETE) - } - if (nvgId == 0) return - - val sw = subW.toFloat() / textureWidth - val sh = subH.toFloat() / textureHeight - val iw = w / sw - val ih = h / sh - val ix = x - iw * (subX.toFloat() / textureWidth) - val iy = y - ih * (subY.toFloat() / textureHeight) - - nvgImagePattern(vg, ix, iy, iw, ih, 0f, nvgId, alpha, nvgPaint) - nvgBeginPath(vg) - if (radius > 0) nvgRoundedRect(vg, x, y, w, h, radius) else nvgRect(vg, x, y, w, h) - nvgFillPaint(vg, nvgPaint) - nvgFill(vg) - } - - @JvmStatic - fun invalidateGLTexture(glTextureId: Int) { - glTextureCache.remove(glTextureId)?.takeIf { it != 0 }?.let { nvgDeleteImage(vg, it) } - } - - @JvmStatic - fun clearImageCache() { - if (vg == -1L) return - - synchronized(imageCache) { - imageCache.values.forEach { nvgDeleteImage(vg, it.nvgId) } - imageCache.clear() - } - - gifCache.values.forEach { gif -> - gif.frameIds?.forEach { nvgDeleteImage(vg, it) } - gif.rawFrames?.forEach { MemoryUtil.memFree(it) } - } - gifCache.clear() - - glTextureCache.values.filter { it != 0 }.forEach { nvgDeleteImage(vg, it) } - glTextureCache.clear() - - urlCache.values.filter { it > 0 }.forEach { nvgDeleteImage(vg, it) } - urlCache.clear() - pendingDownloads.clear() - - if (checkTexId != 0) { - nvgDeleteImage(vg, checkTexId) - checkTexId = 0 - } - if (hueTexId != 0) { - nvgDeleteImage(vg, hueTexId) - hueTexId = 0 - } - } - - @JvmStatic - fun getCacheStats(): String { - return "Images: ${imageCache.size}, GIFs: ${gifCache.size}, GL: ${glTextureCache.size}, URLs: ${urlCache.size}" - } - - @JvmStatic - fun scissor(x: Float, y: Float, w: Float, h: Float) { - if (vg != -1L) nvgIntersectScissor(vg, x, y, w, h) - } - - @JvmStatic - fun pushScissor(x: Float, y: Float, w: Float, h: Float) { - if (vg != -1L) { - nvgSave(vg) - nvgIntersectScissor(vg, x, y, w, h) - } - } - - @JvmStatic - fun popScissor() { - if (vg != -1L) nvgRestore(vg) - } - - @JvmStatic - fun resetScissor() { - if (vg != -1L) nvgResetScissor(vg) - } - - @JvmStatic - @JvmOverloads - fun text(text: String, x: Float, y: Float, size: Float, color: Int, font: Font? = defaultFont, align: Int) { - if (font == null || !drawing) return - nvgFontSize(vg, size) - nvgFontFaceId(vg, getFontID(font)) - nvgTextAlign(vg, align) - applyColor(color) - nvgFillColor(vg, nvgColor) - nvgText(vg, x, y, text) - } - - @JvmStatic - @JvmOverloads - fun textWidth(text: String, size: Float, font: Font? = defaultFont): Float { - if (font == null || vg == -1L) return 0f - nvgFontSize(vg, size) - nvgFontFaceId(vg, getFontID(font)) - return nvgTextBounds(vg, 0f, 0f, text, fontBounds) - } - - private fun getFontID(font: Font): Int { - return fontMap.getOrPut(font) { - val buffer = font.buffer() - NVGFont(nvgCreateFontMem(vg, font.name, buffer, false), buffer) - }.id - } - - @JvmStatic - fun destroy() { - clearImageCache() - - fontMap.clear() - - if (vg != -1L) { - nvgDelete(vg) - vg = -1L - } - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Rectangle.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Rectangle.kt index e3a58195..055a04fb 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Rectangle.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Rectangle.kt @@ -15,7 +15,7 @@ class Rectangle( fun getColor(): Long = color - fun setColor(color: Long) = apply { this.color = Renderer.fixAlpha(color) } + fun setColor(color: Long) = apply { this.color = Render2D.fixAlpha(color) } fun getX(): Float = x @@ -82,7 +82,7 @@ class Rectangle( fun draw() = apply { shadow.draw() outline.draw() - Renderer.drawRect(color, x, y, width, height) + Render2D.drawRect(x, y, width, height, color.toInt()) } private class Shadow( @@ -93,20 +93,8 @@ class Rectangle( ) { fun draw() { if (!on) return - Renderer.drawRect( - color, - rect.x + offset.x, - rect.y + rect.height, - rect.width, - offset.y - ) - Renderer.drawRect( - color, - rect.x + rect.width, - rect.y + offset.y, - offset.x, - rect.height - offset.y - ) + Render2D.drawRect(rect.x + offset.x, rect.y + rect.height, rect.width, offset.y, color.toInt()) + Render2D.drawRect(rect.x + rect.width, rect.y + offset.y, offset.x, rect.height - offset.y, color.toInt()) } } @@ -118,12 +106,12 @@ class Rectangle( ) { fun draw() { if (!on) return - Renderer.drawRect( - color, + Render2D.drawRect( rect.x - thickness, rect.y - thickness, rect.width + thickness * 2, - rect.height + thickness * 2 + rect.height + thickness * 2, + color.toInt(), ) } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Render2D.kt similarity index 55% rename from src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer.kt rename to src/main/kotlin/com/chattriggers/ctjs/api/render/Render2D.kt index c07b319f..e113d43b 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Render2D.kt @@ -1,7 +1,7 @@ package com.chattriggers.ctjs.api.render -import com.chattriggers.ctjs.MCVertexFormat import com.chattriggers.ctjs.api.client.Client +import com.chattriggers.ctjs.api.client.MinecraftCompat import com.chattriggers.ctjs.api.client.Player import com.chattriggers.ctjs.api.entity.PlayerMP import com.chattriggers.ctjs.api.message.ChatLib @@ -10,15 +10,9 @@ import com.chattriggers.ctjs.engine.LogType import com.chattriggers.ctjs.engine.printToConsole import com.chattriggers.ctjs.internal.utils.getOrDefault import com.chattriggers.ctjs.internal.utils.toRadians -import com.mojang.blaze3d.opengl.GlStateManager -import com.mojang.blaze3d.opengl.GlTexture -import com.mojang.blaze3d.pipeline.RenderPipeline.Snippet -import gg.essential.universal.UGraphics import gg.essential.universal.UMatrixStack import net.minecraft.client.gui.Font -import net.minecraft.client.renderer.RenderPipelines import net.minecraft.client.player.AbstractClientPlayer -import com.mojang.blaze3d.vertex.DefaultVertexFormat import net.minecraft.client.renderer.entity.EntityRendererProvider import com.mojang.blaze3d.vertex.PoseStack import org.joml.Matrix4f @@ -27,15 +21,10 @@ import org.mozilla.javascript.NativeObject import kotlin.collections.ArrayDeque import kotlin.math.PI import kotlin.math.atan -import kotlin.math.atan2 -import kotlin.math.cos -import kotlin.math.max -import kotlin.math.min import kotlin.math.roundToInt import kotlin.math.sin -import org.lwjgl.opengl.GL13.GL_TEXTURE0 -object Renderer { +object Render2D : GuiRendererBackend() { private val NEWLINE_REGEX = """\n|\r\n?""".toRegex() // The currently-active matrix stack @@ -167,37 +156,6 @@ object Renderer { return intArrayOf(red, green, blue) } - @JvmStatic - fun disableCull() = apply { LegacyPipelineBuilder.disableCull() } - - @JvmStatic - fun enableCull() = apply { LegacyPipelineBuilder.enableCull() } - - @JvmStatic - fun disableLighting() = apply { UGraphics.disableLighting() } - - @JvmStatic - fun enableLighting() = apply { UGraphics.enableLighting() } - - @JvmStatic - fun disableDepth() = apply { LegacyPipelineBuilder.disableDepth() } - - @JvmStatic - fun enableDepth() = apply { LegacyPipelineBuilder.enableDepth() } - - @JvmStatic - fun disableBlend() = apply { LegacyPipelineBuilder.disableBlend() } - - @JvmStatic - fun enableBlend() = apply { LegacyPipelineBuilder.enableBlend() } - - @JvmStatic - @JvmOverloads - fun bindTexture(texture: Image, textureIndex: Int = 0) = apply { - GlStateManager._activeTexture(GL_TEXTURE0 + textureIndex) - GlStateManager._bindTexture((texture.getTexture()?.getTexture() as? GlTexture)?.glId() ?: 0) - } - @JvmStatic fun deleteTexture(texture: Image) = apply { texture.destroy() @@ -224,24 +182,25 @@ object Renderer { @JvmStatic @JvmOverloads fun translate(x: Float, y: Float, z: Float = 0.0F) = apply { - matrixStack.translate(x, y, z) - DrawContextHolder.currentContext?.pose()?.translate(x, y) + if (translateSkija(x, y)) return@apply + DrawContextHolder.currentContext?.pose()?.translate(x, y) ?: matrixStack.translate(x, y, z) } @JvmStatic @JvmOverloads fun scale(scaleX: Float, scaleY: Float = scaleX, scaleZ: Float = 1f) = apply { - matrixStack.scale(scaleX, scaleY, scaleZ) - DrawContextHolder.currentContext?.pose()?.scale(scaleX, scaleY) + if (scaleSkija(scaleX, scaleY)) return@apply + DrawContextHolder.currentContext?.pose()?.scale(scaleX, scaleY) ?: matrixStack.scale(scaleX, scaleY, scaleZ) } @JvmStatic @JvmOverloads fun rotate(angle: Float, x: Float = 0f, y: Float = 0f, z: Float = 1f) = apply { - matrixStack.rotate(angle, x, y, z) if (x == 0f && y == 0f && z != 0f) { - DrawContextHolder.currentContext?.pose()?.rotate(angle * z) - } + if (rotateSkija(angle * z)) return@apply + DrawContextHolder.currentContext?.pose()?.rotate(Math.toRadians((angle * z).toDouble()).toFloat()) + ?: matrixStack.rotate(angle, x, y, z) + } else matrixStack.rotate(angle, x, y, z) } @JvmStatic @@ -257,135 +216,6 @@ object Renderer { else color } - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - @JvmStatic - @JvmOverloads - fun begin( - drawMode: DrawMode = Renderer.DrawMode.QUADS, - vertexFormat: VertexFormat = Renderer.VertexFormat.POSITION, - snippet: Renderer.RenderSnippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET - ) = apply { - Renderer3d.begin(drawMode, vertexFormat, snippet) - } - - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - @JvmOverloads - fun pos(x: Float, y: Float, z: Float = 0f) = apply { - val camera = Client.getMinecraft().gameRenderer.mainCamera.position() - Renderer3d.pos(x + camera.x.toFloat(), y + camera.y.toFloat(), z + camera.z.toFloat()) - } - - /** - * Sets the texture location on the last defined vertex. - * - * @param u the u position in the texture - * @param v the v position in the texture - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - fun tex(u: Float, v: Float) = apply { - Renderer3d.tex(u, v) - } - - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - @JvmOverloads - fun color(r: Float, g: Float, b: Float, a: Float = 1f) = apply { - Renderer3d.color(r, g, b, a) - } - - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - @JvmOverloads - fun color(r: Int, g: Int, b: Int, a: Int = 255) = apply { - Renderer3d.color(r, g, b, a) - } - - /** - * Sets the color for the last defined vertex. - * - * @param color the color value, can use [getColor] to get this - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - fun color(color: Long) = apply { - Renderer3d.color(color) - } - - /** - * Sets the normal of the vertex. This is mostly used with [VertexFormat.LINES] - * - * @param x the x position of the normal vector - * @param y the y position of the normal vector - * @param z the z position of the normal vector - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - fun normal(x: Float, y: Float, z: Float) = apply { - Renderer3d.normal(x, y, z) - } - - /** - * Sets the overlay location on the last defined vertex. - * - * @param u the u position in the overlay - * @param v the v position in the overlay - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - fun overlay(u: Int, v: Int) = apply { - Renderer3d.overlay(u, v) - } - - /** - * Sets the light location on the last defined vertex. - * - * @param u the u position in the light - * @param v the v position in the light - * @return [Renderer] to allow for method chaining - */ - @JvmStatic - fun light(u: Int, v: Int) = apply { - Renderer3d.light(u, v) - } - - /** - * Finalizes vertices and draws the world renderer. - */ - @JvmStatic - fun draw() = Renderer3d.draw() - /** * Gets a fixed render position from x, y, and z inputs adjusted with partial ticks * @param x the X coordinate @@ -402,80 +232,6 @@ object Renderer { ) } - @JvmStatic - fun drawRect(color: Long, x: Float, y: Float, width: Float, height: Float) = apply { - DrawContextHolder.currentContext?.let { context -> - val x1 = x.roundToInt() - val y1 = y.roundToInt() - context.fill(x1, y1, (x + width).roundToInt(), (y + height).roundToInt(), color.toInt()) - return@apply - } - - val left = min(x, x + width) - val right = max(x, x + width) - val top = min(y, y + height) - val bottom = max(y, y + height) - - begin(vertexFormat = VertexFormat.POSITION_COLOR) - pos(left, bottom, 0f).color(color) - pos(right, bottom, 0f).color(color) - pos(right, top, 0f).color(color) - pos(left, top, 0f).color(color) - draw() - } - - @JvmStatic - fun drawLine( - color: Long, - x1: Float, - y1: Float, - x2: Float, - y2: Float, - thickness: Float, - ) { - val theta = -atan2(y2 - y1, x2 - x1) - val i = sin(theta) * (thickness / 2) - val j = cos(theta) * (thickness / 2) - - begin(vertexFormat = VertexFormat.POSITION_COLOR) - pos(x1 + i, y1 + j, 0f).color(color) - pos(x2 + i, y2 + j, 0f).color(color) - pos(x2 - i, y2 - j, 0f).color(color) - pos(x1 - i, y1 - j, 0f).color(color) - draw() - } - - @JvmStatic - fun drawCircle( - color: Long, - x: Float, - y: Float, - radius: Float, - steps: Int, - ) { - val theta = 2 * PI / steps - val cos = cos(theta).toFloat() - val sin = sin(theta).toFloat() - - var xHolder: Float - var circleX = 1f - var circleY = 0f - - begin(DrawMode.TRIANGLE_STRIP, VertexFormat.POSITION_COLOR) - - for (i in 0..steps) { - pos(x, y, 0f).color(color) - pos(circleX * radius + x, circleY * radius + y, 0f).color(color) - xHolder = circleX - circleX = cos * circleX - sin * circleY - circleY = sin * xHolder + cos * circleY - - pos(circleX * radius + x, circleY * radius + y, 0f).color(color) - } - - draw() - } - @JvmStatic @JvmOverloads fun drawString( @@ -494,25 +250,6 @@ object Renderer { } return } - - val immediate = Client.getMinecraft().renderBuffers().bufferSource() - splitText(text).lines.forEach { - fr.drawInBatch( - it, - x, - newY, - color.toInt(), - shadow, - matrixStack.toMC().last().pose(), - immediate, - Font.DisplayMode.NORMAL, - 0, - 0xf000f0, - ) - - newY += fr.lineHeight - } - immediate.endBatch() } @JvmStatic @@ -533,17 +270,13 @@ object Renderer { @JvmStatic fun drawImage(image: Image, x: Float, y: Float, width: Float, height: Float) { - scale(1f, 1f, 50f) - - // FIXME: icba to do this -// RenderSystem.setShaderTexture(0, image.getTexture()?.glTextureView) - - begin(DrawMode.QUADS, VertexFormat.POSITION_TEXTURE_COLOR, snippet = RenderSnippet.POSITION_TEX_COLOR_SNIPPET) - pos(x, y + height, 0f).tex(0f, 1f).color(WHITE) - pos(x + width, y + height, 0f).tex(1f, 1f).color(WHITE) - pos(x + width, y, 0f).tex(1f, 0f).color(WHITE) - pos(x, y, 0f).tex(0f, 0f).color(WHITE) - draw() + val texture = image.getTexture() ?: return + DrawContextHolder.currentContext?.blit( + texture.textureView, + texture.sampler, + x.roundToInt(), y.roundToInt(), width.roundToInt(), height.roundToInt(), + 0f, 0f, 1f, 1f, + ) } /** @@ -647,8 +380,6 @@ object Renderer { entityRenderDispatcher.camera?.rotation()?.set(pitchModelRotation) } - // entityRenderDispatcher.setRenderShadows(false) - val vertexConsumers = Client.getMinecraft().renderBuffers().bufferSource() // val light = 0xf000f0 @@ -680,13 +411,12 @@ object Renderer { entityRenderer.submit( playerEntityRenderState, matrixStack.toMC(), - Client.getMinecraft().gameRenderer.submitNodeStorage, - Client.getMinecraft().gameRenderer.gameRenderState.levelRenderState.cameraRenderState + MinecraftCompat.submitNodeStorage(Client.getMinecraft().gameRenderer), + MinecraftCompat.gameRenderState(Client.getMinecraft().gameRenderer).levelRenderState.cameraRenderState, ) matrixStack.pop() - vertexConsumers.endBatch() // entityRenderDispatcher.setRenderShadows(true) matrixStack.pop() // TODO: find out a way to get Diffuse instance and call setType @@ -702,8 +432,8 @@ object Renderer { matrixStack.pop() } - internal fun withMatrix(stack: PoseStack?, partialTicks: Float = Renderer.partialTicks, block: () -> Unit) { - Renderer.partialTicks = partialTicks + internal fun withMatrix(stack: PoseStack?, partialTicks: Float = Render2D.partialTicks, block: () -> Unit) { + Render2D.partialTicks = partialTicks matrixPushCounter = 0 try { @@ -717,64 +447,12 @@ object Renderer { } if (matrixPushCounter > 0) { - "Warning: Render function missing a call to Renderer.popMatrix()".printToConsole(LogType.WARN) + "Warning: Render function missing a call to Render2D.popMatrix()".printToConsole(LogType.WARN) } else if (matrixPushCounter < 0) { - "Warning: Render function has too many calls to Renderer.popMatrix()".printToConsole(LogType.WARN) + "Warning: Render function has too many calls to Render2D.popMatrix()".printToConsole(LogType.WARN) } } - enum class DrawMode(private val ucValue: UGraphics.DrawMode) { - LINES(UGraphics.DrawMode.LINES), - LINE_STRIP(UGraphics.DrawMode.LINE_STRIP), - TRIANGLES(UGraphics.DrawMode.TRIANGLES), - TRIANGLE_STRIP(UGraphics.DrawMode.TRIANGLE_STRIP), - TRIANGLE_FAN(UGraphics.DrawMode.TRIANGLE_FAN), - QUADS(UGraphics.DrawMode.QUADS); - - fun toUC() = ucValue - - companion object { - @JvmStatic - fun fromUC(ucValue: UGraphics.DrawMode) = entries.first { it.ucValue == ucValue } - } - } - - enum class VertexFormat(private val mcValue: MCVertexFormat) { - LINES(DefaultVertexFormat.POSITION_COLOR_NORMAL), - POSITION(DefaultVertexFormat.POSITION), - POSITION_COLOR(DefaultVertexFormat.POSITION_COLOR), - POSITION_TEXTURE(DefaultVertexFormat.POSITION_TEX), - POSITION_TEXTURE_COLOR(DefaultVertexFormat.POSITION_TEX_COLOR), - POSITION_COLOR_TEXTURE_LIGHT(DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP), - POSITION_TEXTURE_LIGHT_COLOR(DefaultVertexFormat.POSITION_TEX_LIGHTMAP_COLOR), - POSITION_TEXTURE_COLOR_LIGHT(DefaultVertexFormat.PARTICLE), - POSITION_TEXTURE_COLOR_NORMAL(DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL); - - fun toMC() = mcValue - - companion object { - @JvmStatic - fun fromMC(ucValue: MCVertexFormat) = entries.first { it.mcValue == ucValue } - } - } - - enum class RenderSnippet(val mcSnippet: Snippet) { - TERRAIN_SNIPPET(RenderPipelines.TERRAIN_SNIPPET), - ENTITY_SNIPPET(RenderPipelines.ENTITY_SNIPPET), - RENDERTYPE_BEACON_BEAM_SNIPPET(RenderPipelines.BEACON_BEAM_SNIPPET), - TEXT_SNIPPET(RenderPipelines.TEXT_SNIPPET), - RENDERTYPE_END_PORTAL_SNIPPET(RenderPipelines.END_PORTAL_SNIPPET), - RENDERTYPE_CLOUDS_SNIPPET(RenderPipelines.CLOUDS_SNIPPET), - RENDERTYPE_LINES_SNIPPET(RenderPipelines.LINES_SNIPPET), - POSITION_COLOR_SNIPPET(RenderPipelines.DEBUG_FILLED_SNIPPET), - PARTICLE_SNIPPET(RenderPipelines.PARTICLE_SNIPPET), - WEATHER_SNIPPET(RenderPipelines.WEATHER_SNIPPET), - GUI_SNIPPET(RenderPipelines.GUI_SNIPPET), - POSITION_TEX_COLOR_SNIPPET(RenderPipelines.GUI_TEXTURED_SNIPPET), - RENDERTYPE_OUTLINE_SNIPPET(RenderPipelines.OUTLINE_SNIPPET), - POST_EFFECT_PROCESSOR_SNIPPET(RenderPipelines.POST_PROCESSING_SNIPPET), - } - class ScreenWrapper { fun getWidth(): Int = Client.getMinecraft().window.guiScaledWidth diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Render3D.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Render3D.kt new file mode 100644 index 00000000..0bbd07ea --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Render3D.kt @@ -0,0 +1,229 @@ +package com.chattriggers.ctjs.api.render +import com.chattriggers.ctjs.api.client.MinecraftCompat + +import net.minecraft.client.Minecraft +import net.minecraft.gizmos.GizmoStyle +import net.minecraft.gizmos.Gizmos +import net.minecraft.gizmos.TextGizmo +import net.minecraft.util.ARGB +import net.minecraft.world.entity.Entity +import net.minecraft.world.phys.AABB +import net.minecraft.world.phys.Vec3 + +object Render3D { + private val client = Minecraft.getInstance() + + data class Color(val r: Int, val g: Int, val b: Int, val a: Int) { + val packed = ARGB.color(a, r, g, b) + } + + @JvmStatic + @JvmOverloads + fun drawFilledBox(pos: Vec3, color: Color, depth: Boolean = false) = + drawFilledBox(AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1), color, depth) + + @JvmStatic + @JvmOverloads + fun drawFilledBox(box: AABB, color: Color, depth: Boolean = false) { + Gizmos.cuboid(box, GizmoStyle.fill(color.packed)).depth(depth) + } + + @JvmStatic + @JvmOverloads + fun drawFilledBoxes(positions: Array, color: Color, depth: Boolean = false) { + val style = GizmoStyle.fill(color.packed) + positions.forEach { pos -> + Gizmos.cuboid(AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1), style).depth(depth) + } + } + + @JvmStatic + @JvmOverloads + fun drawFilledAABBs(boxes: Array, color: Color, depth: Boolean = false) { + val style = GizmoStyle.fill(color.packed) + boxes.forEach { box -> Gizmos.cuboid(box, style).depth(depth) } + } + + @JvmStatic + @JvmOverloads + fun drawWireFrameBox(pos: Vec3, color: Color, thickness: Float = 5f, depth: Boolean = false) = + drawWireFrameBox(AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1), color, thickness, depth) + + @JvmStatic + @JvmOverloads + fun drawWireFrameBox(box: AABB, color: Color, thickness: Float = 5f, depth: Boolean = false) { + Gizmos.cuboid(box, GizmoStyle.stroke(color.packed, thickness)).depth(depth) + } + + @JvmStatic + @JvmOverloads + fun drawWireFrameBoxes(positions: Array, color: Color, thickness: Float = 5f, depth: Boolean = false) { + val style = GizmoStyle.stroke(color.packed, thickness) + positions.forEach { pos -> + Gizmos.cuboid(AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1), style).depth(depth) + } + } + + @JvmStatic + @JvmOverloads + fun drawWireFrameAABBs(boxes: Array, color: Color, thickness: Float = 5f, depth: Boolean = false) { + val style = GizmoStyle.stroke(color.packed, thickness) + boxes.forEach { box -> Gizmos.cuboid(box, style).depth(depth) } + } + + @JvmStatic + @JvmOverloads + fun drawBox(box: AABB, color: Color, thickness: Float = 2f, depth: Boolean = false) { + Gizmos.cuboid(box, GizmoStyle.strokeAndFill(color.packed, thickness, color.packed)).depth(depth) + } + + @JvmStatic + @JvmOverloads + fun drawBoxes(boxes: Array, color: Color, thickness: Float = 2f, depth: Boolean = false) { + val style = GizmoStyle.strokeAndFill(color.packed, thickness, color.packed) + boxes.forEach { box -> Gizmos.cuboid(box, style).depth(depth) } + } + + @JvmStatic + @JvmOverloads + fun drawStyledBox(pos: Vec3, color1: Color, color2: Color, wireThickness: Float = 5f, depth: Boolean = false) { + val box = AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1) + Gizmos.cuboid(box, GizmoStyle.strokeAndFill(color2.packed, wireThickness, color1.packed)).depth(depth) + } + + @JvmStatic + @JvmOverloads + fun drawStyledBoxes(positions: Array, color1: Color, color2: Color, wireThickness: Float = 5f, depth: Boolean = false) { + val style = GizmoStyle.strokeAndFill(color2.packed, wireThickness, color1.packed) + positions.forEach { pos -> + Gizmos.cuboid(AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1), style).depth(depth) + } + } + + @JvmStatic + @JvmOverloads + fun drawSizedBox(pos: Vec3, width: Double, height: Double, length: Double, color: Color, filled: Boolean = true, thickness: Float = 1f, depth: Boolean = false) { + val box = AABB(pos.x - width / 2, pos.y, pos.z - length / 2, pos.x + width / 2, pos.y + height, pos.z + length / 2) + Gizmos.cuboid(box, if (filled) GizmoStyle.fill(color.packed) else GizmoStyle.stroke(color.packed, thickness)).depth(depth) + } + + @JvmStatic + @JvmOverloads + fun drawSizedBoxes(positions: Array, width: Double, height: Double, length: Double, color: Color, filled: Boolean = true, thickness: Float = 1f, depth: Boolean = false) { + val style = if (filled) GizmoStyle.fill(color.packed) else GizmoStyle.stroke(color.packed, thickness) + positions.forEach { pos -> + val box = AABB(pos.x - width / 2, pos.y, pos.z - length / 2, pos.x + width / 2, pos.y + height, pos.z + length / 2) + Gizmos.cuboid(box, style).depth(depth) + } + } + + @JvmStatic + @JvmOverloads + fun drawHitbox(entity: Entity, color: Color, thickness: Float = 2f, depth: Boolean = false) { + val partialTicks = client.deltaTracker.getGameTimeDeltaPartialTick(true) + val box = entity.boundingBox.move( + entity.xOld + (entity.x - entity.xOld) * partialTicks - entity.x, + entity.yOld + (entity.y - entity.yOld) * partialTicks - entity.y, + entity.zOld + (entity.z - entity.zOld) * partialTicks - entity.z, + ) + drawBox(box, color, thickness, depth) + } + + @JvmStatic + @JvmOverloads + fun drawHitboxes(entities: Array, color: Color, thickness: Float = 2f, depth: Boolean = false) { + val partialTicks = client.deltaTracker.getGameTimeDeltaPartialTick(true) + val style = GizmoStyle.strokeAndFill(color.packed, thickness, color.packed) + entities.forEach { entity -> + val box = entity.boundingBox.move( + entity.xOld + (entity.x - entity.xOld) * partialTicks - entity.x, + entity.yOld + (entity.y - entity.yOld) * partialTicks - entity.y, + entity.zOld + (entity.z - entity.zOld) * partialTicks - entity.z, + ) + Gizmos.cuboid(box, style).depth(depth) + } + } + + @JvmStatic + @JvmOverloads + fun drawLine(start: Vec3, end: Vec3, color: Color, thickness: Float = 3f, depth: Boolean = false) { + Gizmos.line(start, end, color.packed, thickness).depth(depth) + } + + @JvmStatic + @JvmOverloads + fun drawLines(points: Array, color: Color, thickness: Float = 3f, depth: Boolean = false) { + for (i in 0 until points.lastIndex) { + Gizmos.line(points[i], points[i + 1], color.packed, thickness).depth(depth) + } + } + + @JvmStatic + @JvmOverloads + fun drawLines(points: Array, colors: Array, thickness: Float = 3f, depth: Boolean = false) { + for (i in 0 until minOf(points.lastIndex, colors.lastIndex + 1)) { + Gizmos.line(points[i], points[i + 1], colors[i].packed, thickness).depth(depth) + } + } + + @JvmStatic + @JvmOverloads + fun drawTracer(targetPos: Vec3, color: Color, thickness: Float = 2f, depth: Boolean = false) { + val camera = MinecraftCompat.mainCamera(client.gameRenderer) + val start = camera.position().add(Vec3.directionFromRotation(camera.xRot(), camera.yRot()).scale(0.1)) + drawLine(start, targetPos, color, thickness, depth) + } + + @JvmStatic + @JvmOverloads + fun drawTracers(targetPositions: Array, color: Color, thickness: Float = 2f, depth: Boolean = false) { + val camera = MinecraftCompat.mainCamera(client.gameRenderer) + val start = camera.position().add(Vec3.directionFromRotation(camera.xRot(), camera.yRot()).scale(0.1)) + targetPositions.forEach { targetPos -> Gizmos.line(start, targetPos, color.packed, thickness).depth(depth) } + } + + @JvmStatic + @JvmOverloads + fun drawText(text: String, pos: Vec3, scale: Float = 1f, backgroundBox: Boolean = false, increase: Boolean = false, seeThrough: Boolean = false, translate: Boolean = true) { + val camera = MinecraftCompat.mainCamera(client.gameRenderer) + val distanceScale = if (increase) (pos.distanceTo(camera.position()).toFloat() / 120f).coerceAtLeast(0.01f) else 1f + val style = TextGizmo.Style.whiteAndCentered().withScale(TextGizmo.Style.DEFAULT_SCALE * scale * distanceScale) + drawText(text, if (translate) pos else camera.position(), style, backgroundBox, seeThrough) + } + + @JvmStatic + @JvmOverloads + fun drawTexts(texts: Array, positions: Array, scale: Float = 1f, backgroundBox: Boolean = false, increase: Boolean = false, seeThrough: Boolean = false, translate: Boolean = true) { + val camera = MinecraftCompat.mainCamera(client.gameRenderer) + for (i in 0 until minOf(texts.size, positions.size)) { + val pos = positions[i] + val distanceScale = if (increase) (pos.distanceTo(camera.position()).toFloat() / 120f).coerceAtLeast(0.01f) else 1f + val style = TextGizmo.Style.whiteAndCentered().withScale(TextGizmo.Style.DEFAULT_SCALE * scale * distanceScale) + drawText(texts[i], if (translate) pos else camera.position(), style, backgroundBox, seeThrough) + } + } + + private fun drawText(text: String, pos: Vec3, style: TextGizmo.Style, backgroundBox: Boolean, seeThrough: Boolean) { + if (backgroundBox) { + val pixelScale = style.scale() / 16 + val halfWidth = (client.font.width(text) / 2f + 1) * pixelScale + val camera = MinecraftCompat.mainCamera(client.gameRenderer) + val left = Vec3(camera.leftVector()).scale(halfWidth.toDouble()) + val up = Vec3(camera.upVector()) + val top = up.scale(pixelScale.toDouble()) + val bottom = up.scale(-(client.font.lineHeight + 1) * pixelScale.toDouble()) + Gizmos.rect( + pos.add(left).add(top), + pos.subtract(left).add(top), + pos.subtract(left).add(bottom), + pos.add(left).add(bottom), + GizmoStyle.fill(client.options.getBackgroundColor(0.25f)), + ).apply { if (seeThrough) setAlwaysOnTop() } + } + Gizmos.billboardText(text, pos, style).apply { if (seeThrough) setAlwaysOnTop() } + } + + private fun net.minecraft.gizmos.GizmoProperties.depth(depth: Boolean) = apply { + if (!depth) setAlwaysOnTop() + } +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/RenderLayers.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/RenderLayers.kt deleted file mode 100644 index ea23be66..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/RenderLayers.kt +++ /dev/null @@ -1,93 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import com.mojang.blaze3d.pipeline.ColorTargetState -import com.mojang.blaze3d.pipeline.BlendFunction -import com.mojang.blaze3d.pipeline.DepthStencilState -import com.mojang.blaze3d.pipeline.RenderPipeline -import com.mojang.blaze3d.platform.CompareOp -import com.mojang.blaze3d.vertex.DefaultVertexFormat -import com.mojang.blaze3d.vertex.VertexFormat.Mode -import net.minecraft.client.renderer.rendertype.LayeringTransform -import net.minecraft.client.renderer.rendertype.RenderSetup -import net.minecraft.client.renderer.rendertype.RenderType -import net.minecraft.client.renderer.RenderPipelines as MinecraftRenderPipelines - -object RenderPipelines { - @JvmField - val LINE_LIST: RenderPipeline = MinecraftRenderPipelines.register( - RenderPipeline.builder(MinecraftRenderPipelines.LINES_SNIPPET) - .withLocation("pipeline/ctjs_lines") - .withVertexFormat(DefaultVertexFormat.POSITION_COLOR_NORMAL_LINE_WIDTH, Mode.LINES) - .withCull(false) - .withColorTargetState(ColorTargetState(BlendFunction.TRANSLUCENT)) - .withDepthStencilState(DepthStencilState(CompareOp.LESS_THAN_OR_EQUAL, true)) - .build() - ) - - @JvmField - val LINE_LIST_ESP: RenderPipeline = MinecraftRenderPipelines.register( - RenderPipeline.builder(MinecraftRenderPipelines.LINES_SNIPPET) - .withLocation("pipeline/ctjs_lines_esp") - .withVertexFormat(DefaultVertexFormat.POSITION_COLOR_NORMAL_LINE_WIDTH, Mode.LINES) - .withCull(false) - .withColorTargetState(ColorTargetState(BlendFunction.TRANSLUCENT)) - .withDepthStencilState(DepthStencilState(CompareOp.ALWAYS_PASS, false)) - .build() - ) - - @JvmField - val TRIANGLE_STRIP: RenderPipeline = MinecraftRenderPipelines.register( - RenderPipeline.builder(MinecraftRenderPipelines.DEBUG_FILLED_SNIPPET) - .withLocation("pipeline/ctjs_debug_filled_box") - .withCull(false) - .withVertexFormat(DefaultVertexFormat.POSITION_COLOR, Mode.QUADS) - .withDepthStencilState(DepthStencilState(CompareOp.LESS_THAN_OR_EQUAL, true)) - .withColorTargetState(ColorTargetState(BlendFunction.TRANSLUCENT)) - .build() - ) - - @JvmField - val TRIANGLE_STRIP_ESP: RenderPipeline = MinecraftRenderPipelines.register( - RenderPipeline.builder(MinecraftRenderPipelines.DEBUG_FILLED_SNIPPET) - .withLocation("pipeline/ctjs_debug_filled_box_esp") - .withCull(false) - .withVertexFormat(DefaultVertexFormat.POSITION_COLOR, Mode.QUADS) - .withDepthStencilState(DepthStencilState(CompareOp.ALWAYS_PASS, false)) - .withColorTargetState(ColorTargetState(BlendFunction.TRANSLUCENT)) - .build() - ) -} - -object RenderLayers { - @JvmField - val LINE_LIST: RenderType = RenderType.create( - "line-list", - RenderSetup.builder(RenderPipelines.LINE_LIST) - .setLayeringTransform(LayeringTransform.VIEW_OFFSET_Z_LAYERING) - .createRenderSetup() - ) - - @JvmField - val LINE_LIST_ESP: RenderType = RenderType.create( - "line-list-esp", - RenderSetup.builder(RenderPipelines.LINE_LIST_ESP) - .createRenderSetup() - ) - - @JvmField - val TRIANGLE_STRIP: RenderType = RenderType.create( - "triangle_strip", - RenderSetup.builder(RenderPipelines.TRIANGLE_STRIP) - .setLayeringTransform(LayeringTransform.VIEW_OFFSET_Z_LAYERING) - .sortOnUpload() - .createRenderSetup() - ) - - @JvmField - val TRIANGLE_STRIP_ESP: RenderType = RenderType.create( - "triangle_strip_esp", - RenderSetup.builder(RenderPipelines.TRIANGLE_STRIP_ESP) - .sortOnUpload() - .createRenderSetup() - ) -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/RenderUtils.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/RenderUtils.kt deleted file mode 100644 index 17204051..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/RenderUtils.kt +++ /dev/null @@ -1,260 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import com.chattriggers.ctjs.internal.engine.CTEvents -import net.minecraft.client.Minecraft -import net.minecraft.client.gui.Font -import net.minecraft.client.renderer.rendertype.RenderType -import com.mojang.blaze3d.vertex.VertexConsumer -import net.minecraft.client.renderer.MultiBufferSource -import com.mojang.blaze3d.vertex.ByteBufferBuilder -import com.mojang.blaze3d.vertex.PoseStack -import net.minecraft.world.entity.Entity -import net.minecraft.world.phys.AABB -import net.minecraft.util.ARGB -import net.minecraft.world.phys.Vec3 -import org.joml.Quaternionf -import kotlin.math.max -import kotlin.math.min - -object RenderUtils { - private val client = Minecraft.getInstance() - private val bufferSource = MultiBufferSource.immediate(ByteBufferBuilder(2 * 1024 * 1024)) - private val boxes = mutableListOf() - private val lines = mutableListOf() - private val texts = mutableListOf() - - private data class BoxCommand(val box: AABB, val color: Color, val filled: Boolean, val depth: Boolean, val thickness: Float) - private data class LineCommand(val start: Vec3, val end: Vec3, val color: Color, val thickness: Float, val depth: Boolean) - private data class BatchKey(val layer: RenderType, val thickness: Float?) - private data class TextCommand( - val text: String, - val pos: Vec3, - val scale: Float, - val backgroundBox: Boolean, - val increase: Boolean, - val seeThrough: Boolean, - val translate: Boolean, - ) - - data class Color(val r: Int, val g: Int, val b: Int, val a: Int) { - val rf = r / 255f - val gf = g / 255f - val bf = b / 255f - val af = a / 255f - val packed = ARGB.color(a, r, g, b) - } - - init { - CTEvents.POST_RENDER_WORLD.register { matrices, _ -> render(matrices) } - } - - private fun render(matrices: PoseStack) { - if (boxes.isEmpty() && lines.isEmpty() && texts.isEmpty()) return - - val pendingBoxes = boxes.toList().also { boxes.clear() } - val pendingLines = lines.toList().also { lines.clear() } - val pendingTexts = texts.toList().also { texts.clear() } - val camera = client.gameRenderer.mainCamera - - matrices.pushPose() - matrices.translate(-camera.position().x, -camera.position().y, -camera.position().z) - renderBoxes(matrices, pendingBoxes) - renderLines(matrices, pendingLines) - matrices.popPose() - renderTexts(matrices, pendingTexts, camera.position(), camera.rotation()) - - bufferSource.endBatch() - } - - private fun renderBoxes(matrices: PoseStack, commands: List) { - val batches = commands.groupBy { command -> - val layer = when { - command.filled && command.depth -> RenderLayers.TRIANGLE_STRIP - command.filled -> RenderLayers.TRIANGLE_STRIP_ESP - command.depth -> RenderLayers.LINE_LIST - else -> RenderLayers.LINE_LIST_ESP - } - BatchKey(layer, command.thickness.takeUnless { command.filled }?.coerceAtLeast(0.1f)) - } - - for ((key, batch) in batches) { - val buffer = bufferSource.getBuffer(key.layer) - - for ((box, color, filled) in batch) { - if (filled) { - writeFilledBox(matrices.last(), buffer, box, color.packed) - } else { - writeBox(matrices.last(), buffer, box, color.packed, key.thickness ?: 1f) - } - } - bufferSource.endBatch() - } - } - - private fun renderLines(matrices: PoseStack, commands: List) { - val batches = commands.groupBy { command -> - val layer = if (command.depth) RenderLayers.LINE_LIST else RenderLayers.LINE_LIST_ESP - BatchKey(layer, command.thickness.coerceAtLeast(0.1f)) - } - - for ((key, batch) in batches) { - val buffer = bufferSource.getBuffer(key.layer) - for ((start, end, color) in batch) { - writeLine(matrices.last(), buffer, start, end, color.packed, requireNotNull(key.thickness)) - } - bufferSource.endBatch() - } - } - - private fun writeFilledBox(entry: PoseStack.Pose, buffer: VertexConsumer, box: AABB, argb: Int) { - val minX = min(box.minX, box.maxX).toFloat() - val minY = min(box.minY, box.maxY).toFloat() - val minZ = min(box.minZ, box.maxZ).toFloat() - val maxX = max(box.minX, box.maxX).toFloat() - val maxY = max(box.minY, box.maxY).toFloat() - val maxZ = max(box.minZ, box.maxZ).toFloat() - - quad(buffer, entry, minX, minY, minZ, maxX, minY, minZ, maxX, maxY, minZ, minX, maxY, minZ, argb) - quad(buffer, entry, minX, minY, maxZ, minX, maxY, maxZ, maxX, maxY, maxZ, maxX, minY, maxZ, argb) - quad(buffer, entry, minX, minY, minZ, minX, maxY, minZ, minX, maxY, maxZ, minX, minY, maxZ, argb) - quad(buffer, entry, maxX, minY, minZ, maxX, minY, maxZ, maxX, maxY, maxZ, maxX, maxY, minZ, argb) - quad(buffer, entry, minX, maxY, minZ, maxX, maxY, minZ, maxX, maxY, maxZ, minX, maxY, maxZ, argb) - quad(buffer, entry, minX, minY, minZ, minX, minY, maxZ, maxX, minY, maxZ, maxX, minY, minZ, argb) - } - - private fun quad( - buffer: VertexConsumer, - entry: PoseStack.Pose, - x1: Float, y1: Float, z1: Float, - x2: Float, y2: Float, z2: Float, - x3: Float, y3: Float, z3: Float, - x4: Float, y4: Float, z4: Float, - argb: Int, - ) { - buffer.addVertex(entry, x1, y1, z1).setColor(argb) - buffer.addVertex(entry, x2, y2, z2).setColor(argb) - buffer.addVertex(entry, x3, y3, z3).setColor(argb) - buffer.addVertex(entry, x4, y4, z4).setColor(argb) - } - - private fun writeBox(entry: PoseStack.Pose, buffer: VertexConsumer, box: AABB, argb: Int, lineWidth: Float) { - val min = Vec3(box.minX, box.minY, box.minZ) - val max = Vec3(box.maxX, box.maxY, box.maxZ) - val corners = arrayOf( - Vec3(min.x, min.y, min.z), Vec3(max.x, min.y, min.z), - Vec3(max.x, min.y, max.z), Vec3(min.x, min.y, max.z), - Vec3(min.x, max.y, min.z), Vec3(max.x, max.y, min.z), - Vec3(max.x, max.y, max.z), Vec3(min.x, max.y, max.z), - ) - val edges = intArrayOf(0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7) - for (i in edges.indices step 2) { - writeLine(entry, buffer, corners[edges[i]], corners[edges[i + 1]], argb, lineWidth) - } - } - - private fun writeLine(entry: PoseStack.Pose, buffer: VertexConsumer, start: Vec3, end: Vec3, argb: Int, lineWidth: Float) { - val normal = end.subtract(start).normalize() - - buffer.addVertex(entry, start.x.toFloat(), start.y.toFloat(), start.z.toFloat()).setColor(argb).setNormal(entry, normal.x.toFloat(), normal.y.toFloat(), normal.z.toFloat()).setLineWidth(lineWidth) - buffer.addVertex(entry, end.x.toFloat(), end.y.toFloat(), end.z.toFloat()).setColor(argb).setNormal(entry, normal.x.toFloat(), normal.y.toFloat(), normal.z.toFloat()).setLineWidth(lineWidth) - } - - private fun renderTexts(matrices: PoseStack, commands: List, cameraPos: Vec3, cameraRotation: Quaternionf) { - for ((text, pos, scale, backgroundBox, increase, seeThrough, translate) in commands) { - val relative = pos.subtract(cameraPos) - matrices.pushPose() - if (translate) matrices.translate(relative.x, relative.y, relative.z) - matrices.mulPose(cameraRotation) - - val renderScale = if (increase) { - scale * (relative.length().toFloat() / 120f).coerceAtLeast(0.01f) - } else { - scale * 0.025f - } - matrices.scale(renderScale, -renderScale, renderScale) - - client.font.drawInBatch( - text, - -client.font.width(text) / 2f, - 0f, - -1, - backgroundBox, - matrices.last().pose(), - bufferSource, - if (seeThrough) Font.DisplayMode.SEE_THROUGH else Font.DisplayMode.NORMAL, - 0, - 15728880, - ) - matrices.popPose() - } - } - - @JvmStatic - @JvmOverloads - fun drawFilledBox(pos: Vec3, color: Color, depth: Boolean = false) = - drawFilledBox(AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1), color, depth) - - @JvmStatic - @JvmOverloads - fun drawFilledBox(box: AABB, color: Color, depth: Boolean = false) { - boxes += BoxCommand(box, color, true, depth, 1f) - } - - @JvmStatic - @JvmOverloads - fun drawWireFrameBox(pos: Vec3, color: Color, thickness: Float = 5f, depth: Boolean = false) = - drawWireFrameBox(AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1), color, thickness, depth) - - @JvmStatic - @JvmOverloads - fun drawWireFrameBox(box: AABB, color: Color, thickness: Float = 5f, depth: Boolean = false) { - boxes += BoxCommand(box, color, false, depth, thickness) - } - - @JvmStatic - @JvmOverloads - fun drawBox(box: AABB, color: Color, thickness: Float = 2f, depth: Boolean = false) { - drawFilledBox(box, color, depth) - drawWireFrameBox(box, color, thickness, depth) - } - - @JvmStatic - @JvmOverloads - fun drawStyledBox(pos: Vec3, color1: Color, color2: Color, wireThickness: Float = 5f, depth: Boolean = false) { - val box = AABB(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1) - drawFilledBox(box, color1, depth) - drawWireFrameBox(box, color2, wireThickness, depth) - } - - @JvmStatic - @JvmOverloads - fun drawSizedBox(pos: Vec3, width: Double, height: Double, length: Double, color: Color, filled: Boolean = true, thickness: Float = 1f, depth: Boolean = false) { - val box = AABB(pos.x - width / 2, pos.y, pos.z - length / 2, pos.x + width / 2, pos.y + height, pos.z + length / 2) - boxes += BoxCommand(box, color, filled, depth, thickness) - } - - @JvmStatic - @JvmOverloads - fun drawHitbox(entity: Entity, color: Color, thickness: Float = 2f, depth: Boolean = false) = - drawBox(entity.boundingBox, color, thickness, depth) - - @JvmStatic - @JvmOverloads - fun drawLine(start: Vec3, end: Vec3, color: Color, thickness: Float = 3f, depth: Boolean = false) { - lines += LineCommand(start, end, color, thickness, depth) - } - - @JvmStatic - @JvmOverloads - fun drawTracer(targetPos: Vec3, color: Color, thickness: Float = 2f, depth: Boolean = false) { - val camera = client.gameRenderer.mainCamera - val start = camera.position().add(Vec3.directionFromRotation(camera.xRot(), camera.yRot()).scale(0.1)) - drawLine(start, targetPos, color, thickness, depth) - } - - @JvmStatic - @JvmOverloads - fun drawText(text: String, pos: Vec3, scale: Float = 1f, backgroundBox: Boolean = false, increase: Boolean = false, seeThrough: Boolean = false, translate: Boolean = true) { - texts += TextCommand(text, pos, scale, backgroundBox, increase, seeThrough, translate) - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt deleted file mode 100644 index b29221d6..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt +++ /dev/null @@ -1,339 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import com.chattriggers.ctjs.api.client.Client -import com.chattriggers.ctjs.api.vec.Vec3f -import com.chattriggers.ctjs.internal.utils.get -import com.mojang.blaze3d.systems.RenderSystem -import gg.essential.universal.UGraphics -import net.minecraft.client.gui.Font -import net.minecraft.util.LightCoordsUtil -import com.mojang.blaze3d.vertex.Tesselator -import org.joml.Vector3f -import org.mozilla.javascript.NativeObject - -object Renderer3d { - private var firstVertex = true - private var began = false - - private val tessellator = Tesselator.getInstance() - private val worldRenderer = UGraphics.getFromTessellator() - - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - @JvmStatic - @JvmOverloads - fun begin( - drawMode: Renderer.DrawMode = Renderer.DrawMode.QUADS, - vertexFormat: Renderer.VertexFormat = Renderer.VertexFormat.POSITION, - snippet: Renderer.RenderSnippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET - ) = apply { - Renderer.pushMatrix() - .enableBlend() - .disableCull() - worldRenderer.beginRenderLayer(LegacyPipelineBuilder.begin(drawMode, vertexFormat, snippet).layer()) - - firstVertex = true - began = true - } - - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - fun pos(x: Float, y: Float, z: Float) = apply { - if (!began) - begin() - if (!firstVertex) - worldRenderer.endVertex() - val camera = Client.getMinecraft().gameRenderer.mainCamera.position() - worldRenderer.pos(Renderer.matrixStack, x.toDouble() - camera.x, y.toDouble() - camera.y, z.toDouble() - camera.z) - firstVertex = false - } - - /** - * Sets the texture location on the last defined vertex. - * - * @param u the u position in the texture - * @param v the v position in the texture - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - fun tex(u: Float, v: Float) = apply { - worldRenderer.tex(u.toDouble(), v.toDouble()) - } - - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - @JvmOverloads - fun color(r: Float, g: Float, b: Float, a: Float = 1f) = apply { - worldRenderer.color(r, g, b, a) - } - - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - @JvmOverloads - fun color(r: Int, g: Int, b: Int, a: Int = 255) = apply { - worldRenderer.color(r, g, b, a) - } - - /** - * Sets the color for the last defined vertex. - * - * @param color the color value, can use [Renderer.getColor] to get this - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - fun color(color: Long) = apply { - color( - ((color ushr 16) and 0xFF).toInt(), - ((color ushr 8) and 0xFF).toInt(), - (color and 0xFF).toInt(), - ((color ushr 24) and 0xFF).toInt(), - ) - } - - /** - * Sets the normal of the vertex. This is mostly used with [Renderer.VertexFormat.LINES] - * - * @param x the x position of the normal vector - * @param y the y position of the normal vector - * @param z the z position of the normal vector - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - fun normal(x: Float, y: Float, z: Float) = apply { - worldRenderer.norm(Renderer.matrixStack, x, y, z) - } - - /** - * Sets the overlay location on the last defined vertex. - * - * @param u the u position in the overlay - * @param v the v position in the overlay - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - fun overlay(u: Int, v: Int) = apply { - worldRenderer.overlay(u, v) - } - - /** - * Sets the light location on the last defined vertex. - * - * @param u the u position in the light - * @param v the v position in the light - * @return [Renderer3d] to allow for method chaining - */ - @JvmStatic - fun light(u: Int, v: Int) = apply { - worldRenderer.light(u, v) - } - - /** - * Finalizes vertices and draws the world renderer. - */ - @JvmStatic - fun draw() { - if (!began) - return - began = false - - worldRenderer.endVertex() - - worldRenderer.drawDirect() - Renderer.disableBlend() - .enableCull() - .popMatrix() - } - - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - @JvmStatic - @JvmOverloads - fun drawString( - text: String, - x: Float, - y: Float, - z: Float, - color: Long = Renderer.WHITE, - renderBlackBox: Boolean = true, - scale: Float = 1f, - increase: Boolean = false, - centered: Boolean = true, - renderThroughBlocks: Boolean = true, - ) { - val (lines, width, height) = Renderer.splitText(text) - - val fontRenderer = Renderer.getFontRenderer() - val camera = Client.getMinecraft().gameRenderer.mainCamera - val renderPos = Vec3f( - x - camera.position().x.toFloat(), - y - camera.position().y.toFloat(), - z - camera.position().z.toFloat(), - ) - - val lScale = scale * if (increase) { - renderPos.magnitude() / 120f //mobs only render ~120 blocks away - } else { - 0.025f - } - - Renderer.pushMatrix() - Renderer.translate(renderPos.x, renderPos.y, renderPos.z) - Renderer.multiply(camera.rotation()) - Renderer.scale(lScale, -lScale, lScale) - - val opacity = (Client.getMinecraft().options.getBackgroundOpacity(0.25f) * 255).toInt() shl 24 - - val xShift = -width / 2 - val yShift = -height / 2 - - val vertexConsumers = Client.getMinecraft().renderBuffers().bufferSource() - var yOffset = 0 - val textLayer = if (renderThroughBlocks) Font.DisplayMode.SEE_THROUGH else Font.DisplayMode.NORMAL - - for (line in lines) { - val centerShift = if (centered) { - xShift + (fontRenderer.width(line) / 2f) - } else 0f - - Renderer.pushMatrix() - val matrix = Renderer.matrixStack.toMC().last().pose() - - if (renderBlackBox) { - fontRenderer.drawInBatch( - line, - xShift - centerShift, - yShift + yOffset, - 0x20FFFFFF, - false, - matrix, - vertexConsumers, - textLayer, - opacity, - LightCoordsUtil.FULL_BRIGHT - ) - Renderer.translate(0f, 0f, -0.03f) - } - - fontRenderer.drawInBatch( - line, - xShift - centerShift, - yShift + yOffset, - color.toInt(), - false, - matrix, - vertexConsumers, - textLayer, - 0, - LightCoordsUtil.FULL_BRIGHT - ) - vertexConsumers.endBatch() - Renderer.popMatrix() - - yOffset += fontRenderer.lineHeight + 1 - } - - Renderer.popMatrix() - } - - /** - * A variant of drawString that takes an object instead of positional parameters - */ - @JvmStatic - fun drawString(obj: NativeObject) { - drawString( - obj.get("text") ?: error("Expected \"text\" property in object passed to Renderer3d.drawString"), - obj.get("x")?.toFloat() - ?: error("Expected \"x\" property in object passed to Renderer3d.drawString"), - obj.get("y")?.toFloat() - ?: error("Expected \"y\" property in object passed to Renderer3d.drawString"), - obj.get("z")?.toFloat() - ?: error("Expected \"z\" property in object passed to Renderer3d.drawString"), - obj.get("color")?.toLong() ?: Renderer.WHITE, - obj.get("renderBlackBox") ?: true, - obj.get("scale")?.toFloat() ?: 1f, - obj.get("increase") ?: false, - obj.get("centered") ?: true, - obj.get("renderThroughBlocks") ?: true, - ) - } - - /** - * Draws a line in the world from (x1, y1, z1) to (x2, y2, z2) - * - * @param color the color of the line - * @param x1 the starting x coordinate - * @param y1 the starting y coordinate - * @param z1 the starting z coordinate - * @param x2 the ending x coordinate - * @param y2 the ending y coordinate - * @param z2 the ending z coordinate - */ - @JvmStatic - fun drawLine( - color: Long, - x1: Float, - y1: Float, - z1: Float, - x2: Float, - y2: Float, - z2: Float, - ) { - Renderer.pushMatrix() - .disableDepth() - .disableCull() - - val normalVec = Vector3f(x2 - x1, y2 - y1, z2 - z1).normalize() - - begin(Renderer.DrawMode.LINES, Renderer.VertexFormat.LINES, Renderer.RenderSnippet.RENDERTYPE_LINES_SNIPPET) - pos(x1, y1, z1).color(color).normal(normalVec.x, normalVec.y, normalVec.z) - pos(x2, y2, z2).color(color).normal(normalVec.x, normalVec.y, normalVec.z) - draw() - - Renderer - .enableCull() - .enableDepth() - .popMatrix() - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Shape.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Shape.kt deleted file mode 100644 index bba12c00..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Shape.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import com.chattriggers.ctjs.api.vec.Vec2f -import kotlin.math.PI -import kotlin.math.atan2 -import kotlin.math.cos -import kotlin.math.sin - -class Shape(private var color: Long) { - private val vertexes = mutableListOf() - private val reversedVertexes = vertexes.asReversed() - private var drawMode = Renderer.DrawMode.QUADS - private var area = 0f - - fun copy(): Shape = clone() - - fun clone(): Shape { - val clone = Shape(color) - clone.vertexes.addAll(vertexes) - clone.setDrawMode(drawMode) - return clone - } - - fun getColor(): Long = color - - fun setColor(color: Long) = apply { this.color = Renderer.fixAlpha(color) } - - fun getDrawMode(): Renderer.DrawMode = drawMode - - /** - * Sets the GL draw mode of the shape - */ - fun setDrawMode(drawMode: Renderer.DrawMode) = apply { this.drawMode = drawMode } - - fun getVertexes(): List = vertexes - - fun addVertex(x: Float, y: Float) = apply { - vertexes.add(Vec2f(x, y)) - updateArea() - } - - fun insertVertex(index: Int, x: Float, y: Float) = apply { - vertexes.add(index, Vec2f(x, y)) - updateArea() - } - - fun removeVertex(index: Int) = apply { - vertexes.removeAt(index) - updateArea() - } - - fun clearVertices() = apply { - vertexes.clear() - area = 0f - } - - /** - * Sets the shape as a line pointing from [x1, y1] to [x2, y2] with a thickness - */ - fun setLine(x1: Float, y1: Float, x2: Float, y2: Float, thickness: Float) = apply { - vertexes.clear() - - val theta = -atan2(y2 - y1, x2 - x1) - val i = sin(theta) * (thickness / 2) - val j = cos(theta) * (thickness / 2) - - vertexes.add(Vec2f(x1 + i, y1 + j)) - vertexes.add(Vec2f(x2 + i, y2 + j)) - vertexes.add(Vec2f(x2 - i, y2 - j)) - vertexes.add(Vec2f(x1 - i, y1 - j)) - updateArea() - - drawMode = Renderer.DrawMode.QUADS - } - - /** - * Sets the shape as a circle with a center at [x, y] - * with radius and number of steps around the circle - */ - fun setCircle(x: Float, y: Float, radius: Float, steps: Int) = apply { - vertexes.clear() - - val theta = 2 * PI / steps - val cos = cos(theta).toFloat() - val sin = sin(theta).toFloat() - - var xHolder: Float - var circleX = 1f - var circleY = 0f - - for (i in 0..steps) { - vertexes.add(Vec2f(x, y)) - vertexes.add(Vec2f(circleX * radius + x, circleY * radius + y)) - xHolder = circleX - circleX = cos * circleX - sin * circleY - circleY = sin * xHolder + cos * circleY - vertexes.add(Vec2f(circleX * radius + x, circleY * radius + y)) - } - - updateArea() - drawMode = Renderer.DrawMode.TRIANGLE_STRIP - } - - fun draw() = apply { - Renderer.apply { - begin(drawMode, Renderer.VertexFormat.POSITION_COLOR) - - if (area < 0) { - vertexes.forEach { pos(it.x, it.y).color(color) } - } else { - reversedVertexes.forEach { pos(it.x, it.y).color(color) } - } - - draw() - } - } - - private fun updateArea() { - area = vertexes.indices.sumOf { i -> - val p1 = vertexes[i] - val p2 = vertexes[(i + 1) % vertexes.size] - (p1.x * p2.y - p2.x * p1.y).toDouble() - }.toFloat() / 2 - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Text.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Text.kt index 8530c165..5ef78803 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Text.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Text.kt @@ -2,7 +2,6 @@ package com.chattriggers.ctjs.api.render import com.chattriggers.ctjs.api.message.ChatLib import com.chattriggers.ctjs.internal.utils.getOrDefault -import com.chattriggers.ctjs.internal.utils.getOption import net.minecraft.client.gui.GuiGraphicsExtractor import net.minecraft.network.chat.Style import org.mozilla.javascript.NativeObject @@ -37,10 +36,10 @@ class Text { constructor(string: String, config: NativeObject) { setString(string) setColor(config.getOrDefault("color", 0xffffffff).toLong()) - setFormatted(config.getOption("formatted", true)) - setShadow(config.getOption("shadow", false)) - setAlign(config.getOption("align", Align.LEFT)) - setBackground(config.getOption("background", false)) + setFormatted(config.getOrDefault("formatted", true)) + setShadow(config.getOrDefault("shadow", false)) + setAlign(config.getOrDefault("align", Align.LEFT)) + setBackground(config.getOrDefault("background", false)) setBackgroundColor(config.getOrDefault("backgroundColor", 0x00000000).toLong()) setX(config.getOrDefault("x", 0).toInt()) setY(config.getOrDefault("y", 0).toInt()) @@ -58,7 +57,7 @@ class Text { fun getColor(): Long = color - fun setColor(color: Long) = apply { this.color = Renderer.fixAlpha(color) } + fun setColor(color: Long) = apply { this.color = Render2D.fixAlpha(color) } fun getFormatted(): Boolean = formatted @@ -152,7 +151,7 @@ class Text { ctx.pose().pushMatrix() ctx.pose().scale(scale, scale) - var longestLine = lines.maxOf { Renderer.getStringWidth(it) * scale } + var longestLine = lines.maxOf { Render2D.getStringWidth(it) * scale } if (maxWidth != 0) longestLine = longestLine.coerceAtMost(maxWidth.toFloat()) width = longestLine.toInt() @@ -178,7 +177,7 @@ class Text { } for (i in 0 until minOf(maxLines, lines.size)) { - ctx.text(Renderer.getFontRenderer(), lines[i], xHolder, yHolder, color.toInt(), shadow) + ctx.text(Render2D.getFontRenderer(), lines[i], xHolder, yHolder, color.toInt(), shadow) yHolder += 10 } ctx.pose().popMatrix() @@ -194,7 +193,7 @@ class Text { string.split("\n").forEach { line -> if (maxWidth > 0) { lines.addAll( - Renderer.getFontRenderer().splitter.splitLines(line, maxWidth, Style.EMPTY).map { it.string } + Render2D.getFontRenderer().splitter.splitLines(line, maxWidth, Style.EMPTY).map { it.string } ) } else { lines.add(line) diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Toast.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Toast.kt index 35544699..7e524ac9 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Toast.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Toast.kt @@ -1,5 +1,7 @@ package com.chattriggers.ctjs.api.render +import com.chattriggers.ctjs.api.client.MinecraftCompat + import com.chattriggers.ctjs.api.client.Client import com.chattriggers.ctjs.api.message.TextComponent import com.chattriggers.ctjs.engine.printTraceToConsole @@ -94,7 +96,7 @@ class Toast(config: NativeObject) : MCToast { fun show() = apply { startTime = null - Client.getMinecraft().toastManager.addToast(this) + MinecraftCompat.toastManager(Client.getMinecraft()).addToast(this) } override fun getWantedVisibility(): MCToast.Visibility = visibility @@ -110,7 +112,7 @@ class Toast(config: NativeObject) : MCToast { val render = customRenderFunction if (render != null) { DrawContextHolder.withContext(context) { - Renderer.withMatrix(UMatrixStack(context.pose()).toMC()) { + Render2D.withMatrix(UMatrixStack(context.pose()).toMC()) { try { JSLoader.invoke(render, emptyArray(), thisObj = requireNotNull(jsReceiver)) } catch (e: Throwable) { diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaBootstrap.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaBootstrap.kt new file mode 100644 index 00000000..1e1409d8 --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaBootstrap.kt @@ -0,0 +1,38 @@ +package com.chattriggers.ctjs.api.render.skia + +import net.fabricmc.loader.api.FabricLoader +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint +import net.fabricmc.loader.impl.launch.FabricLauncherBase +import java.net.URI +import java.nio.file.Files +import java.nio.file.StandardCopyOption + +class SkijaBootstrap : PreLaunchEntrypoint { + override fun onPreLaunch() { + val artifact = when { + System.getProperty("os.name").contains("win", true) -> "skija-windows-x64" + System.getProperty("os.name").contains("mac", true) && System.getProperty("os.arch").contains("aarch64", true) -> "skija-macos-arm64" + System.getProperty("os.name").contains("mac", true) -> "skija-macos-x64" + System.getProperty("os.arch").contains("aarch64", true) -> "skija-linux-arm64" + else -> "skija-linux-x64" + } + val cache = FabricLoader.getInstance().gameDir.resolve("config/ChatTriggers/cache") + val file = cache.resolve("$artifact-$VERSION.jar") + if (!Files.exists(file)) { + Files.createDirectories(cache) + val temporary = Files.createTempFile(cache, "skija-", ".tmp") + try { + URI("https://repo1.maven.org/maven2/io/github/humbleui/$artifact/$VERSION/${file.fileName}") + .toURL().openStream().use { Files.copy(it, temporary, StandardCopyOption.REPLACE_EXISTING) } + Files.move(temporary, file, StandardCopyOption.REPLACE_EXISTING) + } finally { + Files.deleteIfExists(temporary) + } + } + FabricLauncherBase.getLauncher().addToClassPath(file) + } + + private companion object { + const val VERSION = "0.143.11" + } +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaPIP.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaPIP.kt new file mode 100644 index 00000000..dae97fbc --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaPIP.kt @@ -0,0 +1,70 @@ +package com.chattriggers.ctjs.api.render.skia + +import com.chattriggers.ctjs.api.render.Render2D +import com.mojang.blaze3d.systems.RenderSystem +import net.minecraft.client.gui.GuiGraphicsExtractor +import net.minecraft.client.gui.navigation.ScreenRectangle +import net.minecraft.client.renderer.state.gui.pip.PictureInPictureRenderState +import org.joml.Matrix3x2f + +internal object SkijaPIP { + @JvmStatic + fun draw(graphics: GuiGraphicsExtractor, callback: Runnable, pre: Boolean = false) { + val width = graphics.guiWidth() + val height = graphics.guiHeight() + val pose = Matrix3x2f(graphics.pose()) + val screen = ScreenRectangle(0, 0, width, height).transformMaxBounds(pose) + val scissor = graphics.scissorStack.peek() + val bounds = scissor?.intersection(screen) ?: screen + if (bounds.width <= 0 || bounds.height <= 0) return + val scale = net.minecraft.client.Minecraft.getInstance().window.guiScale.toFloat() + graphics.guiRenderState.addPicturesInPictureState( + if (pre) PreState(width, height, scale, pose, scissor, bounds, callback) + else State(width, height, scale, pose, scissor, bounds, callback), + ) + } + + @JvmStatic + fun render(surface: SkijaSurface, state: State) { + val color = RenderSystem.outputColorTextureOverride ?: return + surface.render(color.getWidth(0), color.getHeight(0), color.texture()) { canvas -> + canvas.resetMatrix() + canvas.scale(state.guiScale, state.guiScale) + Render2D.beginSkijaFrame(canvas) + try { + state.callback.run() + } finally { + Render2D.endSkijaFrame() + } + } + } + + open class State( + private val width: Int, + private val height: Int, + val guiScale: Float, + private val poseMatrix: Matrix3x2f, + private val scissor: ScreenRectangle?, + private val area: ScreenRectangle, + val callback: Runnable, + ) : PictureInPictureRenderState { + override fun x0() = 0 + override fun y0() = 0 + override fun x1() = width + override fun y1() = height + override fun scale() = 1f + override fun pose() = poseMatrix + override fun scissorArea() = scissor + override fun bounds() = area + } + + class PreState( + width: Int, + height: Int, + guiScale: Float, + poseMatrix: Matrix3x2f, + scissor: ScreenRectangle?, + area: ScreenRectangle, + callback: Runnable, + ) : State(width, height, guiScale, poseMatrix, scissor, area, callback) +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaPIPFactory.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaPIPFactory.kt new file mode 100644 index 00000000..843c27d7 --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaPIPFactory.kt @@ -0,0 +1,59 @@ +package com.chattriggers.ctjs.api.render.skia + +import com.mojang.blaze3d.vertex.PoseStack +import net.minecraft.client.gui.render.pip.PictureInPictureRenderer +//? if <26.2 { +/*import net.minecraft.client.renderer.MultiBufferSource +*///?} else { +import net.minecraft.client.renderer.SubmitNodeCollector +//?} + +//? if <26.2 { +/*internal fun createSkijaPIP(factoryInput: Any?, pre: Boolean): PictureInPictureRenderer<*> { + val buffers = factoryInput!!.javaClass.getMethod("bufferSource").invoke(factoryInput) as MultiBufferSource.BufferSource + return if (pre) SkijaPrePIPRenderer(buffers) else SkijaPIPRenderer(buffers) +} + +private open class SkijaPIPRenderer(buffers: MultiBufferSource.BufferSource) : + PictureInPictureRenderer(buffers) { + private val surface = SkijaSurface() + + override fun getTranslateY(height: Int, guiScale: Int) = height / 2f + override fun getRenderStateClass() = SkijaPIP.State::class.java + override fun getTextureLabel() = "V5 Skija" + override fun renderToTexture(state: SkijaPIP.State, poseStack: PoseStack) = SkijaPIP.render(surface, state) + + override fun close() { + surface.close() + super.close() + } +} + +private class SkijaPrePIPRenderer(buffers: MultiBufferSource.BufferSource) : SkijaPIPRenderer(buffers) { + @Suppress("UNCHECKED_CAST") + override fun getRenderStateClass() = SkijaPIP.PreState::class.java as Class +} +*///?} else { +internal fun createSkijaPIP(factoryInput: Any?, pre: Boolean): PictureInPictureRenderer<*> = + if (pre) SkijaPrePIPRenderer() else SkijaPIPRenderer() + +private open class SkijaPIPRenderer : PictureInPictureRenderer() { + private val surface = SkijaSurface() + + override fun getTranslateY(height: Int, guiScale: Int) = height / 2f + override fun getRenderStateClass() = SkijaPIP.State::class.java + override fun getTextureLabel() = "V5 Skija" + override fun renderToTexture(state: SkijaPIP.State, poseStack: PoseStack, collector: SubmitNodeCollector) = + SkijaPIP.render(surface, state) + + override fun close() { + surface.close() + super.close() + } +} + +private class SkijaPrePIPRenderer : SkijaPIPRenderer() { + @Suppress("UNCHECKED_CAST") + override fun getRenderStateClass() = SkijaPIP.PreState::class.java as Class +} +//?} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaSurface.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaSurface.kt new file mode 100644 index 00000000..5a2e1b19 --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaSurface.kt @@ -0,0 +1,202 @@ +package com.chattriggers.ctjs.api.render.skia + +import com.mojang.blaze3d.opengl.GlStateManager +import com.mojang.blaze3d.opengl.GlTexture +import com.mojang.blaze3d.textures.GpuTexture +import io.github.humbleui.skija.BackendRenderTarget +import io.github.humbleui.skija.ColorSpace +import io.github.humbleui.skija.ColorType +import io.github.humbleui.skija.DirectContext +import io.github.humbleui.skija.Surface +import io.github.humbleui.skija.SurfaceOrigin +import org.lwjgl.opengl.GL11C +import org.lwjgl.opengl.GL12C +import org.lwjgl.opengl.GL13C +import org.lwjgl.opengl.GL14C +import org.lwjgl.opengl.GL15C +import org.lwjgl.opengl.GL20C +import org.lwjgl.opengl.GL21C +import org.lwjgl.opengl.GL30C +import org.lwjgl.opengl.GL31C +import org.lwjgl.opengl.GL33C + +internal class SkijaSurface : AutoCloseable { + //? if >=26.2 { + private val vulkan = SkijaVulkanSurface() + //?} + private var context: DirectContext? = null + private var renderTarget: BackendRenderTarget? = null + private var surface: Surface? = null + private var fbo = 0 + private var depthStencil = 0 + private var width = 0 + private var height = 0 + private var textureId = 0 + + fun render(width: Int, height: Int, texture: GpuTexture, draw: (io.github.humbleui.skija.Canvas) -> Unit) { + //? if >=26.2 { + if (vulkan.render(width, height, texture, draw)) return + //?} + val colorTexture = texture as? GlTexture ?: return + val state = GlState.capture() + try { + bindTarget(colorTexture.glId(), width, height) + GlStateManager._viewport(0, 0, width, height) + GL33C.glBindSampler(0, 0) + GL15C.glBindBuffer(GL21C.GL_PIXEL_UNPACK_BUFFER, 0) + GL11C.glPixelStorei(GL11C.GL_UNPACK_ALIGNMENT, 1) + GL11C.glPixelStorei(GL12C.GL_UNPACK_ROW_LENGTH, 0) + GL11C.glPixelStorei(GL12C.GL_UNPACK_SKIP_PIXELS, 0) + GL11C.glPixelStorei(GL12C.GL_UNPACK_SKIP_ROWS, 0) + + val directContext = context ?: DirectContext.makeGL().also { context = it } + directContext.resetGLAll() + val skijaSurface = surface(width, height, colorTexture.glId(), directContext) + draw(skijaSurface.canvas) + directContext.flushAndSubmit(skijaSurface, false) + } finally { + context?.resetGLAll() + state.restore() + } + } + + private fun bindTarget(colorTexture: Int, width: Int, height: Int) { + if (fbo == 0) fbo = GlStateManager.glGenFramebuffers() + GlStateManager._glBindFramebuffer(GL30C.GL_FRAMEBUFFER, fbo) + GlStateManager._glFramebufferTexture2D(GL30C.GL_FRAMEBUFFER, GL30C.GL_COLOR_ATTACHMENT0, GL11C.GL_TEXTURE_2D, colorTexture, 0) + if (depthStencil != 0 && this.width == width && this.height == height) return + if (depthStencil != 0) GL30C.glDeleteRenderbuffers(depthStencil) + depthStencil = GL30C.glGenRenderbuffers() + GL30C.glBindRenderbuffer(GL30C.GL_RENDERBUFFER, depthStencil) + GL30C.glRenderbufferStorage(GL30C.GL_RENDERBUFFER, GL30C.GL_DEPTH24_STENCIL8, width, height) + GL30C.glBindRenderbuffer(GL30C.GL_RENDERBUFFER, 0) + GL30C.glFramebufferRenderbuffer(GL30C.GL_FRAMEBUFFER, GL30C.GL_DEPTH_STENCIL_ATTACHMENT, GL30C.GL_RENDERBUFFER, depthStencil) + this.width = width + this.height = height + } + + private fun surface(width: Int, height: Int, texture: Int, context: DirectContext): Surface { + surface?.takeIf { it.width == width && it.height == height && textureId == texture }?.let { return it } + surface?.close() + renderTarget?.close() + renderTarget = BackendRenderTarget.makeGL(width, height, 0, 8, fbo, GL30C.GL_RGBA8) + return Surface.wrapBackendRenderTarget(context, renderTarget!!, SurfaceOrigin.BOTTOM_LEFT, ColorType.RGBA_8888, ColorSpace.getSRGB()) + .also { surface = it; textureId = texture } + } + + override fun close() { + //? if >=26.2 { + vulkan.close() + //?} + surface?.close() + renderTarget?.close() + if (depthStencil != 0) GL30C.glDeleteRenderbuffers(depthStencil) + if (fbo != 0) GlStateManager._glDeleteFramebuffers(fbo) + context?.close() + surface = null + renderTarget = null + context = null + depthStencil = 0 + fbo = 0 + } +} + +private data class GlState( + val readFramebuffer: Int, + val drawFramebuffer: Int, + val viewport: IntArray, + val activeTexture: Int, + val texture: Int, + val sampler: Int, + val program: Int, + val vertexArray: Int, + val arrayBuffer: Int, + val scissorBox: IntArray, + val blendSrcRgb: Int, + val blendDstRgb: Int, + val blendSrcAlpha: Int, + val blendDstAlpha: Int, + val blendEquationRgb: Int, + val blendEquationAlpha: Int, + val blend: Boolean, + val cull: Boolean, + val depth: Boolean, + val stencil: Boolean, + val scissor: Boolean, + val primitiveRestart: Boolean, + val depthMask: Boolean, + val unpackBuffer: Int, + val unpackAlignment: Int, + val unpackRowLength: Int, + val unpackSkipPixels: Int, + val unpackSkipRows: Int, +) { + fun restore() { + GL20C.glUseProgram(program) + GL13C.glActiveTexture(GL13C.GL_TEXTURE0) + GL11C.glBindTexture(GL11C.GL_TEXTURE_2D, texture) + GL33C.glBindSampler(0, sampler) + GL13C.glActiveTexture(activeTexture) + GL30C.glBindVertexArray(vertexArray) + GL15C.glBindBuffer(GL15C.GL_ARRAY_BUFFER, arrayBuffer) + GL20C.glBlendEquationSeparate(blendEquationRgb, blendEquationAlpha) + GL14C.glBlendFuncSeparate(blendSrcRgb, blendDstRgb, blendSrcAlpha, blendDstAlpha) + setEnabled(GL11C.GL_BLEND, blend) + setEnabled(GL11C.GL_CULL_FACE, cull) + setEnabled(GL11C.GL_DEPTH_TEST, depth) + setEnabled(GL11C.GL_STENCIL_TEST, stencil) + setEnabled(GL11C.GL_SCISSOR_TEST, scissor) + setEnabled(GL31C.GL_PRIMITIVE_RESTART, primitiveRestart) + GL11C.glDepthMask(depthMask) + GL30C.glBindFramebuffer(GL30C.GL_READ_FRAMEBUFFER, readFramebuffer) + GL30C.glBindFramebuffer(GL30C.GL_DRAW_FRAMEBUFFER, drawFramebuffer) + GL11C.glViewport(viewport[0], viewport[1], viewport[2], viewport[3]) + GL11C.glScissor(scissorBox[0], scissorBox[1], scissorBox[2], scissorBox[3]) + GL15C.glBindBuffer(GL21C.GL_PIXEL_UNPACK_BUFFER, unpackBuffer) + GL11C.glPixelStorei(GL11C.GL_UNPACK_ALIGNMENT, unpackAlignment) + GL11C.glPixelStorei(GL12C.GL_UNPACK_ROW_LENGTH, unpackRowLength) + GL11C.glPixelStorei(GL12C.GL_UNPACK_SKIP_PIXELS, unpackSkipPixels) + GL11C.glPixelStorei(GL12C.GL_UNPACK_SKIP_ROWS, unpackSkipRows) + } + + companion object { + fun capture(): GlState { + val activeTexture = GL11C.glGetInteger(GL13C.GL_ACTIVE_TEXTURE) + GL13C.glActiveTexture(GL13C.GL_TEXTURE0) + return GlState( + GL11C.glGetInteger(GL30C.GL_READ_FRAMEBUFFER_BINDING), + GL11C.glGetInteger(GL30C.GL_DRAW_FRAMEBUFFER_BINDING), + ints(GL11C.GL_VIEWPORT, 4), + activeTexture, + GL11C.glGetInteger(GL11C.GL_TEXTURE_BINDING_2D), + GL11C.glGetInteger(GL33C.GL_SAMPLER_BINDING), + GL11C.glGetInteger(GL20C.GL_CURRENT_PROGRAM), + GL11C.glGetInteger(GL30C.GL_VERTEX_ARRAY_BINDING), + GL11C.glGetInteger(GL15C.GL_ARRAY_BUFFER_BINDING), + ints(GL11C.GL_SCISSOR_BOX, 4), + GL11C.glGetInteger(GL14C.GL_BLEND_SRC_RGB), + GL11C.glGetInteger(GL14C.GL_BLEND_DST_RGB), + GL11C.glGetInteger(GL14C.GL_BLEND_SRC_ALPHA), + GL11C.glGetInteger(GL14C.GL_BLEND_DST_ALPHA), + GL11C.glGetInteger(GL20C.GL_BLEND_EQUATION_RGB), + GL11C.glGetInteger(GL20C.GL_BLEND_EQUATION_ALPHA), + GL11C.glIsEnabled(GL11C.GL_BLEND), + GL11C.glIsEnabled(GL11C.GL_CULL_FACE), + GL11C.glIsEnabled(GL11C.GL_DEPTH_TEST), + GL11C.glIsEnabled(GL11C.GL_STENCIL_TEST), + GL11C.glIsEnabled(GL11C.GL_SCISSOR_TEST), + GL11C.glIsEnabled(GL31C.GL_PRIMITIVE_RESTART), + GL11C.glGetBoolean(GL11C.GL_DEPTH_WRITEMASK), + GL11C.glGetInteger(GL21C.GL_PIXEL_UNPACK_BUFFER_BINDING), + GL11C.glGetInteger(GL11C.GL_UNPACK_ALIGNMENT), + GL11C.glGetInteger(GL12C.GL_UNPACK_ROW_LENGTH), + GL11C.glGetInteger(GL12C.GL_UNPACK_SKIP_PIXELS), + GL11C.glGetInteger(GL12C.GL_UNPACK_SKIP_ROWS), + ) + } + + private fun ints(name: Int, size: Int) = IntArray(size).also { GL11C.glGetIntegerv(name, it) } + private fun setEnabled(capability: Int, enabled: Boolean) = + if (enabled) GL11C.glEnable(capability) else GL11C.glDisable(capability) + } +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaVulkanSurface.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaVulkanSurface.kt new file mode 100644 index 00000000..869c745d --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/skia/SkijaVulkanSurface.kt @@ -0,0 +1,145 @@ +//? if >=26.2 { +package com.chattriggers.ctjs.api.render.skia + +import com.chattriggers.ctjs.internal.accessors.VulkanDeviceAccessor +import com.chattriggers.ctjs.internal.mixins.CommandEncoderMixin +import com.chattriggers.ctjs.internal.mixins.GpuDeviceMixin +import com.chattriggers.ctjs.internal.mixins.VulkanCommandEncoderMixin +import com.mojang.blaze3d.GpuFormat +import com.mojang.blaze3d.systems.CommandEncoder +import com.mojang.blaze3d.systems.GpuDevice +import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.textures.GpuTexture +import com.mojang.blaze3d.vulkan.VulkanCommandEncoder +import com.mojang.blaze3d.vulkan.VulkanConst +import com.mojang.blaze3d.vulkan.VulkanDevice +import com.mojang.blaze3d.vulkan.VulkanGpuTexture +import io.github.humbleui.skija.BackendRenderTarget +import io.github.humbleui.skija.ColorSpace +import io.github.humbleui.skija.ColorType +import io.github.humbleui.skija.DirectContext +import io.github.humbleui.skija.Surface +import io.github.humbleui.skija.SurfaceOrigin +import org.lwjgl.system.MemoryStack +import org.lwjgl.vulkan.VK10 +import org.lwjgl.vulkan.VK12 +import org.lwjgl.vulkan.VkImageMemoryBarrier +import org.slf4j.LoggerFactory + +internal class SkijaVulkanSurface : AutoCloseable { + private val logger = LoggerFactory.getLogger(SkijaVulkanSurface::class.java) + private var device: VulkanDevice? = null + private var context: DirectContext? = null + private var target: BackendRenderTarget? = null + private var surface: Surface? = null + private var image = 0L + private var width = 0 + private var height = 0 + private var format: GpuFormat? = null + + fun render(width: Int, height: Int, texture: GpuTexture, draw: (io.github.humbleui.skija.Canvas) -> Unit): Boolean { + val vulkanTexture = texture as? VulkanGpuTexture ?: return false + if (vulkanTexture.isClosed || vulkanTexture.getFormat() != GpuFormat.RGBA8_UNORM || + vulkanTexture.usage() and GpuTexture.USAGE_RENDER_ATTACHMENT == 0 || + vulkanTexture.usage() and GpuTexture.USAGE_TEXTURE_BINDING == 0 + ) { + logger.warn("Skipping Skija Vulkan target with unsupported format or usage: {}", texture.getLabel()) + return true + } + + val gpuDevice = RenderSystem.tryGetDevice() ?: return true + val backend = (gpuDevice as GpuDeviceMixin).`ctjs$getBackend`() + val vulkanDevice = backend as? VulkanDevice ?: run { + logger.warn("GpuTexture is Vulkan but RenderSystem device backend is {}", backend.javaClass.name) + return true + } + val physical = (vulkanDevice as VulkanDeviceAccessor).`ctjs$getPhysicalDevice`() + if (physical == null) { + logger.error("Vulkan physical device accessor returned null") + return true + } + + try { + ensureResources(vulkanDevice, physical, vulkanTexture, width, height) + transition(gpuDevice, vulkanTexture.vkImage(), VK12.VK_IMAGE_LAYOUT_GENERAL, VK12.VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + VK10.VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK10.VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, + VK10.VK_ACCESS_MEMORY_READ_BIT or VK10.VK_ACCESS_MEMORY_WRITE_BIT, VK10.VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) + draw(surface!!.canvas) + context!!.flushAndSubmit(false) + transition(gpuDevice, vulkanTexture.vkImage(), VK12.VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK12.VK_IMAGE_LAYOUT_GENERAL, + VK10.VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK10.VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK10.VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK10.VK_ACCESS_MEMORY_READ_BIT or VK10.VK_ACCESS_MEMORY_WRITE_BIT) + } catch (exception: Throwable) { + logger.error("Skija Vulkan rendering failed", exception) + closeResources() + } + return true + } + + private fun ensureResources(vk: VulkanDevice, physical: com.mojang.blaze3d.vulkan.VulkanPhysicalDevice, + texture: VulkanGpuTexture, width: Int, height: Int) { + if (device !== vk) { + closeResources() + val instance = vk.instance() + val instanceProc = org.lwjgl.vulkan.VK.getFunctionProvider().getFunctionAddress("vkGetInstanceProcAddr") + val deviceProc = vk.vkDevice().capabilities.vkGetDeviceProcAddr + context = DirectContext.makeVulkan( + instance.vkInstance().address(), physical.vkPhysicalDevice().address(), vk.vkDevice().address(), + vk.graphicsQueue().vkQueue().address(), vk.graphicsQueue().queueFamilyIndex(), instanceProc, deviceProc, VK12.VK_API_VERSION_1_2 + ) + device = vk + } + if (image == texture.vkImage() && this.width == width && this.height == height && format == texture.getFormat()) return + closeTarget() + val imageUsage = VulkanConst.textureUsageToVk(texture.usage(), texture.getFormat()) or + VK10.VK_IMAGE_USAGE_TRANSFER_SRC_BIT or VK10.VK_IMAGE_USAGE_TRANSFER_DST_BIT + target = BackendRenderTarget.makeVulkan(width, height, texture.vkImage(), VK10.VK_IMAGE_TILING_OPTIMAL, + VK12.VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VulkanConst.toVk(texture.getFormat()), + imageUsage, 1, 1) + surface = Surface.wrapBackendRenderTarget(context!!, target!!, SurfaceOrigin.BOTTOM_LEFT, ColorType.RGBA_8888, ColorSpace.getSRGB()) + image = texture.vkImage() + this.width = width + this.height = height + format = texture.getFormat() + } + + private fun transition(gpu: GpuDevice, image: Long, oldLayout: Int, newLayout: Int, srcStage: Int, dstStage: Int, srcAccess: Int, dstAccess: Int) { + val encoder = gpu.createCommandEncoder() + val vkEncoder = ((encoder as CommandEncoderMixin).`ctjs$getBackend`() as? VulkanCommandEncoder) + ?: error("Minecraft did not provide a Vulkan command encoder") + val commandBuffer = (vkEncoder as VulkanCommandEncoderMixin).`ctjs$getCommandBuffer`() + MemoryStack.stackPush().use { stack -> + val barrier = VkImageMemoryBarrier.calloc(1, stack) + .sType(VK10.VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) + .oldLayout(oldLayout) + .newLayout(newLayout) + .srcAccessMask(srcAccess) + .dstAccessMask(dstAccess) + .srcQueueFamilyIndex(VK10.VK_QUEUE_FAMILY_IGNORED) + .dstQueueFamilyIndex(VK10.VK_QUEUE_FAMILY_IGNORED) + .image(image) + barrier.subresourceRange() + .aspectMask(VK10.VK_IMAGE_ASPECT_COLOR_BIT) + .baseMipLevel(0) + .levelCount(1) + .baseArrayLayer(0) + .layerCount(1) + VK12.vkCmdPipelineBarrier(commandBuffer, srcStage, dstStage, 0, null, null, barrier) + } + vkEncoder.submit() + } + + private fun closeTarget() { + surface?.close(); target?.close() + surface = null; target = null; image = 0L + } + + private fun closeResources() { + closeTarget() + context?.close() + context = null; device = null + } + + override fun close() = closeResources() +} +//?} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/world/BossBars.kt b/src/main/kotlin/com/chattriggers/ctjs/api/world/BossBars.kt index 469bbd17..890922af 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/world/BossBars.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/world/BossBars.kt @@ -1,284 +1,285 @@ -package com.chattriggers.ctjs.api.world - -import com.chattriggers.ctjs.api.CTWrapper -import com.chattriggers.ctjs.api.client.Client -import com.chattriggers.ctjs.api.message.ChatLib -import com.chattriggers.ctjs.api.message.TextComponent -import com.chattriggers.ctjs.internal.mixins.BossHealthOverlayAccessor -import com.chattriggers.ctjs.MCBossBarColor -import com.chattriggers.ctjs.MCBossBarStyle +package com.chattriggers.ctjs.api.world + +import com.chattriggers.ctjs.api.client.MinecraftCompat + +import com.chattriggers.ctjs.api.CTWrapper +import com.chattriggers.ctjs.api.client.Client +import com.chattriggers.ctjs.api.message.ChatLib +import com.chattriggers.ctjs.api.message.TextComponent +import com.chattriggers.ctjs.internal.mixins.BossHealthOverlayAccessor +import com.chattriggers.ctjs.MCBossBarColor +import com.chattriggers.ctjs.MCBossBarStyle import com.chattriggers.ctjs.internal.utils.asMixin import com.chattriggers.ctjs.internal.utils.getOrDefault -import com.chattriggers.ctjs.internal.utils.getOption import net.minecraft.client.gui.components.LerpingBossEvent import org.mozilla.javascript.NativeObject import java.util.UUID - -object BossBars { - @JvmStatic - fun toMC() = Client.getMinecraft().gui.bossOverlay - - /** - * Gets the list of currently shown [BossBar]s - * - * @return the currently displayed [BossBar]s - */ - @JvmStatic - fun getBossBars(): List { - return toMC().asMixin().events.values.map(::BossBar) - } - - /** - * Gets all [BossBar]s with a given name - * - * @param name the name to match - * @return the [BossBar]s - */ - @JvmStatic - fun getBossBarsByName(name: String): List { - return getBossBars().filter { it.getName() == name } - } - - /** - * Adds a new [BossBar] to be displayed - * - * Takes a parameter with the following options: - * - name: The name to appear above the BossBar. Defaults to an empty string - * - percent: The percent full the BossBar is. Defaults to 1 (full health) - * - color: The color of the BossBar. Can be any [Color], but defaults to white - * - sections: The number of notches/sections to appear on the BossBar. Can be any [Style], but - * defaults to 1 entire section - * - darkenSky: Whether the BossBar should darken the screen of the player. Defaults to false - * - dragonMusic: Whether the BossBar should play dragon music while in the End. Defaults to false - * - thickenFog: Whether the BossBar should thicken the fog around the player. Defaults to false - * - * @param obj An options bag - * - * @return the [BossBar] for further modification - */ - @JvmStatic - fun addBossBar(obj: NativeObject): BossBar { - val name = obj.getOption("name", "") + +object BossBars { + @JvmStatic + fun toMC() = MinecraftCompat.bossOverlay(Client.getMinecraft().gui) + + /** + * Gets the list of currently shown [BossBar]s + * + * @return the currently displayed [BossBar]s + */ + @JvmStatic + fun getBossBars(): List { + return toMC().asMixin().events.values.map(::BossBar) + } + + /** + * Gets all [BossBar]s with a given name + * + * @param name the name to match + * @return the [BossBar]s + */ + @JvmStatic + fun getBossBarsByName(name: String): List { + return getBossBars().filter { it.getName() == name } + } + + /** + * Adds a new [BossBar] to be displayed + * + * Takes a parameter with the following options: + * - name: The name to appear above the BossBar. Defaults to an empty string + * - percent: The percent full the BossBar is. Defaults to 1 (full health) + * - color: The color of the BossBar. Can be any [Color], but defaults to white + * - sections: The number of notches/sections to appear on the BossBar. Can be any [Style], but + * defaults to 1 entire section + * - darkenSky: Whether the BossBar should darken the screen of the player. Defaults to false + * - dragonMusic: Whether the BossBar should play dragon music while in the End. Defaults to false + * - thickenFog: Whether the BossBar should thicken the fog around the player. Defaults to false + * + * @param obj An options bag + * + * @return the [BossBar] for further modification + */ + @JvmStatic + fun addBossBar(obj: NativeObject): BossBar { + val name = obj.getOrDefault("name", "") val percent = obj.getOrDefault("percent", 1f).toFloat().coerceIn(0f..1f) - val color = Color.from(obj.getOption("color", Color.WHITE)) - val style = Style.from(obj.getOption("sections", Style.ONE)) - val shouldDarkenSky = obj.getOption("darkenSky", false) - val dragonMusic = obj.getOption("dragonMusic", false) - val shouldThickenFog = obj.getOption("thickenFog", false) - - val uuid = UUID.randomUUID() - - val bossBar = LerpingBossEvent( - uuid, - TextComponent(name), - percent, - color.toMC(), - style.toMC(), - shouldDarkenSky, - dragonMusic, - shouldThickenFog - ) - - toMC().asMixin().events[uuid] = bossBar - - return BossBar(bossBar) - } - - /** - * Clears all [BossBar]s on screen - */ - @JvmStatic - fun clearBossBars() { - toMC().reset() - } - - /** - * Removes all [BossBar]s with the given name - * - * @param name the name to match - */ - @JvmStatic - fun removeBossBarsByName(name: String) { - toMC().asMixin().events.values.removeIf { - TextComponent(it.name).formattedText == ChatLib.addColor(name) - } - } - - /** - * Removes the given [BossBar] - * - * @param bossBar the BossBar to remove - */ - @JvmStatic - fun removeBossBar(bossBar: BossBar) { - toMC().asMixin().events.remove(bossBar.getUUID()) - } - - class BossBar(override val mcValue: LerpingBossEvent) : CTWrapper { - /** - * Gets the UUID of this BossBar - * - * @return the uuid - */ - fun getUUID(): UUID { - return mcValue.id - } - - /** - * Gets the name of this BossBar - * - * @return the name - */ - fun getName(): String { - return TextComponent(mcValue.name).formattedText - } - - /** - * Sets the name of this BossBar - * - * @param name the name to set - */ - fun setName(name: String) = apply { - mcValue.name = TextComponent(name) - } - - /** - * Gets how full this BossBar is - * - * @return how full the BossBar is - */ - fun getPercent(): Float = mcValue.progress - - /** - * Sets how full this BossBar is - * - * @param percent how full to set this BossBar. Must be between 0 and 1 - */ - fun setPercent(percent: Float) = apply { - mcValue.setProgress(percent.coerceIn(0f..1f)) - } - - /** - * Gets the [Color] of this BossBar - */ - fun getColor(): Color = Color.fromMC(mcValue.color) - - /** - * Sets the [Color] of this BossBar - * - * @param color the color to set. Can be [Color], [MCBossBarColor], or a string - */ - fun setColor(color: Any) = apply { - mcValue.color = Color.from(color).toMC() - } - - /** - * Gets the style of this BossBar. e.g. how many notches are displayed - */ - fun getStyle(): Style = Style.fromMC(mcValue.overlay) - - /** - * Sets the style of this BossBar - * - * @param style the style to set. Can be [Style], [MCBossBarStyle], a string, - * or a number of how many notches to put - */ - fun setStyle(style: Any) = apply { - mcValue.setOverlay(Style.from(style).toMC()) - } - - /** - * Gets whether this BossBar darkens the sky - */ - fun shouldDarkenSky(): Boolean = mcValue.shouldDarkenScreen() - - /** - * Sets whether this BossBar should darken the sky - * - * @param darken whether to darken the sky - */ - fun setShouldDarkenSky(darken: Boolean) = apply { - mcValue.setDarkenScreen(darken) - } - - /** - * Gets whether this BossBar will play dragon music. - * This will do nothing when the player is not in the end dimension - */ - fun hasDragonMusic(): Boolean = mcValue.shouldPlayBossMusic() - - /** - * Sets whether this BossBar will play dragon music - * - * @param music whether to play dragon music - */ - fun setHasDragonMusic(music: Boolean) = apply { - mcValue.setPlayBossMusic(music) - } - - /** - * Gets whether this BossBar should thicken the fog around the player - */ - fun shouldThickenFog(): Boolean = mcValue.shouldCreateWorldFog() - - /** - * Sets whether this BossBar should thicken the fog around the player - * - * @param fog whether to thicken the fog - */ - fun setShouldThickenFog(fog: Boolean) = apply { - mcValue.setCreateWorldFog(fog) - } - - override fun toString(): String { - return "BossBar{name=${getName()}, percent=${getPercent()}, color=${getColor()}, " + - "style=${getStyle()}, shouldDarkenSky=${shouldDarkenSky()}, " + - "hasDragonMusic=${hasDragonMusic()}, shouldThickenFog=${shouldThickenFog()}}" - } - } - - enum class Color(override val mcValue: MCBossBarColor) : CTWrapper { - PINK(MCBossBarColor.PINK), - BLUE(MCBossBarColor.BLUE), - RED(MCBossBarColor.RED), - GREEN(MCBossBarColor.GREEN), - YELLOW(MCBossBarColor.YELLOW), - PURPLE(MCBossBarColor.PURPLE), - WHITE(MCBossBarColor.WHITE); - - companion object { - @JvmStatic - fun fromMC(mcValue: MCBossBarColor) = entries.first { it.mcValue == mcValue } - - @JvmStatic - fun from(value: Any) = when (value) { - is CharSequence -> valueOf(value.toString()) - is MCBossBarColor -> fromMC(value) - is Color -> value - else -> throw IllegalArgumentException("Cannot create BossBars.Color from $value") - } - } - } - - enum class Style(override val mcValue: MCBossBarStyle, val sections: Int) : CTWrapper { - ONE(MCBossBarStyle.PROGRESS, 1), - SIX(MCBossBarStyle.NOTCHED_6, 6), - TEN(MCBossBarStyle.NOTCHED_10, 10), - TWELVE(MCBossBarStyle.NOTCHED_12, 12), - TWENTY(MCBossBarStyle.NOTCHED_20, 20); - - companion object { - @JvmStatic - fun fromMC(mcValue: MCBossBarStyle) = entries.first { it.mcValue == mcValue } - - @JvmStatic - fun from(value: Any) = when (value) { - is CharSequence -> valueOf(value.toString()) - is MCBossBarStyle -> fromMC(value) - is Style -> value - is Number -> entries.first { it.sections == value } - else -> throw IllegalArgumentException("Cannot create BossBars.Style from $value") - } - } - } -} + val color = Color.from(obj.getOrDefault("color", Color.WHITE)) + val style = Style.from(obj.getOrDefault("sections", Style.ONE)) + val shouldDarkenSky = obj.getOrDefault("darkenSky", false) + val dragonMusic = obj.getOrDefault("dragonMusic", false) + val shouldThickenFog = obj.getOrDefault("thickenFog", false) + + val uuid = UUID.randomUUID() + + val bossBar = LerpingBossEvent( + uuid, + TextComponent(name), + percent, + color.toMC(), + style.toMC(), + shouldDarkenSky, + dragonMusic, + shouldThickenFog + ) + + toMC().asMixin().events[uuid] = bossBar + + return BossBar(bossBar) + } + + /** + * Clears all [BossBar]s on screen + */ + @JvmStatic + fun clearBossBars() { + toMC().reset() + } + + /** + * Removes all [BossBar]s with the given name + * + * @param name the name to match + */ + @JvmStatic + fun removeBossBarsByName(name: String) { + toMC().asMixin().events.values.removeIf { + TextComponent(it.name).formattedText == ChatLib.addColor(name) + } + } + + /** + * Removes the given [BossBar] + * + * @param bossBar the BossBar to remove + */ + @JvmStatic + fun removeBossBar(bossBar: BossBar) { + toMC().asMixin().events.remove(bossBar.getUUID()) + } + + class BossBar(override val mcValue: LerpingBossEvent) : CTWrapper { + /** + * Gets the UUID of this BossBar + * + * @return the uuid + */ + fun getUUID(): UUID { + return mcValue.id + } + + /** + * Gets the name of this BossBar + * + * @return the name + */ + fun getName(): String { + return TextComponent(mcValue.name).formattedText + } + + /** + * Sets the name of this BossBar + * + * @param name the name to set + */ + fun setName(name: String) = apply { + mcValue.name = TextComponent(name) + } + + /** + * Gets how full this BossBar is + * + * @return how full the BossBar is + */ + fun getPercent(): Float = mcValue.progress + + /** + * Sets how full this BossBar is + * + * @param percent how full to set this BossBar. Must be between 0 and 1 + */ + fun setPercent(percent: Float) = apply { + mcValue.setProgress(percent.coerceIn(0f..1f)) + } + + /** + * Gets the [Color] of this BossBar + */ + fun getColor(): Color = Color.fromMC(mcValue.color) + + /** + * Sets the [Color] of this BossBar + * + * @param color the color to set. Can be [Color], [MCBossBarColor], or a string + */ + fun setColor(color: Any) = apply { + mcValue.color = Color.from(color).toMC() + } + + /** + * Gets the style of this BossBar. e.g. how many notches are displayed + */ + fun getStyle(): Style = Style.fromMC(mcValue.overlay) + + /** + * Sets the style of this BossBar + * + * @param style the style to set. Can be [Style], [MCBossBarStyle], a string, + * or a number of how many notches to put + */ + fun setStyle(style: Any) = apply { + mcValue.setOverlay(Style.from(style).toMC()) + } + + /** + * Gets whether this BossBar darkens the sky + */ + fun shouldDarkenSky(): Boolean = mcValue.shouldDarkenScreen() + + /** + * Sets whether this BossBar should darken the sky + * + * @param darken whether to darken the sky + */ + fun setShouldDarkenSky(darken: Boolean) = apply { + mcValue.setDarkenScreen(darken) + } + + /** + * Gets whether this BossBar will play dragon music. + * This will do nothing when the player is not in the end dimension + */ + fun hasDragonMusic(): Boolean = mcValue.shouldPlayBossMusic() + + /** + * Sets whether this BossBar will play dragon music + * + * @param music whether to play dragon music + */ + fun setHasDragonMusic(music: Boolean) = apply { + mcValue.setPlayBossMusic(music) + } + + /** + * Gets whether this BossBar should thicken the fog around the player + */ + fun shouldThickenFog(): Boolean = mcValue.shouldCreateWorldFog() + + /** + * Sets whether this BossBar should thicken the fog around the player + * + * @param fog whether to thicken the fog + */ + fun setShouldThickenFog(fog: Boolean) = apply { + mcValue.setCreateWorldFog(fog) + } + + override fun toString(): String { + return "BossBar{name=${getName()}, percent=${getPercent()}, color=${getColor()}, " + + "style=${getStyle()}, shouldDarkenSky=${shouldDarkenSky()}, " + + "hasDragonMusic=${hasDragonMusic()}, shouldThickenFog=${shouldThickenFog()}}" + } + } + + enum class Color(override val mcValue: MCBossBarColor) : CTWrapper { + PINK(MCBossBarColor.PINK), + BLUE(MCBossBarColor.BLUE), + RED(MCBossBarColor.RED), + GREEN(MCBossBarColor.GREEN), + YELLOW(MCBossBarColor.YELLOW), + PURPLE(MCBossBarColor.PURPLE), + WHITE(MCBossBarColor.WHITE); + + companion object { + @JvmStatic + fun fromMC(mcValue: MCBossBarColor) = entries.first { it.mcValue == mcValue } + + @JvmStatic + fun from(value: Any) = when (value) { + is CharSequence -> valueOf(value.toString()) + is MCBossBarColor -> fromMC(value) + is Color -> value + else -> throw IllegalArgumentException("Cannot create BossBars.Color from $value") + } + } + } + + enum class Style(override val mcValue: MCBossBarStyle, val sections: Int) : CTWrapper { + ONE(MCBossBarStyle.PROGRESS, 1), + SIX(MCBossBarStyle.NOTCHED_6, 6), + TEN(MCBossBarStyle.NOTCHED_10, 10), + TWELVE(MCBossBarStyle.NOTCHED_12, 12), + TWENTY(MCBossBarStyle.NOTCHED_20, 20); + + companion object { + @JvmStatic + fun fromMC(mcValue: MCBossBarStyle) = entries.first { it.mcValue == mcValue } + + @JvmStatic + fun from(value: Any) = when (value) { + is CharSequence -> valueOf(value.toString()) + is MCBossBarStyle -> fromMC(value) + is Style -> value + is Number -> entries.first { it.sections == value } + else -> throw IllegalArgumentException("Cannot create BossBars.Style from $value") + } + } + } +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/world/PotionEffectType.kt b/src/main/kotlin/com/chattriggers/ctjs/api/world/PotionEffectType.kt index 9d2878e1..e9547cba 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/world/PotionEffectType.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/world/PotionEffectType.kt @@ -14,7 +14,7 @@ class PotionEffectType(val type: MobEffect) { /** * Whether this effect is instant (e.g. instant health) */ - val isInstant get() = type.isInstantenous + val isInstant get() = type./*? if >=26.2 {*/isInstantaneous/*?} else {*//*isInstantenous*//*?}*/ /** * The raw key used for this effect type diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/CachedWorld.kt b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/CachedWorld.kt index ec93cc9b..d05a7dd1 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/CachedWorld.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/CachedWorld.kt @@ -18,6 +18,7 @@ object CachedWorld { @Volatile private var chunks = ConcurrentHashMap(512) private val pendingChunks = ConcurrentLinkedQueue() + private val dirtyNativeChunks = ConcurrentHashMap.newKeySet() private val pendingNativeUpdates = ConcurrentHashMap(256) private const val RUNTIME_WORLD_KEY = "runtime_memory" @@ -25,8 +26,6 @@ object CachedWorld { private var worldKey: String = RUNTIME_WORLD_KEY @Volatile private var nativeWorldToken: String = "" - @Volatile - private var pendingNativeResync = true private var cacheKey: Long = Long.MIN_VALUE private var cacheChunk: CachedChunk? = null @@ -101,6 +100,7 @@ object CachedWorld { val key = chunkKey(pos.x shr 4, pos.z shr 4) val chunk = chunks[key]?.takeIf { it.ready } ?: return val flags = NativeStateEncoder.flagsForState(state).toShort() + if (chunk.getFlags(pos.x and 15, pos.y, pos.z and 15) == flags) return chunk.setFlags(pos.x and 15, pos.y, pos.z and 15, flags) queueNativeUpdate(pos.x, pos.y, pos.z, flags.toInt() and 0xFFFF) if (cacheKey == key) { @@ -160,29 +160,30 @@ object CachedWorld { cacheChunk = cached } - syncChunkToNative(chunkX, chunkZ, cached) + dirtyNativeChunks.add(key) } if (!unlimitedChunkCache && chunks.size > Swift.MAXIMUM_CACHED_CHUNKS) { val toRemove = chunks.size - Swift.MAXIMUM_CACHED_CHUNKS - chunks.keys.take(toRemove).forEach { chunks.remove(it) } - } - - if (pendingNativeResync) { - syncAllCachedChunksToNative() - pendingNativeResync = false + val removed = chunks.keys.take(toRemove).filter { chunks.remove(it) != null }.toLongArray() + NativePathfinderBridge.removeChunks(removed) + if (cacheKey in removed) { + cacheKey = Long.MIN_VALUE + cacheChunk = null + } } + syncDirtyChunksToNative() flushPendingNativeUpdates() } private fun resetState() { chunks = ConcurrentHashMap(512) pendingChunks.clear() + dirtyNativeChunks.clear() pendingNativeUpdates.clear() cacheKey = Long.MIN_VALUE cacheChunk = null - pendingNativeResync = true nativeWorldToken = "" NativePathfinderBridge.clearWorld() } @@ -213,7 +214,9 @@ object CachedWorld { val loaded = WorldSerializer.load(lobbyName) if (loaded != null && chunks === sessionMap) { for ((key, chunk) in loaded) { - sessionMap.putIfAbsent(key, chunk) + if (sessionMap.putIfAbsent(key, chunk) == null) { + dirtyNativeChunks.add(key) + } } } } catch (e: Exception) { @@ -263,7 +266,6 @@ object CachedWorld { worldKey = normalized nativeWorldToken = "" - pendingNativeResync = true NativePathfinderBridge.clearWorld() } @@ -276,25 +278,42 @@ object CachedWorld { NativePathfinderBridge.setWorld(worldKey, minY, maxY) if (NativePathfinderBridge.getLastError() == null) { nativeWorldToken = token - pendingNativeResync = true + dirtyNativeChunks.addAll(chunks.keys) } } - private fun syncAllCachedChunksToNative() { - if (!NativePathfinderBridge.isAvailable()) return + private fun syncDirtyChunksToNative() { + if (!NativePathfinderBridge.isAvailable() || dirtyNativeChunks.isEmpty()) return - for ((key, chunk) in chunks) { - if (!chunk.ready) continue - val chunkX = (key shr 32).toInt() - val chunkZ = key.toInt() - syncChunkToNative(chunkX, chunkZ, chunk) + val readyChunks = dirtyNativeChunks.mapNotNull { key -> + if (!dirtyNativeChunks.remove(key)) return@mapNotNull null + chunks[key]?.takeIf { it.ready }?.let { key to it } + } + if (readyChunks.isEmpty()) return + + val metadata = IntArray(readyChunks.size * 4) + val sectionMasks = LongArray(readyChunks.size) + val sectionFlags = Array(readyChunks.size) { index -> + val (key, chunk) = readyChunks[index] + val offset = index * 4 + metadata[offset] = (key shr 32).toInt() + metadata[offset + 1] = key.toInt() + metadata[offset + 2] = chunk.minY + metadata[offset + 3] = chunk.maxY + + val encoded = encodeChunk(chunk) + sectionMasks[index] = encoded.first + encoded.second } - } - private fun syncChunkToNative(chunkX: Int, chunkZ: Int, chunk: CachedChunk) { - if (!NativePathfinderBridge.isAvailable() || !chunk.ready) return + NativePathfinderBridge.upsertChunks(metadata, sectionMasks, sectionFlags) + if (NativePathfinderBridge.getLastError() != null) { + dirtyNativeChunks.addAll(readyChunks.map { it.first }) + } + } - val sectionCount = (chunk.maxY - chunk.minY + 15) shr 4 + private fun encodeChunk(chunk: CachedChunk): Pair { + val sectionCount = minOf((chunk.maxY - chunk.minY + 15) shr 4, Long.SIZE_BITS) var sectionMask = 0L var totalValues = 0 for (i in 0 until sectionCount) { @@ -304,18 +323,6 @@ object CachedWorld { } } - if (totalValues == 0) { - NativePathfinderBridge.upsertChunk( - chunkX, - chunkZ, - chunk.minY, - chunk.maxY, - 0L, - ShortArray(0) - ) - return - } - val sectionFlags = ShortArray(totalValues) var offset = 0 for (i in 0 until sectionCount) { @@ -324,14 +331,7 @@ object CachedWorld { offset += 4096 } - NativePathfinderBridge.upsertChunk( - chunkX, - chunkZ, - chunk.minY, - chunk.maxY, - sectionMask, - sectionFlags - ) + return sectionMask to sectionFlags } private fun flushPendingNativeUpdates() { diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderBridge.kt b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderBridge.kt index 992a3d58..7dd51749 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderBridge.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderBridge.kt @@ -99,6 +99,22 @@ object NativePathfinderBridge { NativePathfinderJNI.upsertChunk(chunkX, chunkZ, minY, maxY, sectionMask, sectionFlags) } + @JvmStatic + fun upsertChunks( + metadata: IntArray, + sectionMasks: LongArray, + sectionFlags: Array + ) = runNative { + NativePathfinderJNI.upsertChunks(metadata, sectionMasks, sectionFlags) + } + + @JvmStatic + internal fun removeChunks(chunkKeys: LongArray) { + if (chunkKeys.isEmpty()) return + + runNative { NativePathfinderJNI.removeChunks(chunkKeys) } + } + @JvmStatic fun applyBlockUpdates(updates: IntArray) { if (updates.isEmpty()) return diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderJNI.kt b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderJNI.kt index 05379bc0..ece6b778 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderJNI.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/NativePathfinderJNI.kt @@ -134,6 +134,14 @@ internal object NativePathfinderJNI { sectionFlags: ShortArray ) + @JvmStatic external fun upsertChunks( + metadata: IntArray, + sectionMasks: LongArray, + sectionFlags: Array + ) + + @JvmStatic external fun removeChunks(chunkKeys: LongArray) + @JvmStatic external fun applyBlockUpdates(updates: IntArray) @JvmStatic external fun findPath( diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/PathManager.kt b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/PathManager.kt index 6fdab855..8b8d25ee 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/PathManager.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/world/pathfinding/PathManager.kt @@ -251,6 +251,7 @@ object PathManager { try { currentTask = searchExecutor.submit { try { + val hasLoadedEndGoal = endPoints.any { CachedWorld.getChunk(it[0] shr 4, it[2] shr 4) != null } val result = NativePathfinderBridge.findPath( NativePathfinderBridge.NativePathSearchRequest( startFlat, @@ -292,7 +293,11 @@ object PathManager { } else { currentPath = null currentAnnotations = null - lastError = NativePathfinderBridge.getLastError() ?: "No path found to destination" + lastError = if (hasLoadedEndGoal) { + NativePathfinderBridge.getLastError() ?: "No path found to destination" + } else { + "End goal is in an unloaded chunk" + } } } catch (e: InterruptedException) { if (searchId.get() == currentId) { @@ -336,7 +341,8 @@ object PathManager { heuristicWeight: Double = 1.0, rayLength: Double = 61.0, rewireEpsilon: Double = 1.0, - eyeHeight: Double = Double.NaN + eyeHeight: Double = Double.NaN, + callback: Runnable? = null ): Boolean { cancelSearch() @@ -468,6 +474,7 @@ object PathManager { if (searchId.get() == currentId) { isSearching = false currentTask = null + callback?.let(Minecraft.getInstance()::submit) } } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/console/ConsoleClientProcess.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/console/ConsoleClientProcess.kt index ebafab3d..084926d7 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/console/ConsoleClientProcess.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/console/ConsoleClientProcess.kt @@ -40,15 +40,6 @@ class ConsoleClientProcess(private val port: Int, private val hostPid: Long) { val socketIn = BufferedReader(InputStreamReader(socket.inputStream, Charsets.UTF_8)) while (true) { - if (socket.isClosed || !socket.isConnected) { - return - } - - if (!socketIn.ready()) { - Thread.sleep(50) - continue - } - val messageText = socketIn.readLine() ?: break when (val message = Json.decodeFromString(messageText)) { is InitMessage -> { diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/JSLoader.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/JSLoader.kt index 3cdd50a8..d654d39f 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/JSLoader.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/JSLoader.kt @@ -133,7 +133,6 @@ object JSLoader { try { require.loadCTModule(module.name, entryURI) } catch (e: Throwable) { - println("Error loading module ${module.name}") "Error loading module ${module.name}".printToConsole(LogType.ERROR) e.printTraceToConsole() } diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/Module.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/Module.kt index 11c11e30..44026b3e 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/Module.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/Module.kt @@ -1,7 +1,7 @@ package com.chattriggers.ctjs.internal.engine.module import com.chattriggers.ctjs.api.message.ChatLib -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.api.render.Text import com.chattriggers.ctjs.internal.utils.ModVersion import net.minecraft.client.gui.GuiGraphicsExtractor @@ -26,7 +26,7 @@ class Module(val name: String, var metadata: ModuleMetadata, val folder: File) { ctx.fill(x, y, x + width, y + 13, 0xaa000000.toInt()) ctx.text( - Renderer.getFontRenderer(), + Render2D.getFontRenderer(), metadata.name ?: name, x + 3, y + 3, -1 ) @@ -35,7 +35,7 @@ class Module(val name: String, var metadata: ModuleMetadata, val folder: File) { ctx.pose().pushMatrix() ctx.pose().translate(x + width - 5f, y + 8f) ctx.pose().rotate(Math.PI.toFloat()) - ctx.text(Renderer.getFontRenderer(), "^", 0, 0, -1, false) + ctx.text(Render2D.getFontRenderer(), "^", 0, 0, -1, false) ctx.pose().popMatrix() 16 } else { @@ -43,23 +43,23 @@ class Module(val name: String, var metadata: ModuleMetadata, val folder: File) { val descriptionHeight = gui.description.getHeight().toInt() ctx.fill(x, y + 13, x + width, y + descriptionHeight + 25, 0x50000000) - ctx.text(Renderer.getFontRenderer(), "^", x + width - 10, y + 5, -1, false) + ctx.text(Render2D.getFontRenderer(), "^", x + width - 10, y + 5, -1, false) gui.description.draw(ctx, x + 3, y + 15) if (metadata.version != null) { val versionText = ChatLib.addColor("&8v${metadata.version}") ctx.text( - Renderer.getFontRenderer(), + Render2D.getFontRenderer(), versionText, - x + width - Renderer.getStringWidth(versionText), + x + width - Render2D.getStringWidth(versionText), y + descriptionHeight + 15, -1 ) } ctx.text( - Renderer.getFontRenderer(), + Render2D.getFontRenderer(), ChatLib.addColor( if (metadata.isRequired && requiredBy.isNotEmpty()) { "&8required by $requiredBy" diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleManager.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleManager.kt index 5dab721c..e8b35d19 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleManager.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleManager.kt @@ -21,7 +21,7 @@ object ModuleManager { modulesFolder.mkdirs() // Get existing modules - val installedModules = getFoldersInDir(modulesFolder).map(::parseModule).distinctBy { + val installedModules = modulesFolder.listFiles()?.filter(File::isDirectory).orEmpty().map(::parseModule).distinctBy { it.name.lowercase(Locale.ROOT) } @@ -78,9 +78,6 @@ object ModuleManager { } } - private fun getFoldersInDir(dir: File): List = - if (dir.isDirectory) dir.listFiles()?.filter { it.isDirectory }.orEmpty() else emptyList() - fun parseModule(directory: File): Module { val metadataFile = File(directory, "metadata.json") var metadata = ModuleMetadata() diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleUpdater.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleUpdater.kt index dc088e2f..7afb79da 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleUpdater.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModuleUpdater.kt @@ -106,17 +106,10 @@ object ModuleUpdater : Initializer { } cachedModules.add(module) - return buildList { - add(module) - module.metadata.requires?.forEach { - addAll(importModule(it, module.name)) - } - } + return listOf(module) + module.metadata.requires.orEmpty().flatMap { importModule(it, module.name) } } - data class DownloadResult(val name: String, val modVersion: String) - - private fun downloadModule(name: String): DownloadResult? { + private fun downloadModule(name: String): Pair? { val downloadZip = File(modulesFolder, "currDownload.zip") try { @@ -141,7 +134,7 @@ object ModuleUpdater : Initializer { } } } - return DownloadResult(realName, connection.getHeaderField("CT-Version")) + return realName to connection.getHeaderField("CT-Version") } } catch (exception: Exception) { exception.printTraceToConsole() diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModulesGui.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModulesGui.kt index 6104b603..91910bf9 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModulesGui.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/engine/module/ModulesGui.kt @@ -2,7 +2,7 @@ package com.chattriggers.ctjs.internal.engine.module import com.chattriggers.ctjs.api.client.Player import com.chattriggers.ctjs.api.message.ChatLib -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.api.render.Text import net.minecraft.client.input.MouseButtonEvent import net.minecraft.client.gui.GuiGraphicsExtractor @@ -19,20 +19,20 @@ object ModulesGui : Screen(net.minecraft.network.chat.Component.literal("Modules override fun extractRenderState(ctx: GuiGraphicsExtractor, mouseX: Int, mouseY: Int, deltaTicks: Float) { ctx.pose().pushMatrix() - val middle = Renderer.screen.getWidth() / 2 - val width = (Renderer.screen.getWidth() - 100).coerceAtMost(500) + val middle = Render2D.screen.getWidth() / 2 + val width = (Render2D.screen.getWidth() - 100).coerceAtMost(500) ctx.fill(0, 0, ctx.guiWidth(), ctx.guiHeight(), 0x50000000) - if (-window.scroll > window.height - Renderer.screen.getHeight() + 20) - window.scroll = -window.height + Renderer.screen.getHeight() - 20 + if (-window.scroll > window.height - Render2D.screen.getHeight() + 20) + window.scroll = -window.height + Render2D.screen.getHeight() - 20 if (-window.scroll < 0) window.scroll = 0f if (-window.scroll > 0) { - val rx = Renderer.screen.getWidth() - 20 - val ry = Renderer.screen.getHeight() - 20 + val rx = Render2D.screen.getWidth() - 20 + val ry = Render2D.screen.getHeight() - 20 ctx.fill(rx, ry, rx + 20, ry + 20, 0xaa000000.toInt()) - ctx.text(Renderer.getFontRenderer(), "^", Renderer.screen.getWidth() - 12, Renderer.screen.getHeight() - 12, -1, false) + ctx.text(Render2D.getFontRenderer(), "^", Render2D.screen.getWidth() - 12, Render2D.screen.getHeight() - 12, -1, false) } val ox = middle - width / 2 @@ -57,10 +57,10 @@ object ModulesGui : Screen(net.minecraft.network.chat.Component.literal("Modules val mouseX = click.x val mouseY = click.y - val width = (Renderer.screen.getWidth() - 100f).coerceAtMost(500f) - val right = Renderer.screen.getWidth() / 2f + width / 2f + val width = (Render2D.screen.getWidth() - 100f).coerceAtMost(500f) + val right = Render2D.screen.getWidth() / 2f + width / 2f - if (mouseX > Renderer.screen.getWidth() - 20 && mouseY > Renderer.screen.getHeight() - 20) { + if (mouseX > Render2D.screen.getWidth() - 20 && mouseY > Render2D.screen.getHeight() - 20) { window.scroll = 0f return false } diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTJSPreLaunch.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTJSPreLaunch.kt index fb50f422..27de03c3 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTJSPreLaunch.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTJSPreLaunch.kt @@ -7,8 +7,6 @@ import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint class CTJSPreLaunch : PreLaunchEntrypoint { override fun onPreLaunch() { - if (LegacyLoaderMigration.stageCachedLoaderIfNeeded()) return - val prevHandler = Thread.getDefaultUncaughtExceptionHandler() Thread.setDefaultUncaughtExceptionHandler { thread, exception -> "Uncaught exception in thread \"${thread.name}\"".printToConsole(LogType.ERROR) diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTMixinPlugin.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTMixinPlugin.kt index 79d4f06d..3d0fc936 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTMixinPlugin.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/CTMixinPlugin.kt @@ -25,7 +25,7 @@ class CTMixinPlugin : IMixinConfigPlugin { override fun getRefMapperConfig(): String? = null - override fun shouldApplyMixin(targetClassName: String?, mixinClassName: String?): Boolean = true + override fun shouldApplyMixin(targetClassName: String?, mixinClassName: String?) = true override fun acceptTargets(myTargets: MutableSet?, otherTargets: MutableSet?) {} diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/LegacyLoaderMigration.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/LegacyLoaderMigration.kt deleted file mode 100644 index 70438acb..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/LegacyLoaderMigration.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.chattriggers.ctjs.internal.launch - -import java.io.File - -internal object LegacyLoaderMigration { - private val legacyLoaderName = Regex("V5ModLoader.*\\.jar", RegexOption.IGNORE_CASE) - - fun stageCachedLoaderIfNeeded(): Boolean { - val gameDir = System.getProperty("v5.game_dir")?.takeIf(String::isNotBlank)?.let(::File) ?: return false - val legacyLoaders = File(gameDir, "mods").listFiles() - ?.filter { it.isFile && legacyLoaderName.matches(it.name) } - .orEmpty() - if (legacyLoaders.isEmpty()) return false - - val cachedLoader = runCatching { - File(CTJSPreLaunch::class.java.protectionDomain.codeSource.location.toURI()).canonicalFile - }.getOrNull()?.takeIf { it.isFile && it.parentFile?.name == "cache" } ?: return false - - val bytes = runCatching { cachedLoader.readBytes() }.getOrNull() ?: return false - try { - ModLoaderUpdater.stageUpdateAndRelaunch(gameDir, bytes, legacyLoaders + cachedLoader) - println("[V5] Migrating legacy V5ModLoader to V5-Loader. Closing Minecraft now.") - } finally { - bytes.fill(0) - } - Runtime.getRuntime().halt(0) - return true - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/SecureLoader.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/SecureLoader.kt index eca90439..f2543ab5 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/SecureLoader.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/SecureLoader.kt @@ -2,10 +2,16 @@ package com.chattriggers.ctjs.internal.launch import com.chattriggers.ctjs.CTJS import com.chattriggers.ctjs.internal.engine.module.ModuleManager +import com.v5.loader.internal.V5Loader +import com.v5.loader.internal.V5Crypto +import com.v5.loader.internal.V5Http +import com.v5.loader.internal.refreshSession +import com.v5.loader.internal.sessionFile import kotlinx.serialization.json.Json import kotlinx.serialization.json.booleanOrNull import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.longOrNull @@ -34,8 +40,12 @@ internal object SecureLoader { private const val LOADER_USER_AGENT = "V5Loader/1.1" private const val TOKEN_EXPIRY_SKEW_SECONDS = 60L private const val CTJS_ERROR_REPORT_INTERVAL_MS = 15 * 60 * 1000L - private const val SESSION_DIR_NAME = ".v5" - private const val SESSION_FILE_NAME = "session.json" + private const val GITHUB_API_HOST = "api.github.com" + private const val GITHUB_HOST = "github.com" + private const val GITHUB_REPOSITORY = "V5-Client/V5" + private const val MODULE_ASSET_NAME = "V5-Mojmap.zip" + private val SHA_256_REGEX = Regex("[a-f0-9]{64}") + private val RELEASE_TAG_REGEX = Regex("[A-Za-z0-9._-]+") private val jsonParser = Json { useAlternativeNames = true @@ -43,31 +53,11 @@ internal object SecureLoader { } @Volatile private var isDevMode = false - @Volatile private var isPluginLoaded = false - @Volatile private var isLoaded = false @Volatile private var internalToken: String? = null - @Volatile private var didConsumeInitialLoaderToken = false private var lastCtjsErrorReportAt = 0L @JvmStatic - fun getJwtToken(): String? { - val token = internalToken - if (!token.isNullOrBlank()) return token - - if (!didConsumeInitialLoaderToken) { - synchronized(this) { - if (!didConsumeInitialLoaderToken) { - val loaderToken = V5TokenSource.consumeToken() - if (!loaderToken.isNullOrBlank()) { - internalToken = loaderToken - } - didConsumeInitialLoaderToken = true - } - } - } - - return internalToken - } + fun getJwtToken(): String? = internalToken @JvmStatic fun getFreshJwtToken(): String? { @@ -83,6 +73,9 @@ internal object SecureLoader { internalToken = token } + @Synchronized + fun authenticate(): String? = V5Loader.authenticate()?.also(::setJwtToken) + fun reportCtjsJavascriptError( kind: String, message: String?, @@ -116,11 +109,11 @@ internal object SecureLoader { }.toString().toByteArray(StandardCharsets.UTF_8) Util.backgroundExecutor().execute { - val token = getFreshJwtToken() ?: return@execute + val token = getFreshJwtToken() val connection = try { openBackendConnection("$BACKEND_URL/api/logs/ctjs-errors").apply { requestMethod = "POST" - setRequestProperty("Authorization", "Bearer $token") + if (token != null) setRequestProperty("Authorization", "Bearer $token") setRequestProperty("Content-Type", "application/json") setRequestProperty("Accept", "application/json") setRequestProperty("User-Agent", LOADER_USER_AGENT) @@ -151,7 +144,7 @@ internal object SecureLoader { internalToken?.let { latest -> if (!isNearExpiry(latest)) return latest } - val refreshed = refreshWithStoredRefreshToken() + val refreshed = refreshSession(sessionFile(FabricLoader.getInstance().gameDir)) if (!refreshed.isNullOrBlank()) { internalToken = refreshed return refreshed @@ -185,133 +178,19 @@ internal object SecureLoader { } } - private fun refreshWithStoredRefreshToken(): String? { - val refreshToken = readRefreshTokenFromSessionFile() ?: return null - val requestBody = buildJsonObject { put("refresh_token", refreshToken) }.toString() - .toByteArray(StandardCharsets.UTF_8) - - val connection = try { - openBackendConnection("$BACKEND_URL/api/auth/refresh").apply { - requestMethod = "POST" - setRequestProperty("Content-Type", "application/json") - setRequestProperty("Accept", "application/json") - setRequestProperty("User-Agent", LOADER_USER_AGENT) - connectTimeout = 10000 - readTimeout = 10000 - doOutput = true - } - } catch (_: Exception) { - return null - } - - return try { - connection.outputStream.use { it.write(requestBody) } - val responseCode = connection.responseCode - val responseText = (if (responseCode in 200..299) connection.inputStream else connection.errorStream) - ?.bufferedReader() - ?.use { it.readText() } - ?: "" - if (responseText.isBlank()) return null - - val obj = jsonParser.parseToJsonElement(responseText).jsonObject - if (responseCode != 200) { - val errorCode = obj["error"]?.jsonPrimitive?.contentOrNull.orEmpty() - if ( - errorCode == "INVALID_REFRESH_TOKEN" || - errorCode == "REFRESH_TOKEN_EXPIRED" || - errorCode == "REFRESH_TOKEN_REUSED" || - errorCode == "SESSION_REVOKED" - ) { - clearSessionFile() - } - return null - } - - val accessToken = obj["access_token"]?.jsonPrimitive?.contentOrNull - ?: obj["token"]?.jsonPrimitive?.contentOrNull - val rotatedRefresh = obj["refresh_token"]?.jsonPrimitive?.contentOrNull - if (accessToken.isNullOrBlank() || rotatedRefresh.isNullOrBlank()) { - return null - } - persistRefreshToken(rotatedRefresh) - accessToken - } catch (_: Exception) { - null - } finally { - connection.disconnect() - } - } - - private fun getSessionFile(): File { - return File(File(getGameDir(), SESSION_DIR_NAME), SESSION_FILE_NAME) - } - - private fun readRefreshTokenFromSessionFile(): String? { - val file = getSessionFile() - if (!file.exists() || !file.isFile) return null - return try { - val content = file.readText(Charsets.UTF_8) - val obj = jsonParser.parseToJsonElement(content).jsonObject - obj["refresh_token"]?.jsonPrimitive?.contentOrNull?.trim()?.ifBlank { null } - } catch (_: Exception) { - null - } - } - - private fun persistRefreshToken(refreshToken: String) { - if (refreshToken.isBlank()) return - val file = getSessionFile() - try { - file.parentFile?.mkdirs() - val json = buildJsonObject { - put("refresh_token", refreshToken) - put("updated_at", System.currentTimeMillis() / 1000L) - } - file.writeText(json.toString(), Charsets.UTF_8) - file.setReadable(false, false) - file.setWritable(false, false) - file.setExecutable(false, false) - file.setReadable(true, true) - file.setWritable(true, true) - } catch (_: Exception) { - } - } - - private fun clearSessionFile() { - try { - val file = getSessionFile() - if (file.exists()) file.delete() - } catch (_: Exception) { - } - } - - fun run() { - onMixinPlugin() - onInitialize() - } - fun onMixinPlugin() { - if (isPluginLoaded) return println("[V5] Stage: onMixinPlugin") try { - val token = getFreshJwtToken() - if (token.isNullOrBlank()) { - println("[V5] No loader auth token available.") - shutDownHard() - } - val modulePath = getV5ModuleDir() if (modulePath.exists() && isLocalDeveloperModeEnabled()) { isDevMode = true println("[V5] Developer mode is active. Skipping V5 module download.") - isPluginLoaded = true return } - val zipBytes = downloadZip(token) + val zipBytes = downloadZip() processZip(zipBytes) Arrays.fill(zipBytes, 0) - isPluginLoaded = true } catch (e: Exception) { e.printStackTrace() shutDownHard() @@ -331,55 +210,22 @@ internal object SecureLoader { } } - fun onInitialize() { - if (isLoaded) return - println("[V5] Stage: onInitialize") - - if (isDevMode) { - isLoaded = true - return - } - - if (getFreshJwtToken().isNullOrBlank()) { - println("[V5] Session expired or revoked. Exiting.") - shutDownHard() - } - - isLoaded = true - } - - private fun downloadZip(token: String): ByteArray { - return downloadAsset("/api/download/v5mojmap", token) - } - - private fun downloadAsset(endpointPath: String, token: String): ByteArray { - val connection = openBackendConnection("$BACKEND_URL$endpointPath").apply { - setRequestProperty("Authorization", "Bearer $token") - setRequestProperty("User-Agent", LOADER_USER_AGENT) - connectTimeout = 10000 - readTimeout = 30000 - } - - try { - val responseCode = connection.responseCode - if (responseCode !in 200..299) { - val responseText = try { - connection.errorStream?.bufferedReader()?.use { it.readText() } ?: "" - } catch (_: Exception) { - "" - } - val errorMessage = try { - jsonParser.parseToJsonElement(responseText).jsonObject["error"]?.jsonPrimitive?.contentOrNull - } catch (_: Exception) { - null - } - throw IOException("Download failed: ${errorMessage ?: "Unknown error"} (code: $responseCode)") - } - - return connection.inputStream.use { it.readBytes() } - } finally { - connection.disconnect() - } + private fun downloadZip(): ByteArray { + val release = V5Http.httpsGet(GITHUB_API_HOST, "/repos/$GITHUB_REPOSITORY/releases/latest") + .takeIf { it.isNotBlank() } + ?.let { jsonParser.parseToJsonElement(it).jsonObject } + ?: throw IOException("Failed to read the latest V5 GitHub workflow release") + val tag = release["tag_name"]?.jsonPrimitive?.contentOrNull?.takeIf(RELEASE_TAG_REGEX::matches) + ?: throw IOException("Latest V5 release has an invalid tag") + val asset = release["assets"]?.jsonArray + ?.map { it.jsonObject } + ?.singleOrNull { it["name"]?.jsonPrimitive?.contentOrNull == MODULE_ASSET_NAME } + ?: throw IOException("Latest V5 release does not contain $MODULE_ASSET_NAME") + val bytes = V5Http.httpsGetBytes( + GITHUB_HOST, + "/$GITHUB_REPOSITORY/releases/download/$tag/$MODULE_ASSET_NAME", + ) ?: throw IOException("Failed to download $MODULE_ASSET_NAME from GitHub") + return bytes } private fun openBackendConnection(url: String): HttpsURLConnection = @@ -471,10 +317,8 @@ internal object SecureLoader { } fun reload() { - isLoaded = false - isPluginLoaded = false isDevMode = false - run() + onMixinPlugin() } private fun shutDownHard(): Nothing { @@ -482,12 +326,6 @@ internal object SecureLoader { throw IllegalStateException("V5 loader aborted due to unrecoverable error") } - fun isLoaded(): Boolean = isLoaded - - private fun getGameDir(): File { - return FabricLoader.getInstance().gameDir.toFile() - } - private fun getV5ModuleDir(): File { return File(File(CTJS.MODULES_FOLDER), DISK_MODULE_NAME) } diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/V5TokenSource.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/launch/V5TokenSource.kt deleted file mode 100644 index 0862f53b..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/launch/V5TokenSource.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.chattriggers.ctjs.internal.launch - -internal object V5TokenSource { - private val consumeTokenMethods by lazy { - listOf("com.v5.loader.JNI", "com.v5.loader.internal.V5Loader").mapNotNull { className -> - runCatching { Class.forName(className).getMethod("consumeToken") }.getOrNull() - } - } - - @JvmStatic - fun consumeToken(): String? = - consumeTokenMethods.firstNotNullOfOrNull { method -> - runCatching { (method.invoke(null) as? String)?.takeIf { it.isNotBlank() } }.getOrNull() - } -} diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/ClientListener.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/ClientListener.kt index 2e506fc6..59b876ed 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/ClientListener.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/ClientListener.kt @@ -7,7 +7,7 @@ import com.chattriggers.ctjs.api.entity.PlayerInteraction import com.chattriggers.ctjs.api.inventory.Item import com.chattriggers.ctjs.api.message.TextComponent import com.chattriggers.ctjs.api.render.DrawContextHolder -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.api.triggers.CancellableEvent import com.chattriggers.ctjs.api.triggers.ChatTrigger import com.chattriggers.ctjs.api.triggers.TriggerType @@ -94,21 +94,21 @@ object ClientListener : Initializer { } ScreenEvents.BEFORE_INIT.register { _, screen, _, _ -> - // TODO: Why does Renderer.drawString not work in here? + // TODO: Why does Render2D.drawString not work in here? ScreenEvents.beforeExtract(screen).register { _, stack, mouseX, mouseY, partialTicks -> if (!JSLoader.hasTriggers(TriggerType.GUI_RENDER)) return@register DrawContextHolder.withContext(stack) { - Renderer.withMatrix(UMatrixStack(stack.pose()).toMC(), partialTicks) { + Render2D.withMatrix(UMatrixStack(stack.pose()).toMC(), partialTicks) { TriggerType.GUI_RENDER.triggerAll(mouseX, mouseY, screen) } } } - // TODO: Why does Renderer.drawString not work in here? + // TODO: Why does Render2D.drawString not work in here? ScreenEvents.afterExtract(screen).register { _, stack, mouseX, mouseY, partialTicks -> if (!JSLoader.hasTriggers(TriggerType.POST_GUI_RENDER)) return@register DrawContextHolder.withContext(stack) { - Renderer.withMatrix(UMatrixStack(stack.pose()).toMC(), partialTicks) { + Render2D.withMatrix(UMatrixStack(stack.pose()).toMC(), partialTicks) { TriggerType.POST_GUI_RENDER.triggerAll(mouseX, mouseY, screen, partialTicks) } } @@ -144,7 +144,7 @@ object ClientListener : Initializer { CTEvents.RENDER_OVERLAY.register { ctx, stack, partialTicks -> if (!JSLoader.hasTriggers(TriggerType.RENDER_OVERLAY)) return@register DrawContextHolder.withContext(ctx) { - Renderer.withMatrix(stack, partialTicks) { + Render2D.withMatrix(stack, partialTicks) { TriggerType.RENDER_OVERLAY.triggerAll(ctx) } } @@ -152,14 +152,14 @@ object ClientListener : Initializer { CTEvents.RENDER_ENTITY.register { stack, entity, partialTicks, ci -> if (!JSLoader.hasTriggers(TriggerType.RENDER_ENTITY)) return@register - Renderer.withMatrix(stack, partialTicks) { + Render2D.withMatrix(stack, partialTicks) { TriggerType.RENDER_ENTITY.triggerAll(Entity.fromMC(entity), partialTicks, ci) } } CTEvents.RENDER_BLOCK_ENTITY.register { stack, blockEntity, partialTicks, ci -> if (!JSLoader.hasTriggers(TriggerType.RENDER_BLOCK_ENTITY)) return@register - Renderer.withMatrix(stack, partialTicks) { + Render2D.withMatrix(stack, partialTicks) { TriggerType.RENDER_BLOCK_ENTITY.triggerAll(BlockEntity(blockEntity), partialTicks, ci) } } diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/WorldListener.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/WorldListener.kt index 215d6ebb..32b5e56a 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/WorldListener.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/listeners/WorldListener.kt @@ -1,7 +1,7 @@ package com.chattriggers.ctjs.internal.listeners import com.chattriggers.ctjs.MCBlockPos -import com.chattriggers.ctjs.api.render.Renderer +import com.chattriggers.ctjs.api.render.Render2D import com.chattriggers.ctjs.internal.engine.CTEvents import com.chattriggers.ctjs.api.triggers.CancellableEvent import com.chattriggers.ctjs.api.triggers.TriggerType @@ -24,14 +24,14 @@ object WorldListener { fun triggerRenderStart(ticks: Float) { deltaTicks = ticks if (matrixStack == null || !JSLoader.hasTriggers(TriggerType.PRE_RENDER_WORLD)) return - Renderer.withMatrix(matrixStack, ticks) { + Render2D.withMatrix(matrixStack, ticks) { TriggerType.PRE_RENDER_WORLD.triggerAll(ticks) } } fun triggerRenderLast() { val stack = matrixStack ?: return - if (JSLoader.hasTriggers(TriggerType.POST_RENDER_WORLD)) Renderer.withMatrix(stack, deltaTicks) { + if (JSLoader.hasTriggers(TriggerType.POST_RENDER_WORLD)) Render2D.withMatrix(stack, deltaTicks) { TriggerType.POST_RENDER_WORLD.triggerAll(deltaTicks) } CTEvents.POST_RENDER_WORLD.invoker().render(stack, deltaTicks) diff --git a/src/main/kotlin/com/chattriggers/ctjs/internal/utils/extensions.kt b/src/main/kotlin/com/chattriggers/ctjs/internal/utils/extensions.kt index 83c812ad..0c8c4517 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/internal/utils/extensions.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/internal/utils/extensions.kt @@ -5,8 +5,6 @@ import net.minecraft.resources.Identifier import net.minecraft.util.Mth import org.mozilla.javascript.NativeObject import org.mozilla.javascript.Scriptable -import java.net.URLEncoder -import java.nio.charset.Charset import kotlin.reflect.KClass data class ModVersion( @@ -27,8 +25,6 @@ fun String.toIdentifier(): Identifier { return Identifier.parse(if (':' in this) this else "minecraft:$this") } -fun String.urlEncode() = URLEncoder.encode(this, Charset.defaultCharset()) - // A helper function that makes the intent explicit and reduces parens inline fun Any.asMixin() = this as T @@ -36,10 +32,6 @@ inline fun NativeObject?.get(key: String): T? { return this?.get(key) as? T } -inline fun NativeObject?.getOption(key: String, default: T): T { - return this?.get(key) as? T ?: default -} - // Note: getOrDefault(...).toInt/Double/Float() should be preferred // over getOrDefault(...), as the exact numeric type // of numeric properties depends on Rhino internals @@ -53,8 +45,6 @@ fun NativeObject?.getOrNull(key: String): Any? { fun Double.toRadians() = this * Mth.DEG_TO_RAD fun Float.toRadians() = this * Mth.DEG_TO_RAD -fun Double.toDegrees() = this * Mth.RAD_TO_DEG -fun Float.toDegrees() = this * Mth.RAD_TO_DEG fun KClass<*>.descriptorString(): String = java.descriptorString() fun KClass<*>.descriptor() = Descriptor.Object(descriptorString()) diff --git a/src/main/kotlin/com/v5/loader/internal/V5Crypto.kt b/src/main/kotlin/com/v5/loader/internal/V5Crypto.kt index 804d2ca4..68e88df5 100644 --- a/src/main/kotlin/com/v5/loader/internal/V5Crypto.kt +++ b/src/main/kotlin/com/v5/loader/internal/V5Crypto.kt @@ -4,11 +4,15 @@ import java.nio.file.Path import java.security.MessageDigest import java.security.SecureRandom import java.util.Base64 +import java.util.HexFormat import kotlin.io.path.inputStream internal object V5Crypto { private val secureRandom = SecureRandom() + fun calculateSha256(bytes: ByteArray): String = + HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256").digest(bytes)) + fun calculateFileSha256(path: String): String { repeat(10) { attempt -> try { @@ -21,7 +25,7 @@ internal object V5Crypto { digest.update(buffer, 0, read) } } - return digest.digest().joinToString("") { "%02x".format(it) } + return HexFormat.of().formatHex(digest.digest()) } catch (_: Exception) { if (attempt < 9) Thread.sleep(100) } diff --git a/src/main/kotlin/com/v5/loader/internal/V5Http.kt b/src/main/kotlin/com/v5/loader/internal/V5Http.kt index 771cf4b6..d5a8234a 100644 --- a/src/main/kotlin/com/v5/loader/internal/V5Http.kt +++ b/src/main/kotlin/com/v5/loader/internal/V5Http.kt @@ -45,7 +45,6 @@ internal object V5Http { host: String, path: String, jwt: String = "", - extraHeaders: List> = emptyList(), ): String { val url = "https://$host$path" val requestBuilder = HttpRequest.newBuilder() @@ -57,10 +56,6 @@ internal object V5Http { if (jwt.isNotEmpty()) { requestBuilder.header("Authorization", "Bearer $jwt") } - for ((name, value) in extraHeaders) { - requestBuilder.header(name, value) - } - return try { val response = httpClient.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()) if (response.statusCode() != 200) { @@ -74,7 +69,7 @@ internal object V5Http { } } - fun httpsPost(host: String, path: String, jsonBody: String, jwt: String = ""): String { + fun httpsPost(host: String, path: String, jsonBody: String): Pair? { val url = "https://$host$path" val requestBuilder = HttpRequest.newBuilder() .uri(URI.create(url)) @@ -83,31 +78,18 @@ internal object V5Http { .header("User-Agent", USER_AGENT) .POST(HttpRequest.BodyPublishers.ofString(jsonBody)) - if (jwt.isNotEmpty()) { - requestBuilder.header("Authorization", "Bearer $jwt") - } - return try { val response = httpClient.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString()) if (response.statusCode() != 200) { logHttpFailure("POST", url, response.statusCode(), response.body().length) - return "" } - response.body() + response.statusCode() to response.body() } catch (e: Exception) { logTransportFailure("POST", url, e) - "" + null } } - fun fetchLoaderHash(token: String, hash: String, minecraftVersion: String): String { - return httpsGet( - BACKEND_HOST, - "/api/hash/loader?hash=$hash&minecraft_version=$minecraftVersion", - token, - ) - } - private fun logTransportFailure(method: String, url: String, error: Exception) { System.err.println( "[V5] Curl $method failed url=$url curl_error=${error.message ?: error.javaClass.simpleName}", diff --git a/src/main/kotlin/com/v5/loader/internal/V5Loader.kt b/src/main/kotlin/com/v5/loader/internal/V5Loader.kt index 98aba0aa..6bd4e036 100644 --- a/src/main/kotlin/com/v5/loader/internal/V5Loader.kt +++ b/src/main/kotlin/com/v5/loader/internal/V5Loader.kt @@ -12,20 +12,17 @@ import java.net.InetAddress import java.net.ServerSocket import java.net.URI import java.nio.charset.StandardCharsets -import java.nio.file.Files import java.nio.file.Path -import java.nio.file.attribute.PosixFilePermission -import kotlin.io.path.isRegularFile -import kotlin.io.path.readText -import kotlin.io.path.writeText internal object V5Loader { private const val MOD_ID = "ctjs" - private const val DEVELOPER_JAR_NAME = "V5-Loader-DEV.jar" - private val legacyModLoaderName = Regex("V5ModLoader.*\\.jar", RegexOption.IGNORE_CASE) - private val secretLock = Any() + private const val DEVELOPER_JAR_PREFIX = "V5-Loader-DEV-" + private const val GITHUB_API_HOST = "api.github.com" + private const val GITHUB_HOST = "github.com" + private const val GITHUB_REPOSITORY = "V5-Client/V5Loader" + private val SHA_256_REGEX = Regex("[a-f0-9]{64}") + private val RELEASE_TAG_REGEX = Regex("[A-Za-z0-9._-]+") private var initialized = false - private var sessionToken = "" @JvmStatic @Synchronized @@ -34,81 +31,65 @@ internal object V5Loader { val fabricLoader = FabricLoader.getInstance() val gameDirPath = fabricLoader.gameDir.toAbsolutePath().toString() - System.setProperty("v5.game_dir", gameDirPath) System.setProperty("v5.minecraft_version", fabricLoader.rawGameVersion) - val sessionFilePath = buildSessionFilePath(gameDirPath) val minecraftVersion = resolveMinecraftVersion() println("[V5] Using Minecraft version for loader: $minecraftVersion") - println("[V5] Authenticating...") - - val authSession = authenticate(sessionFilePath) - if (authSession == null || !validateAuthStatus(authSession.accessToken)) { - throw IllegalStateException("[V5] Authentication failed, expired, or account is banned.") - } - - synchronized(secretLock) { sessionToken = authSession.accessToken } if (FabricLoader.getInstance().isDevelopmentEnvironment) { println("[V5] Development environment detected; skipping self-update check.") initialized = true return } - checkSelfUpdate(authSession.accessToken, minecraftVersion, File(gameDirPath)) + checkSelfUpdate(minecraftVersion, File(gameDirPath)) initialized = true } @JvmStatic - fun consumeToken(): String { - return synchronized(secretLock) { - val current = sessionToken - sessionToken = "" - current + @Synchronized + fun authenticate(): String? { + println("[V5] Authenticating...") + val sessionPath = sessionFile(FabricLoader.getInstance().gameDir) + val authSession = authenticateSession(sessionPath) + if (authSession == null || !validateAuthStatus(authSession)) { + System.err.println("[V5] Authentication failed, expired, or account is banned.") + return null } + return authSession } - private fun checkSelfUpdate(token: String, minecraftVersion: String, gameDir: File) { + private fun checkSelfUpdate(minecraftVersion: String, gameDir: File) { val activeJar = resolveActiveJar() - if (activeJar.name == DEVELOPER_JAR_NAME) { + if (activeJar.name.startsWith(DEVELOPER_JAR_PREFIX) && activeJar.extension.equals("jar", ignoreCase = true)) { println("[V5] Developer jar detected; skipping integrity check.") return } - val legacyModLoaders = File(gameDir, "mods").listFiles() - ?.filter { it.isFile && legacyModLoaderName.matches(it.name) } - .orEmpty() val hash = V5Crypto.calculateFileSha256(activeJar.absolutePath) if (hash.isEmpty()) throw IllegalStateException("[V5] Failed to hash active loader jar: ${activeJar.absolutePath}") - val response = V5Http.fetchLoaderHash(token, hash, minecraftVersion) - val integrity = parseJsonObject(response)?.getStringOrNull("integrity")?.lowercase() - ?: throw IllegalStateException("[V5] Loader integrity check failed.") - - when (integrity) { - "valid" -> if (legacyModLoaders.isEmpty()) { - println("[V5] V5-Loader integrity verified.") - } else { - stageSelfUpdate(token, minecraftVersion, gameDir, activeJar, legacyModLoaders) - } - "outdated" -> stageSelfUpdate(token, minecraftVersion, gameDir, activeJar, legacyModLoaders) - "invalid" -> throw IllegalStateException("[V5] V5-Loader integrity is invalid; refusing to run a modified jar.") - else -> throw IllegalStateException("[V5] Unknown V5-Loader integrity state: $integrity") + val release = getLatestReleaseAsset(minecraftVersion) + if (hash == release.expectedHash) { + println("[V5] V5-Loader integrity verified.") + return } + + stageSelfUpdate(gameDir, activeJar, release) } private fun stageSelfUpdate( - token: String, - minecraftVersion: String, gameDir: File, activeJar: File, - legacyModLoaders: List + release: ReleaseAsset, ): Nothing { val bytes = V5Http.httpsGetBytes( - V5Http.BACKEND_HOST, - "/api/download/loader?minecraft_version=$minecraftVersion", - token, - ) ?: throw IllegalStateException("[V5] Failed to download updated V5-Loader.jar.") + GITHUB_HOST, + "/$GITHUB_REPOSITORY/releases/download/${release.tag}/${release.assetName}", + ) ?: throw IllegalStateException("[V5] Failed to download ${release.assetName} from GitHub.") try { - ModLoaderUpdater.stageUpdateAndRelaunch(gameDir, bytes, listOf(activeJar) + legacyModLoaders) + if (bytes.size.toLong() != release.expectedSize || V5Crypto.calculateSha256(bytes) != release.expectedHash) { + throw IllegalStateException("[V5] GitHub workflow download failed integrity verification; refusing to install it.") + } + ModLoaderUpdater.stageUpdateAndRelaunch(gameDir, bytes, listOf(activeJar)) println("[V5] V5-Loader update staged. Closing Minecraft now so the helper can swap jars.") } finally { bytes.fill(0) @@ -118,6 +99,25 @@ internal object V5Loader { throw IllegalStateException("Failed to terminate process after staging V5-Loader update") } + private fun getLatestReleaseAsset(minecraftVersion: String): ReleaseAsset { + val assetName = "V5-Loader-$minecraftVersion.jar" + val release = parseJsonObject(V5Http.httpsGet(GITHUB_API_HOST, "/repos/$GITHUB_REPOSITORY/releases/latest")) + ?: throw IllegalStateException("[V5] Failed to read the latest GitHub workflow release.") + val tag = release.getStringOrNull("tag_name")?.takeIf(RELEASE_TAG_REGEX::matches) + ?: throw IllegalStateException("[V5] Latest loader release has an invalid tag.") + val asset = release.getAsJsonArray("assets") + ?.mapNotNull { it.takeIf { element -> element.isJsonObject }?.asJsonObject } + ?.singleOrNull { it.getStringOrNull("name") == assetName } + ?: throw IllegalStateException("[V5] Latest GitHub workflow release does not contain $assetName.") + val expectedHash = asset.getStringOrNull("digest") + ?.removePrefix("sha256:") + ?.takeIf(SHA_256_REGEX::matches) + ?: throw IllegalStateException("[V5] GitHub did not provide a valid SHA-256 digest for $assetName.") + val expectedSize = asset.getLongOrNull("size")?.takeIf { it > 0 } + ?: throw IllegalStateException("[V5] GitHub did not provide a valid size for $assetName.") + return ReleaseAsset(assetName, tag, expectedHash, expectedSize) + } + private fun resolveActiveJar(): File { val container = FabricLoader.getInstance().getModContainer(MOD_ID) .orElseThrow { IllegalStateException("[V5] Could not resolve active $MOD_ID mod container.") } @@ -141,15 +141,12 @@ internal object V5Loader { ?.takeIf { it.isFile && it.extension.equals("jar", ignoreCase = true) } } - private fun authenticate(sessionFilePath: String): AuthSession? { - val storedRefreshToken = readRefreshTokenFromSessionFile(sessionFilePath) - if (storedRefreshToken.isNotEmpty()) { - exchangeRefreshToken(storedRefreshToken, sessionFilePath)?.let { return it } - } + private fun authenticateSession(sessionFilePath: Path): String? { + refreshSession(sessionFilePath)?.let { return it } return runBrowserLogin(sessionFilePath) } - private fun runBrowserLogin(sessionFilePath: String): AuthSession? { + private fun runBrowserLogin(sessionFilePath: Path): String? { val serverSocket = ServerSocket(0, 1, InetAddress.getByName("127.0.0.1")) serverSocket.soTimeout = 240_000 @@ -179,10 +176,10 @@ internal object V5Loader { val callbackRefreshToken = extractQueryParam(requestLine, "refresh_token=") if (callbackRefreshToken.isEmpty()) return null - if (!writeRefreshTokenToSessionFile(sessionFilePath, callbackRefreshToken)) { + if (!persistRefreshToken(sessionFilePath, callbackRefreshToken)) { System.err.println("[V5] Warning: failed to persist browser refresh token.") } - return exchangeRefreshToken(callbackRefreshToken, sessionFilePath) + return refreshSession(sessionFilePath, callbackRefreshToken) } } catch (e: Exception) { System.err.println("[V5] Authentication callback failed: ${e.message ?: e.javaClass.simpleName}") @@ -192,25 +189,6 @@ internal object V5Loader { } } - private fun exchangeRefreshToken(refreshToken: String, sessionFilePath: String): AuthSession? { - val response = V5Http.httpsPost( - V5Http.BACKEND_HOST, - "/api/auth/refresh", - """{"refresh_token":"${jsonEscape(refreshToken)}"}""", - ) - if (response.isEmpty()) return null - val json = parseJsonObject(response) ?: return null - val accessToken = json.getStringOrNull("access_token").orEmpty() - val rotatedRefresh = json.getStringOrNull("refresh_token").orEmpty() - val error = json.getStringOrNull("error").orEmpty() - if (accessToken.isEmpty() || rotatedRefresh.isEmpty()) { - if (error in REVOKED_REFRESH_ERRORS) secureDeleteFile(sessionFilePath) - return null - } - writeRefreshTokenToSessionFile(sessionFilePath, rotatedRefresh) - return AuthSession(accessToken) - } - private fun validateAuthStatus(token: String): Boolean { val authStatus = V5Http.httpsGet(V5Http.BACKEND_HOST, "/api/authstatus", token) if (authStatus.isEmpty()) return false @@ -221,38 +199,6 @@ internal object V5Loader { private fun resolveMinecraftVersion(): String = System.getProperty("v5.minecraft_version").orEmpty().trim() - private fun buildSessionFilePath(gameDir: String): String = - if (gameDir.isEmpty()) "" else Path.of(gameDir, ".v5", "session.json").toString() - - private fun readRefreshTokenFromSessionFile(sessionFilePath: String): String { - if (sessionFilePath.isEmpty()) return "" - val path = Path.of(sessionFilePath) - if (!path.isRegularFile()) return "" - return runCatching { - parseJsonObject(path.readText())?.getStringOrNull("refresh_token").orEmpty().trim() - }.getOrDefault("") - } - - private fun writeRefreshTokenToSessionFile(sessionFilePath: String, refreshToken: String): Boolean { - if (sessionFilePath.isEmpty() || refreshToken.isEmpty()) return false - val filePath = Path.of(sessionFilePath) - runCatching { Files.createDirectories(filePath.parent) } - val content = """{"refresh_token":"${jsonEscape(refreshToken)}","updated_at":${System.currentTimeMillis() / 1000}}""" - return try { - filePath.writeText(content) - if (!System.getProperty("os.name", "").lowercase().contains("win")) { - Files.setPosixFilePermissions(filePath, setOf(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)) - } - true - } catch (_: Exception) { - false - } - } - - private fun secureDeleteFile(path: String) { - if (path.isNotEmpty()) runCatching { Files.deleteIfExists(Path.of(path)) } - } - private fun openBrowser(url: String) { runCatching { if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { @@ -283,21 +229,6 @@ internal object V5Loader { return java.net.URLDecoder.decode(requestLine.substring(valueStart, end), StandardCharsets.UTF_8) } - private fun jsonEscape(input: String): String = buildString(input.length + 8) { - input.forEach { ch -> - when (ch) { - '"' -> append("\\\"") - '\\' -> append("\\\\") - '\b' -> append("\\b") - '\u000C' -> append("\\f") - '\n' -> append("\\n") - '\r' -> append("\\r") - '\t' -> append("\\t") - else -> if (ch.code < 0x20) append(String.format("\\u%04x", ch.code)) else append(ch) - } - } - } - private fun parseJsonObject(json: String): JsonObject? = runCatching { JsonParser.parseString(json).asJsonObject }.getOrNull() private fun JsonObject.getStringOrNull(key: String): String? = @@ -306,15 +237,16 @@ internal object V5Loader { private fun JsonObject.getBoolOrNull(key: String): Boolean? = get(key)?.takeIf { it.isJsonPrimitive && it.asJsonPrimitive.isBoolean }?.asBoolean + private fun JsonObject.getLongOrNull(key: String): Long? = + runCatching { get(key)?.takeIf { it.isJsonPrimitive }?.asLong }.getOrNull() + private fun JsonObject.getAsJsonObjectOrNull(key: String): JsonObject? = get(key)?.takeIf { it.isJsonObject }?.asJsonObject - private data class AuthSession(val accessToken: String) - - private val REVOKED_REFRESH_ERRORS = setOf( - "INVALID_REFRESH_TOKEN", - "REFRESH_TOKEN_EXPIRED", - "REFRESH_TOKEN_REUSED", - "SESSION_REVOKED", + private data class ReleaseAsset( + val assetName: String, + val tag: String, + val expectedHash: String, + val expectedSize: Long, ) } diff --git a/src/main/kotlin/com/v5/loader/internal/V5Session.kt b/src/main/kotlin/com/v5/loader/internal/V5Session.kt new file mode 100644 index 00000000..e2f19c6e --- /dev/null +++ b/src/main/kotlin/com/v5/loader/internal/V5Session.kt @@ -0,0 +1,69 @@ +package com.v5.loader.internal + +import com.google.gson.JsonObject +import com.google.gson.JsonParser +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.attribute.PosixFilePermission +import kotlin.io.path.isRegularFile +import kotlin.io.path.readText +import kotlin.io.path.writeText + +private val revokedRefreshErrors = setOf( + "INVALID_REFRESH_TOKEN", + "REFRESH_TOKEN_EXPIRED", + "REFRESH_TOKEN_REUSED", + "SESSION_REVOKED", +) + +internal fun sessionFile(gameDir: Path): Path = gameDir.resolve(".v5/session.json") + +internal fun readRefreshToken(sessionFile: Path): String? { + if (!sessionFile.isRegularFile()) return null + return runCatching { + JsonParser.parseString(sessionFile.readText()).asJsonObject["refresh_token"] + ?.takeIf { it.isJsonPrimitive && it.asJsonPrimitive.isString } + ?.asString + ?.trim() + ?.ifBlank { null } + }.getOrNull() +} + +internal fun persistRefreshToken(sessionFile: Path, refreshToken: String): Boolean { + if (refreshToken.isBlank()) return false + return try { + Files.createDirectories(sessionFile.parent) + sessionFile.writeText(JsonObject().apply { + addProperty("refresh_token", refreshToken) + addProperty("updated_at", System.currentTimeMillis() / 1000) + }.toString()) + if (!System.getProperty("os.name", "").lowercase().contains("win")) { + Files.setPosixFilePermissions( + sessionFile, + setOf(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE), + ) + } + true + } catch (_: Exception) { + false + } +} + +internal fun refreshSession(sessionFile: Path, refreshToken: String? = readRefreshToken(sessionFile)): String? { + if (refreshToken.isNullOrBlank()) return null + val request = JsonObject().apply { addProperty("refresh_token", refreshToken) }.toString() + val (status, body) = V5Http.httpsPost(V5Http.BACKEND_HOST, "/api/auth/refresh", request) ?: return null + val response = runCatching { JsonParser.parseString(body).asJsonObject }.getOrNull() ?: return null + val error = response["error"]?.takeIf { it.isJsonPrimitive }?.asString.orEmpty() + val accessToken = response["access_token"]?.takeIf { it.isJsonPrimitive }?.asString + ?: response["token"]?.takeIf { it.isJsonPrimitive }?.asString + val rotatedRefreshToken = response["refresh_token"]?.takeIf { it.isJsonPrimitive }?.asString + + if (status != 200 || accessToken.isNullOrBlank() || rotatedRefreshToken.isNullOrBlank()) { + if (error in revokedRefreshErrors) runCatching { Files.deleteIfExists(sessionFile) } + return null + } + + persistRefreshToken(sessionFile, rotatedRefreshToken) + return accessToken +} diff --git a/src/main/resources/assets/ctjs/js/moduleProvidedLibs.js b/src/main/resources/assets/ctjs/js/moduleProvidedLibs.js index 3c2fac41..09c95223 100644 --- a/src/main/resources/assets/ctjs/js/moduleProvidedLibs.js +++ b/src/main/resources/assets/ctjs/js/moduleProvidedLibs.js @@ -38,9 +38,8 @@ global.Priority = Java.class("com.chattriggers.ctjs.api.triggers.Trigger").Priority; global.Console = Java.type("com.chattriggers.ctjs.engine.Console").INSTANCE; + global.Render2D = Java.class("com.chattriggers.ctjs.api.render.Render2D").INSTANCE; const JSErrorReporter = Java.type("com.chattriggers.ctjs.internal.engine.JSErrorReporter").INSTANCE; - global.NVG = Java.class("com.chattriggers.ctjs.api.render.NVGRenderer").INSTANCE; - global.cancel = event => { if (event instanceof CancellableEvent) { event.setCanceled(true); @@ -80,7 +79,7 @@ return easeOut(this, to, speed, jump); }; - global.easeColor = (start, finish, speed, jump) => Renderer.getColor( + global.easeColor = (start, finish, speed, jump) => Render2D.getColor( easeOut((start >> 16) & 0xFF, (finish >> 16) & 0xFF, speed, jump), easeOut((start >> 8) & 0xFF, (finish >> 8) & 0xFF, speed, jump), easeOut(start & 0xFF, finish & 0xFF, speed, jump), diff --git a/src/main/resources/assets/v5/natives/linux/x86_64/V5PathJNI.so b/src/main/resources/assets/v5/natives/linux/x86_64/V5PathJNI.so index 2ceca39f..39a1ddc6 100644 Binary files a/src/main/resources/assets/v5/natives/linux/x86_64/V5PathJNI.so and b/src/main/resources/assets/v5/natives/linux/x86_64/V5PathJNI.so differ diff --git a/src/main/resources/assets/v5/natives/macos/arm64/V5PathJNI.dylib b/src/main/resources/assets/v5/natives/macos/arm64/V5PathJNI.dylib index 35ccdc05..7ff4ab14 100755 Binary files a/src/main/resources/assets/v5/natives/macos/arm64/V5PathJNI.dylib and b/src/main/resources/assets/v5/natives/macos/arm64/V5PathJNI.dylib differ diff --git a/src/main/resources/assets/v5/natives/macos/x86_64/V5PathJNI.dylib b/src/main/resources/assets/v5/natives/macos/x86_64/V5PathJNI.dylib index 5d156977..66da1f81 100644 Binary files a/src/main/resources/assets/v5/natives/macos/x86_64/V5PathJNI.dylib and b/src/main/resources/assets/v5/natives/macos/x86_64/V5PathJNI.dylib differ diff --git a/src/main/resources/assets/v5/natives/windows/x86_64/V5PathJNI.dll b/src/main/resources/assets/v5/natives/windows/x86_64/V5PathJNI.dll index 218616e3..4b14f911 100644 Binary files a/src/main/resources/assets/v5/natives/windows/x86_64/V5PathJNI.dll and b/src/main/resources/assets/v5/natives/windows/x86_64/V5PathJNI.dll differ diff --git a/src/main/resources/ctjs.mixins.json b/src/main/resources/ctjs.mixins.json index 8745973f..34f3a5f9 100644 --- a/src/main/resources/ctjs.mixins.json +++ b/src/main/resources/ctjs.mixins.json @@ -9,6 +9,7 @@ "BlockEntityRenderStateMixin", "BookViewScreenAccessor", "BossHealthOverlayAccessor", + "CameraMixin", "ChatComponentAccessor", "ChatComponentMixin", "ChatScreenAccessor", @@ -20,16 +21,28 @@ "MultiPlayerGameModeMixin", "ClientPacketListenerAccessor", "ClientLevelAccessor", + "ConnectionProxyMixin", "CreativeModeInventoryScreenMixin", + "CrossCollisionBlockMixin", + "EntityRendererMixin", "EntityRenderDispatcherMixin", "EntityRenderStateMixin", + "FirmamentModAnnouncerMixin", + "FontMixin", + "FramerateLimitTrackerMixin", + "FrustumMixin", "OptionsAccessor", "OptionsMixin", "AbstractContainerScreenAccessor", "AbstractContainerScreenMixin", - "GuiMixin", + "@version_mixins@", + "GuiGraphicsExtractorMixin", + "GuiRendererMixin", + "ItemInHandRendererMixin", + "JoinMultiplayerScreenMixin", "KeyMappingAccessor", "KeyMappingAccessor$Category", + "KeyboardHandlerMixin", "MinecraftAccessor", "MinecraftMixin", "MouseHandlerMixin", @@ -39,7 +52,8 @@ "PlayerTabOverlayAccessor", "PlayerTabOverlayMixin", "RenderTickCounterMixin", - "LevelRendererMixin", + "VisGraphMixin", + "YggdrasilServicesKeyInfoMixin", "commands.ClientSuggestionProviderMixin", "commands.ClientPacketListenerMixin", "sound.SoundAccessor", @@ -67,7 +81,6 @@ "commands.CommandContextAccessor", "commands.CommandDispatcherMixin", "commands.CommandNodeAccessor", - "commands.EntitySelectorAccessor", "stdio.BootstrapMixin", "stdio.LoggedPrintStreamMixin" ] diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 2e573bd0..e6b645d9 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -4,18 +4,19 @@ "name": "V5", "version": "$version", "description": "A ChatTriggers fork that supports additional features.", - "authors": ["Zurviq, rdbt, EpsilonPhoenix"], + "authors": ["rdbt", "EpsilonPhoenix", "Zurviq"], "contributors": ["Oblongboot", "Nathan", "IcyHenryT"], "icon": "assets/v5/icon.png", - "license": ["GPL-3.0."], + "license": ["GPL-3.0"], "contact": { "homepage": "https://rdbt.top/", - "sources": "https://discord.gg/RvQJq7vE3a", - "issues": "https://discord.gg/RvQJq7vE3a" + "sources": "https://github.com/V5-Client/V5", + "issues": "https://github.com/V5-Client/V5/issues" }, "environment": "client", "entrypoints": { "preLaunch": [ + "com.chattriggers.ctjs.api.render.skia.SkijaBootstrap", { "value": "com.v5.loader.V5PreLaunch", "adapter": "kotlin" @@ -27,24 +28,13 @@ "com.chattriggers.ctjs.api.world.pathfinding.Swift" ] }, - "mixins": ["ctjs.mixins.json", "v5.mixins.json"], + "mixins": ["ctjs.mixins.json"], "depends": { "minecraft": "=$minecraft_version", "fabricloader": ">=$loader_version", "fabric-api": ">=$fabric_api_version", - "fabric-language-kotlin": ">=$fabric_kotlin_version", - "hypixel-mod-api": ">=1.0.2" - }, - "breaks": { - "stfu": "*", - "nvidium": "*" - }, - "custom": { - "modmenu": { - "links": { - "modmenu.discord": "https://discord.gg/RvQJq7vE3a" - } - } + "fabric-language-kotlin": ">=$fabric_kotlin_version" }, + "breaks": {}, "accessWidener": "ctjs.accesswidener" } diff --git a/src/main/resources/v5.mixins.json b/src/main/resources/v5.mixins.json deleted file mode 100644 index 5072efc7..00000000 --- a/src/main/resources/v5.mixins.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "com.v5.mixins", - "compatibilityLevel": "JAVA_25", - "client": [ - "BlockMixin", - "CameraMixin", - "ChatComponentMixin", - "ConnectionProxyMixin", - "CrossCollisionBlockMixin", - "DrawContextCapture", - "EntityRendererMixin", - "FirmamentModAnnouncerMixin", - "FramerateLimitTrackerMixin", - "FrustumMixin", - "GameRendererMixin", - "GuiGraphicsExtractorMixin", - "ItemInHandRendererMixin", - "KeyboardHandlerMixin", - "MinecraftMixin", - "MouseHandlerMixin", - "JoinMultiplayerScreenMixin", - "LevelRendererMixin", - "VisGraphMixin", - "YggdrasilServicesKeyInfoMixin" - ], - "mixins": [ - "ConnectionMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts new file mode 100644 index 00000000..a40f8f85 --- /dev/null +++ b/stonecutter.gradle.kts @@ -0,0 +1,6 @@ +plugins { + id("dev.kikugie.stonecutter") + alias(libs.plugins.kotlin) apply false +} + +stonecutter active "26.2" diff --git a/stonecutter.properties.toml b/stonecutter.properties.toml new file mode 100644 index 00000000..fc0c21a7 --- /dev/null +++ b/stonecutter.properties.toml @@ -0,0 +1,5 @@ +["26.1.2"] +deps.fabric_api = "0.153.0+26.1.2" + +["26.2"] +deps.fabric_api = "0.153.0+26.2" diff --git a/typing-generator/build.gradle.kts b/typing-generator/build.gradle.kts index 34ec3c30..ab930b1b 100644 --- a/typing-generator/build.gradle.kts +++ b/typing-generator/build.gradle.kts @@ -3,15 +3,7 @@ plugins { } kotlin { - kotlin { - jvmToolchain(21) - } -} - -buildscript { - dependencies { - classpath(libs.gradle.plugin) - } + jvmToolchain(21) } repositories { diff --git a/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/Provider.kt b/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/Provider.kt index ce8de00c..acbe4dc0 100644 --- a/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/Provider.kt +++ b/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/Provider.kt @@ -37,12 +37,10 @@ class Processor(environment: SymbolProcessorEnvironment) : SymbolProcessor { } private fun collectRoots(resolver: Resolver): Set { - val manualRootDeclarations = manualRoots + return manualRoots .map(resolver::getKSNameFromString) .mapNotNull(resolver::getClassDeclarationByName) - .toSet() - - return manualRootDeclarations + resolver.getAllFiles().flatMap { + .toSet() + resolver.getAllFiles().flatMap { dependentFiles.add(it) it.declarations.filter { decl -> @@ -107,7 +105,7 @@ class Processor(environment: SymbolProcessorEnvironment) : SymbolProcessor { return pkg.split(".").fold(root) { p, name -> if (name in typescriptReservedWords) return null - p.getPackage(name) + p.subpackages.getOrPut(name) { Package(p, name) } } } @@ -255,7 +253,7 @@ class Processor(environment: SymbolProcessorEnvironment) : SymbolProcessor { // If this is a functional interface, output a call method if (clazz.isAnnotationPresent(FunctionalInterface::class)) { - val functionalMethod = getFunctionalInterfaceMethod(clazz) + val functionalMethod = clazz.getDeclaredFunctions().firstOrNull { it.isPublic() && it.isAbstract } if (functionalMethod != null) { buildFunction(functionalMethod, resolver, omitName = true) } @@ -461,10 +459,6 @@ class Processor(environment: SymbolProcessorEnvironment) : SymbolProcessor { .write(builder.toString().toByteArray()) } - private fun getFunctionalInterfaceMethod(clazz: KSClassDeclaration): KSFunctionDeclaration? { - return clazz.getDeclaredFunctions().firstOrNull { it.isPublic() && it.isAbstract } - } - private val classNameCache = mutableMapOf() private val KSClassDeclaration.name: String get() = classNameCache.getOrPut(this) { @@ -500,17 +494,11 @@ class Processor(environment: SymbolProcessorEnvironment) : SymbolProcessor { val subpackages = mutableMapOf() val classes = mutableMapOf() - fun getPackage(name: String): Package { - return subpackages.getOrPut(name) { Package(this, name) } - } - fun path() = generateSequence(this, Package::parent) .toList() .asReversed() .drop(1) // Ignore the root package .joinToString(".", transform = Package::name) - - override fun toString() = "Package(${path()})" } companion object { diff --git a/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/prologue.kt b/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/prologue.kt index 14996d9d..79a69e4b 100644 --- a/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/prologue.kt +++ b/typing-generator/src/main/kotlin/com/chattriggers/ctjs/typing/prologue.kt @@ -6,23 +6,6 @@ val manualRoots = setOf( "java.util.HashMap", "gg.essential.universal.UKeyboard", "net.minecraft.util.Hand", - "org.lwjgl.opengl.GL11", - "org.lwjgl.opengl.GL12", - "org.lwjgl.opengl.GL13", - "org.lwjgl.opengl.GL14", - "org.lwjgl.opengl.GL15", - "org.lwjgl.opengl.GL20", - "org.lwjgl.opengl.GL21", - "org.lwjgl.opengl.GL30", - "org.lwjgl.opengl.GL31", - "org.lwjgl.opengl.GL32", - "org.lwjgl.opengl.GL33", - "org.lwjgl.opengl.GL40", - "org.lwjgl.opengl.GL41", - "org.lwjgl.opengl.GL42", - "org.lwjgl.opengl.GL43", - "org.lwjgl.opengl.GL44", - "org.lwjgl.opengl.GL45", "org.spongepowered.asm.mixin.injection.callback.CallbackInfo", ) diff --git a/typing-generator/src/main/resources/provided-types.properties b/typing-generator/src/main/resources/provided-types.properties index 6ab6aa16..7e0f2247 100644 --- a/typing-generator/src/main/resources/provided-types.properties +++ b/typing-generator/src/main/resources/provided-types.properties @@ -7,7 +7,6 @@ KeyBind=com.chattriggers.ctjs.api.client.KeyBind MathLib=com.chattriggers.ctjs.api.client.MathLib Player=com.chattriggers.ctjs.api.client.Player Sound=com.chattriggers.ctjs.api.client.Sound -WelcomeScreen=com.chattriggers.ctjs.api.client.WelcomeScreen Commands=com.chattriggers.ctjs.api.commands.DynamicCommands BlockEntity=com.chattriggers.ctjs.api.entity.BlockEntity Entity=com.chattriggers.ctjs.api.entity.Entity @@ -36,13 +35,11 @@ Display=com.chattriggers.ctjs.api.render.Display Gui=com.chattriggers.ctjs.api.render.Gui Image=com.chattriggers.ctjs.api.render.Image Rectangle=com.chattriggers.ctjs.api.render.Rectangle -Renderer=com.chattriggers.ctjs.api.render.Renderer -Renderer3d=com.chattriggers.ctjs.api.render.Renderer3d -Shape=com.chattriggers.ctjs.api.render.Shape +Render2D=com.chattriggers.ctjs.api.render.Render2D Text=com.chattriggers.ctjs.api.render.Text Toast=com.chattriggers.ctjs.api.render.Toast -RenderUtils=com.chattriggers.ctjs.api.render.RenderUtils -RenderColor=com.chattriggers.ctjs.api.render.RenderUtils$Color +Render3D=com.chattriggers.ctjs.api.render.Render3D +RenderColor=com.chattriggers.ctjs.api.render.Render3D$Color CancellableEvent=com.chattriggers.ctjs.api.triggers.CancellableEvent Vec2f=com.chattriggers.ctjs.api.vec.Vec2f Vec3f=com.chattriggers.ctjs.api.vec.Vec3f @@ -61,9 +58,9 @@ TabList=com.chattriggers.ctjs.api.world.TabList World=com.chattriggers.ctjs.api.world.World Config=com.chattriggers.ctjs.api.Config V5Auth=com.chattriggers.ctjs.api.V5Auth +V5Irc=com.chattriggers.ctjs.api.V5Irc DiscordRPC=com.chattriggers.ctjs.api.client.DiscordRPC GradientChat=com.chattriggers.ctjs.api.message.Chat -NVG=com.chattriggers.ctjs.api.render.NVGRenderer StructureFinder=com.chattriggers.ctjs.api.world.StructureFinder PathManager=com.chattriggers.ctjs.api.world.pathfinding.PathManager TriggerRegister=com.chattriggers.ctjs.engine.Register @@ -71,20 +68,3 @@ Thread=com.chattriggers.ctjs.engine.WrappedThread Priority=com.chattriggers.ctjs.api.triggers.Trigger$Priority ChatTriggers=com.chattriggers.ctjs.CTJS Console=com.chattriggers.ctjs.engine.Console -GL11=org.lwjgl.opengl.GL11 -GL12=org.lwjgl.opengl.GL12 -GL13=org.lwjgl.opengl.GL13 -GL14=org.lwjgl.opengl.GL14 -GL15=org.lwjgl.opengl.GL15 -GL20=org.lwjgl.opengl.GL20 -GL21=org.lwjgl.opengl.GL21 -GL30=org.lwjgl.opengl.GL30 -GL31=org.lwjgl.opengl.GL31 -GL32=org.lwjgl.opengl.GL32 -GL33=org.lwjgl.opengl.GL33 -GL40=org.lwjgl.opengl.GL40 -GL41=org.lwjgl.opengl.GL41 -GL42=org.lwjgl.opengl.GL42 -GL43=org.lwjgl.opengl.GL43 -GL44=org.lwjgl.opengl.GL44 -GL45=org.lwjgl.opengl.GL45 diff --git a/typing-generator/src/main/resources/typings.d.ts b/typing-generator/src/main/resources/typings.d.ts index 06fac4d6..9f8f1425 100644 --- a/typing-generator/src/main/resources/typings.d.ts +++ b/typing-generator/src/main/resources/typings.d.ts @@ -102,8 +102,6 @@ declare global { interface Player extends com.chattriggers.ctjs.api.client.Player {} const Sound: typeof com.chattriggers.ctjs.api.client.Sound; interface Sound extends com.chattriggers.ctjs.api.client.Sound {} - const WelcomeScreen: typeof com.chattriggers.ctjs.api.client.WelcomeScreen; - interface WelcomeScreen extends com.chattriggers.ctjs.api.client.WelcomeScreen {} const Commands: typeof com.chattriggers.ctjs.api.commands.DynamicCommands; interface Commands extends com.chattriggers.ctjs.api.commands.DynamicCommands {} const BlockEntity: typeof com.chattriggers.ctjs.api.entity.BlockEntity; @@ -160,20 +158,16 @@ declare global { interface Image extends com.chattriggers.ctjs.api.render.Image {} const Rectangle: typeof com.chattriggers.ctjs.api.render.Rectangle; interface Rectangle extends com.chattriggers.ctjs.api.render.Rectangle {} - const Renderer: typeof com.chattriggers.ctjs.api.render.Renderer; - interface Renderer extends com.chattriggers.ctjs.api.render.Renderer {} - const Renderer3d: typeof com.chattriggers.ctjs.api.render.Renderer3d; - interface Renderer3d extends com.chattriggers.ctjs.api.render.Renderer3d {} - const Shape: typeof com.chattriggers.ctjs.api.render.Shape; - interface Shape extends com.chattriggers.ctjs.api.render.Shape {} + const Render2D: typeof com.chattriggers.ctjs.api.render.Render2D; + interface Render2D extends com.chattriggers.ctjs.api.render.Render2D {} const Text: typeof com.chattriggers.ctjs.api.render.Text; interface Text extends com.chattriggers.ctjs.api.render.Text {} const Toast: typeof com.chattriggers.ctjs.api.render.Toast; interface Toast extends com.chattriggers.ctjs.api.render.Toast {} - const RenderUtils: typeof com.chattriggers.ctjs.api.render.RenderUtils; - interface RenderUtils extends com.chattriggers.ctjs.api.render.RenderUtils {} - const RenderColor: typeof com.chattriggers.ctjs.api.render.RenderUtils.Color; - interface RenderColor extends com.chattriggers.ctjs.api.render.RenderUtils.Color {} + const Render3D: typeof com.chattriggers.ctjs.api.render.Render3D; + interface Render3D extends com.chattriggers.ctjs.api.render.Render3D {} + const RenderColor: typeof com.chattriggers.ctjs.api.render.Render3D.Color; + interface RenderColor extends com.chattriggers.ctjs.api.render.Render3D.Color {} const CancellableEvent: typeof com.chattriggers.ctjs.api.triggers.CancellableEvent; interface CancellableEvent extends com.chattriggers.ctjs.api.triggers.CancellableEvent {} const Vec2f: typeof com.chattriggers.ctjs.api.vec.Vec2f; @@ -210,12 +204,12 @@ declare global { interface Config extends com.chattriggers.ctjs.api.Config {} const V5Auth: typeof com.chattriggers.ctjs.api.V5Auth; interface V5Auth extends com.chattriggers.ctjs.api.V5Auth {} + const V5Irc: typeof com.chattriggers.ctjs.api.V5Irc; + interface V5Irc extends com.chattriggers.ctjs.api.V5Irc {} const DiscordRPC: typeof com.chattriggers.ctjs.api.client.DiscordRPC; interface DiscordRPC extends com.chattriggers.ctjs.api.client.DiscordRPC {} const GradientChat: typeof com.chattriggers.ctjs.api.message.Chat; interface GradientChat extends com.chattriggers.ctjs.api.message.Chat {} - const NVG: typeof com.chattriggers.ctjs.api.render.NVGRenderer; - interface NVG extends com.chattriggers.ctjs.api.render.NVGRenderer {} const StructureFinder: typeof com.chattriggers.ctjs.api.world.StructureFinder; interface StructureFinder extends com.chattriggers.ctjs.api.world.StructureFinder {} const PathManager: typeof com.chattriggers.ctjs.api.world.pathfinding.PathManager; @@ -230,40 +224,6 @@ declare global { interface ChatTriggers extends com.chattriggers.ctjs.CTJS {} const Console: typeof com.chattriggers.ctjs.engine.Console; interface Console extends com.chattriggers.ctjs.engine.Console {} - const GL11: typeof org.lwjgl.opengl.GL11; - interface GL11 extends org.lwjgl.opengl.GL11 {} - const GL12: typeof org.lwjgl.opengl.GL12; - interface GL12 extends org.lwjgl.opengl.GL12 {} - const GL13: typeof org.lwjgl.opengl.GL13; - interface GL13 extends org.lwjgl.opengl.GL13 {} - const GL14: typeof org.lwjgl.opengl.GL14; - interface GL14 extends org.lwjgl.opengl.GL14 {} - const GL15: typeof org.lwjgl.opengl.GL15; - interface GL15 extends org.lwjgl.opengl.GL15 {} - const GL20: typeof org.lwjgl.opengl.GL20; - interface GL20 extends org.lwjgl.opengl.GL20 {} - const GL21: typeof org.lwjgl.opengl.GL21; - interface GL21 extends org.lwjgl.opengl.GL21 {} - const GL30: typeof org.lwjgl.opengl.GL30; - interface GL30 extends org.lwjgl.opengl.GL30 {} - const GL31: typeof org.lwjgl.opengl.GL31; - interface GL31 extends org.lwjgl.opengl.GL31 {} - const GL32: typeof org.lwjgl.opengl.GL32; - interface GL32 extends org.lwjgl.opengl.GL32 {} - const GL33: typeof org.lwjgl.opengl.GL33; - interface GL33 extends org.lwjgl.opengl.GL33 {} - const GL40: typeof org.lwjgl.opengl.GL40; - interface GL40 extends org.lwjgl.opengl.GL40 {} - const GL41: typeof org.lwjgl.opengl.GL41; - interface GL41 extends org.lwjgl.opengl.GL41 {} - const GL42: typeof org.lwjgl.opengl.GL42; - interface GL42 extends org.lwjgl.opengl.GL42 {} - const GL43: typeof org.lwjgl.opengl.GL43; - interface GL43 extends org.lwjgl.opengl.GL43 {} - const GL44: typeof org.lwjgl.opengl.GL44; - interface GL44 extends org.lwjgl.opengl.GL44 {} - const GL45: typeof org.lwjgl.opengl.GL45; - interface GL45 extends org.lwjgl.opengl.GL45 {} /** @@ -3648,11 +3608,14 @@ declare global { } const Reader: { nullReader(): java.io.Reader; + of(p0: kotlin.CharSequence): java.io.Reader; } interface Reader extends java.lang.Readable, java.io.Closeable { read(): number; read(p0: Array): number; read(p0: Array, p1: number, p2: number): number; + readAllLines(): Array; + readAllAsString(): string; skip(p0: number): number; ready(): boolean; markSupported(): boolean; @@ -3797,6 +3760,7 @@ declare global { reduce(p0: T, p1: unknown): T; reduce(p0: unknown): java.util.Optional; reduce(p0: U, p1: unknown, p2: unknown): U; + gather(p0: java.util.stream.Gatherer): java.util.stream.Stream; collect(p0: unknown, p1: unknown, p2: unknown): R; collect(p0: java.util.stream.Collector): R; toList(): Array; @@ -3981,6 +3945,40 @@ declare global { add(p0: number): java.util.stream.IntStream$Builder; build(): java.util.stream.IntStream; } + const Gatherer: { + defaultInitializer(): unknown; + defaultCombiner(): unknown; + defaultFinisher(): unknown; + ofSequential(p0: java.util.stream.Gatherer$Integrator): java.util.stream.Gatherer; + ofSequential(p0: java.util.stream.Gatherer$Integrator, p1: unknown): java.util.stream.Gatherer; + ofSequential(p0: unknown, p1: java.util.stream.Gatherer$Integrator): java.util.stream.Gatherer; + ofSequential(p0: unknown, p1: java.util.stream.Gatherer$Integrator, p2: unknown): java.util.stream.Gatherer; + of(p0: java.util.stream.Gatherer$Integrator): java.util.stream.Gatherer; + of(p0: java.util.stream.Gatherer$Integrator, p1: unknown): java.util.stream.Gatherer; + of(p0: unknown, p1: java.util.stream.Gatherer$Integrator, p2: unknown, p3: unknown): java.util.stream.Gatherer; + } + interface Gatherer { + initializer(): unknown; + integrator(): java.util.stream.Gatherer$Integrator; + combiner(): unknown; + finisher(): unknown; + andThen(p0: java.util.stream.Gatherer): java.util.stream.Gatherer; + } + const Gatherer$Integrator: { + of(p0: java.util.stream.Gatherer$Integrator): java.util.stream.Gatherer$Integrator; + ofGreedy(p0: unknown): unknown; + } + interface Gatherer$Integrator { + integrate(p0: A, p1: T, p2: java.util.stream.Gatherer$Downstream): boolean; + (p0: A, p1: T, p2: java.util.stream.Gatherer$Downstream): boolean; + } + interface Gatherer$Downstream { + push(p0: T): boolean; + isRejecting(): boolean; + (p0: T): boolean; + } + interface Gatherer$Integrator$Greedy extends java.util.stream.Gatherer$Integrator { + } const Collector: { Characteristics: typeof java.util.stream.Collector$Characteristics; of(p0: unknown, p1: unknown, p2: unknown, p3: java.util.stream.Collector$Characteristics): java.util.stream.Collector; @@ -4232,19 +4230,6 @@ declare global { interface Delayed extends kotlin.Comparable { getDelay(p0: java.util.concurrent.TimeUnit): number; } - const CopyOnWriteArrayList: { - new(): java.util.concurrent.CopyOnWriteArrayList; - new(p0: Array): java.util.concurrent.CopyOnWriteArrayList; - new(p0: Array): java.util.concurrent.CopyOnWriteArrayList; - } - interface CopyOnWriteArrayList extends Array, java.util.RandomAccess, kotlin.Cloneable, java.io.Serializable { - indexOf(p0: E, p1: number): number; - lastIndexOf(p0: E, p1: number): number; - toArray(): Array; - toArray(p0: Array): Array; - addIfAbsent(p0: E): boolean; - addAllAbsent(p0: Array): number; - } const ConcurrentHashMap: { KeySetView: typeof java.util.concurrent.ConcurrentHashMap$KeySetView; new(): java.util.concurrent.ConcurrentHashMap; @@ -4298,6 +4283,19 @@ declare global { interface ConcurrentHashMap$KeySetView extends Set, java.io.Serializable { getMappedValue(): V; } + const CopyOnWriteArrayList: { + new(): java.util.concurrent.CopyOnWriteArrayList; + new(p0: Array): java.util.concurrent.CopyOnWriteArrayList; + new(p0: Array): java.util.concurrent.CopyOnWriteArrayList; + } + interface CopyOnWriteArrayList extends Array, java.util.RandomAccess, kotlin.Cloneable, java.io.Serializable { + indexOf(p0: E, p1: number): number; + lastIndexOf(p0: E, p1: number): number; + toArray(): Array; + toArray(p0: Array): Array; + addIfAbsent(p0: E): boolean; + addAllAbsent(p0: Array): number; + } } namespace random { const RandomGenerator: { @@ -4310,6 +4308,7 @@ declare global { doubles(p0: number, p1: number): java.util.stream.DoubleStream; doubles(p0: number): java.util.stream.DoubleStream; doubles(p0: number, p1: number, p2: number): java.util.stream.DoubleStream; + equiDoubles(p0: number, p1: number, p2: boolean, p3: boolean): java.util.stream.DoubleStream; ints(): java.util.stream.IntStream; ints(p0: number, p1: number): java.util.stream.IntStream; ints(p0: number): java.util.stream.IntStream; @@ -4439,6 +4438,82 @@ declare global { isDirectory(): boolean; } } + namespace regex { + const Pattern: { + UNIX_LINES: number; + CASE_INSENSITIVE: number; + COMMENTS: number; + MULTILINE: number; + LITERAL: number; + DOTALL: number; + UNICODE_CASE: number; + CANON_EQ: number; + UNICODE_CHARACTER_CLASS: number; + compile(p0: string): java.util.regex.Pattern; + compile(p0: string, p1: number): java.util.regex.Pattern; + matches(p0: string, p1: kotlin.CharSequence): boolean; + quote(p0: string): string; + } + interface Pattern extends java.io.Serializable { + pattern(): string; + flags(): number; + namedGroups(): Map; + matcher(p0: kotlin.CharSequence): java.util.regex.Matcher; + split(p0: kotlin.CharSequence, p1: number): Array; + split(p0: kotlin.CharSequence): Array; + splitWithDelimiters(p0: kotlin.CharSequence, p1: number): Array; + next(): number; + asPredicate(): unknown; + asMatchPredicate(): unknown; + splitAsStream(p0: kotlin.CharSequence): java.util.stream.Stream; + } + const Matcher: { + quoteReplacement(p0: string): string; + } + interface Matcher extends java.util.regex.MatchResult { + hitEnd(): boolean; + requireEnd(): boolean; + pattern(): java.util.regex.Pattern; + toMatchResult(): java.util.regex.MatchResult; + usePattern(p0: java.util.regex.Pattern): java.util.regex.Matcher; + reset(): java.util.regex.Matcher; + reset(p0: kotlin.CharSequence): java.util.regex.Matcher; + matches(): boolean; + find(): boolean; + find(p0: number): boolean; + lookingAt(): boolean; + appendReplacement(p0: java.lang.StringBuffer, p1: string): java.util.regex.Matcher; + appendReplacement(p0: java.lang.StringBuilder, p1: string): java.util.regex.Matcher; + appendTail(p0: java.lang.StringBuffer): java.lang.StringBuffer; + appendTail(p0: java.lang.StringBuilder): java.lang.StringBuilder; + replaceAll(p0: string): string; + replaceAll(p0: unknown): string; + results(): java.util.stream.Stream; + replaceFirst(p0: string): string; + replaceFirst(p0: unknown): string; + region(p0: number, p1: number): java.util.regex.Matcher; + regionStart(): number; + regionEnd(): number; + hasTransparentBounds(): boolean; + useTransparentBounds(p0: boolean): java.util.regex.Matcher; + hasAnchoringBounds(): boolean; + useAnchoringBounds(p0: boolean): java.util.regex.Matcher; + } + interface MatchResult { + start(): number; + start(p0: number): number; + start(p0: string): number; + end(): number; + end(p0: number): number; + end(p0: string): number; + group(): string; + group(p0: number): string; + group(p0: string): string; + groupCount(): number; + namedGroups(): Map; + hasMatch(): boolean; + } + } const ArrayList: { new(p0: number): java.util.ArrayList; new(): java.util.ArrayList; @@ -4799,10 +4874,42 @@ declare global { nextElement(): E; asIterator(): kotlin.collections.MutableIterator; } + interface SortedMap extends java.util.SequencedMap { + comparator(): java.util.Comparator; + subMap(p0: K, p1: K): java.util.SortedMap; + headMap(p0: K): java.util.SortedMap; + tailMap(p0: K): java.util.SortedMap; + firstKey(): K; + lastKey(): K; + } + interface SequencedMap extends Map { + reversed(): java.util.SequencedMap; + firstEntry(): kotlin.collections.MutableMap$MutableEntry; + lastEntry(): kotlin.collections.MutableMap$MutableEntry; + pollFirstEntry(): kotlin.collections.MutableMap$MutableEntry; + pollLastEntry(): kotlin.collections.MutableMap$MutableEntry; + putFirst(p0: K, p1: V): V; + putLast(p0: K, p1: V): V; + sequencedKeySet(): java.util.SequencedSet; + sequencedValues(): java.util.SequencedCollection; + sequencedEntrySet(): java.util.SequencedSet>; + } + interface SequencedSet extends java.util.SequencedCollection, Set { + } + interface SequencedCollection extends Array { + reversed(): java.util.SequencedCollection; + addFirst(p0: E): void; + addLast(p0: E): void; + getFirst(): E; + getLast(): E; + removeFirst(): E; + removeLast(): E; + } const Currency: { getInstance(p0: string): java.util.Currency; getInstance(p0: java.util.Locale): java.util.Currency; getAvailableCurrencies(): Set; + availableCurrencies(): java.util.stream.Stream; } interface Currency extends java.io.Serializable { getCurrencyCode(): string; @@ -4855,37 +4962,6 @@ declare global { interface Random extends java.util.random.RandomGenerator, java.io.Serializable { setSeed(p0: number): void; } - interface SortedMap extends java.util.SequencedMap { - comparator(): java.util.Comparator; - subMap(p0: K, p1: K): java.util.SortedMap; - headMap(p0: K): java.util.SortedMap; - tailMap(p0: K): java.util.SortedMap; - firstKey(): K; - lastKey(): K; - } - interface SequencedMap extends Map { - reversed(): java.util.SequencedMap; - firstEntry(): kotlin.collections.MutableMap$MutableEntry; - lastEntry(): kotlin.collections.MutableMap$MutableEntry; - pollFirstEntry(): kotlin.collections.MutableMap$MutableEntry; - pollLastEntry(): kotlin.collections.MutableMap$MutableEntry; - putFirst(p0: K, p1: V): V; - putLast(p0: K, p1: V): V; - sequencedKeySet(): java.util.SequencedSet; - sequencedValues(): java.util.SequencedCollection; - sequencedEntrySet(): java.util.SequencedSet>; - } - interface SequencedSet extends java.util.SequencedCollection, Set { - } - interface SequencedCollection extends Array { - reversed(): java.util.SequencedCollection; - addFirst(p0: E): void; - addLast(p0: E): void; - getFirst(): E; - getLast(): E; - removeFirst(): E; - removeLast(): E; - } const BitSet: { new(): java.util.BitSet; new(p0: number): java.util.BitSet; @@ -5072,6 +5148,8 @@ declare global { getTimeZone(p0: java.time.ZoneId): java.util.TimeZone; getAvailableIDs(p0: number): Array; getAvailableIDs(): Array; + availableIDs(p0: number): java.util.stream.Stream; + availableIDs(): java.util.stream.Stream; getDefault(): java.util.TimeZone; setDefault(p0: java.util.TimeZone): void; } @@ -5873,26 +5951,28 @@ declare global { prefixAllocator(p0: java.lang.foreign.MemorySegment): java.lang.foreign.SegmentAllocator; } interface SegmentAllocator { - allocateUtf8String(p0: string): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.ValueLayout$OfByte, p1: number): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.ValueLayout$OfChar, p1: number): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.ValueLayout$OfShort, p1: number): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.ValueLayout$OfInt, p1: number): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.ValueLayout$OfFloat, p1: number): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.ValueLayout$OfLong, p1: number): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.ValueLayout$OfDouble, p1: number): java.lang.foreign.MemorySegment; - allocate(p0: java.lang.foreign.AddressLayout, p1: java.lang.foreign.MemorySegment): java.lang.foreign.MemorySegment; + allocateFrom(p0: string): java.lang.foreign.MemorySegment; + allocateFrom(p0: string, p1: java.nio.charset.Charset): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfByte, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfChar, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfShort, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfInt, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfFloat, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfLong, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfDouble, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.AddressLayout, p1: java.lang.foreign.MemorySegment): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout, p1: java.lang.foreign.MemorySegment, p2: java.lang.foreign.ValueLayout, p3: number, p4: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfByte, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfShort, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfChar, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfInt, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfFloat, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfLong, p1: number): java.lang.foreign.MemorySegment; + allocateFrom(p0: java.lang.foreign.ValueLayout$OfDouble, p1: number): java.lang.foreign.MemorySegment; allocate(p0: java.lang.foreign.MemoryLayout): java.lang.foreign.MemorySegment; + allocate(p0: java.lang.foreign.MemoryLayout, p1: number): java.lang.foreign.MemorySegment; allocate(p0: number): java.lang.foreign.MemorySegment; allocate(p0: number, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.ValueLayout$OfByte, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.ValueLayout$OfShort, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.ValueLayout$OfChar, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.ValueLayout$OfInt, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.ValueLayout$OfFloat, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.ValueLayout$OfLong, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.ValueLayout$OfDouble, p1: number): java.lang.foreign.MemorySegment; - allocateArray(p0: java.lang.foreign.MemoryLayout, p1: number): java.lang.foreign.MemorySegment; (p0: number, p1: number): java.lang.foreign.MemorySegment; } const MemorySegment: { @@ -5920,6 +6000,7 @@ declare global { scope(): java.lang.foreign.MemorySegment$Scope; isAccessibleBy(p0: java.lang.Thread): boolean; byteSize(): number; + maxByteAlignment(): number; asSlice(p0: number, p1: number): java.lang.foreign.MemorySegment; asSlice(p0: number, p1: number, p2: number): java.lang.foreign.MemorySegment; asSlice(p0: number, p1: java.lang.foreign.MemoryLayout): java.lang.foreign.MemorySegment; @@ -5932,7 +6013,6 @@ declare global { isNative(): boolean; isMapped(): boolean; asOverlappingSlice(p0: java.lang.foreign.MemorySegment): java.util.Optional; - segmentOffset(p0: java.lang.foreign.MemorySegment): number; fill(p0: number): java.lang.foreign.MemorySegment; copyFrom(p0: java.lang.foreign.MemorySegment): java.lang.foreign.MemorySegment; mismatch(p0: java.lang.foreign.MemorySegment): number; @@ -5948,8 +6028,10 @@ declare global { toArray(p0: java.lang.foreign.ValueLayout$OfFloat): kotlin.FloatArray; toArray(p0: java.lang.foreign.ValueLayout$OfLong): Array; toArray(p0: java.lang.foreign.ValueLayout$OfDouble): kotlin.DoubleArray; - getUtf8String(p0: number): string; - setUtf8String(p0: number, p1: string): void; + getString(p0: number): string; + getString(p0: number, p1: java.nio.charset.Charset): string; + setString(p0: number, p1: string): void; + setString(p0: number, p1: string, p2: java.nio.charset.Charset): void; get(p0: java.lang.foreign.ValueLayout$OfByte, p1: number): number; get(p0: java.lang.foreign.ValueLayout$OfBoolean, p1: number): boolean; get(p0: java.lang.foreign.ValueLayout$OfChar, p1: number): number; @@ -5990,7 +6072,6 @@ declare global { const MemoryLayout: { paddingLayout(p0: number): java.lang.foreign.PaddingLayout; sequenceLayout(p0: number, p1: java.lang.foreign.MemoryLayout): java.lang.foreign.SequenceLayout; - sequenceLayout(p0: java.lang.foreign.MemoryLayout): java.lang.foreign.SequenceLayout; structLayout(p0: java.lang.foreign.MemoryLayout): java.lang.foreign.StructLayout; unionLayout(p0: java.lang.foreign.MemoryLayout): java.lang.foreign.UnionLayout; } @@ -6001,9 +6082,12 @@ declare global { withoutName(): java.lang.foreign.MemoryLayout; byteAlignment(): number; withByteAlignment(p0: number): java.lang.foreign.MemoryLayout; + scale(p0: number, p1: number): number; + scaleHandle(): java.lang.invoke.MethodHandle; byteOffset(p0: java.lang.foreign.MemoryLayout$PathElement): number; byteOffsetHandle(p0: java.lang.foreign.MemoryLayout$PathElement): java.lang.invoke.MethodHandle; varHandle(p0: java.lang.foreign.MemoryLayout$PathElement): java.lang.invoke.VarHandle; + arrayElementVarHandle(p0: java.lang.foreign.MemoryLayout$PathElement): java.lang.invoke.VarHandle; sliceHandle(p0: java.lang.foreign.MemoryLayout$PathElement): java.lang.invoke.MethodHandle; select(p0: java.lang.foreign.MemoryLayout$PathElement): java.lang.foreign.MemoryLayout; } @@ -6059,8 +6143,8 @@ declare global { interface ValueLayout extends java.lang.foreign.MemoryLayout { order(): java.nio.ByteOrder; withOrder(p0: java.nio.ByteOrder): java.lang.foreign.ValueLayout; - arrayElementVarHandle(p0: number): java.lang.invoke.VarHandle; carrier(): java.lang.Class; + varHandle(): java.lang.invoke.VarHandle; } interface AddressLayout extends java.lang.foreign.ValueLayout { withTargetLayout(p0: java.lang.foreign.MemoryLayout): java.lang.foreign.AddressLayout; @@ -6138,14 +6222,11 @@ declare global { interrupt(): void; isInterrupted(): boolean; isAlive(): boolean; - suspend(): void; - resume(): void; setPriority(p0: number): void; getPriority(): number; setName(p0: string): void; getName(): string; getThreadGroup(): java.lang.ThreadGroup; - countStackFrames(): number; join(p0: number): void; join(p0: number, p1: number): void; join(): void; @@ -6182,10 +6263,7 @@ declare global { enumerate(p0: Array): number; enumerate(p0: Array, p1: boolean): number; activeGroupCount(): number; - stop(): void; interrupt(): void; - suspend(): void; - resume(): void; destroy(): void; list(): void; } @@ -6221,6 +6299,7 @@ declare global { forName(p0: string): java.lang.Class; forName(p0: string, p1: boolean, p2: java.lang.ClassLoader): java.lang.Class; forName(p0: java.lang.Module, p1: string): java.lang.Class; + forPrimitiveName(p0: string): java.lang.Class; } interface Class extends java.io.Serializable, java.lang.reflect.GenericDeclaration, java.lang.reflect.Type, java.lang.reflect.AnnotatedElement, java.lang.invoke.TypeDescriptor$OfField>, java.lang.constant.Constable { toGenericString(): string; @@ -6249,7 +6328,6 @@ declare global { getEnclosingClass(): java.lang.Class; getSimpleName(): string; getCanonicalName(): string; - isUnnamedClass(): boolean; isAnonymousClass(): boolean; isLocalClass(): boolean; isMemberClass(): boolean; @@ -6519,6 +6597,8 @@ declare global { normalize(): java.nio.file.Path; resolve(p0: java.nio.file.Path): java.nio.file.Path; resolve(p0: string): java.nio.file.Path; + resolve(p0: java.nio.file.Path, p1: java.nio.file.Path): java.nio.file.Path; + resolve(p0: string, p1: string): java.nio.file.Path; resolveSibling(p0: java.nio.file.Path): java.nio.file.Path; resolveSibling(p0: string): java.nio.file.Path; relativize(p0: java.nio.file.Path): java.nio.file.Path; @@ -7511,6 +7591,7 @@ declare global { minusSeconds(p0: number): java.time.Instant; minusMillis(p0: number): java.time.Instant; minusNanos(p0: number): java.time.Instant; + until(p0: java.time.Instant): java.time.Duration; atOffset(p0: java.time.ZoneOffset): java.time.OffsetDateTime; atZone(p0: java.time.ZoneId): java.time.ZonedDateTime; toEpochMilli(): number; @@ -8129,6 +8210,7 @@ declare global { getByName(p0: string): java.net.InetAddress; getAllByName(p0: string): Array; getLoopbackAddress(): java.net.InetAddress; + ofLiteral(p0: string): java.net.InetAddress; getLocalHost(): java.net.InetAddress; } interface InetAddress extends java.io.Serializable { @@ -8277,7 +8359,10 @@ declare global { const PublicKey: { serialVersionUID: number; } - interface PublicKey extends java.security.Key { + interface PublicKey extends java.security.AsymmetricKey { + } + interface AsymmetricKey extends java.security.Key, java.security.DEREncodable { + getParams(): java.security.spec.AlgorithmParameterSpec; } const Key: { serialVersionUID: number; @@ -8287,17 +8372,19 @@ declare global { getFormat(): string; getEncoded(): Array; } + interface DEREncodable { + } const KeyPair: { new(p0: java.security.PublicKey, p1: java.security.PrivateKey): java.security.KeyPair; } - interface KeyPair extends java.io.Serializable { + interface KeyPair extends java.io.Serializable, java.security.DEREncodable { getPublic(): java.security.PublicKey; getPrivate(): java.security.PrivateKey; } const PrivateKey: { serialVersionUID: number; } - interface PrivateKey extends java.security.Key, javax.security.auth.Destroyable { + interface PrivateKey extends java.security.AsymmetricKey, javax.security.auth.Destroyable { } const Provider: { Service: typeof java.security.Provider$Service; @@ -8403,6 +8490,8 @@ declare global { parse(p0: string): number; isParseIntegerOnly(): boolean; setParseIntegerOnly(p0: boolean): void; + isStrict(): boolean; + setStrict(p0: boolean): void; isGroupingUsed(): boolean; setGroupingUsed(p0: boolean): void; getMaximumIntegerDigits(): number; @@ -8846,7 +8935,6 @@ declare global { sqrt(): java.math.BigInteger; sqrtAndRemainder(): Array; gcd(p0: java.math.BigInteger): java.math.BigInteger; - bitLength(): number; abs(): java.math.BigInteger; negate(): java.math.BigInteger; mod(p0: java.math.BigInteger): java.math.BigInteger; @@ -8864,6 +8952,7 @@ declare global { clearBit(p0: number): java.math.BigInteger; flipBit(p0: number): java.math.BigInteger; getLowestSetBit(): number; + bitLength(): number; bitCount(): number; isProbablePrime(p0: number): boolean; min(p0: java.math.BigInteger): java.math.BigInteger; @@ -9110,6 +9199,46 @@ declare global { } } namespace reflect { + interface KClass extends kotlin.reflect.KDeclarationContainer, kotlin.reflect.KAnnotatedElement, kotlin.reflect.KClassifier { + getSimpleName(): string | null | undefined; + getQualifiedName(): string | null | undefined; + getConstructors(): Array>; + getNestedClasses(): Array>; + getObjectInstance(): T; + getTypeParameters(): Array; + getSupertypes(): Array; + getSealedSubclasses(): Array>; + getVisibility(): kotlin.reflect.KVisibility | null | undefined; + isFinal(): boolean; + isOpen(): boolean; + isAbstract(): boolean; + isSealed(): boolean; + isData(): boolean; + isInner(): boolean; + isCompanion(): boolean; + isFun(): boolean; + isValue(): boolean; + isInstance(value: any | null | undefined): boolean; + } + interface KDeclarationContainer { + getMembers(): Array>; + } + interface KAnnotatedElement { + getAnnotations(): Array; + } + interface KClassifier { + } + const KVisibility: { + PUBLIC: kotlin.reflect.KVisibility; + PROTECTED: kotlin.reflect.KVisibility; + INTERNAL: kotlin.reflect.KVisibility; + PRIVATE: kotlin.reflect.KVisibility; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): kotlin.reflect.KVisibility; + } + interface KVisibility extends kotlin.Enum { + } interface KProperty extends kotlin.reflect.KCallable { isLateinit(): boolean; isConst(): boolean; @@ -9128,27 +9257,11 @@ declare global { call(args: any | null | undefined): R; callBy(args: Map): R; } - interface KAnnotatedElement { - getAnnotations(): Array; - } interface KType extends kotlin.reflect.KAnnotatedElement { getClassifier(): kotlin.reflect.KClassifier | null | undefined; getArguments(): Array; isMarkedNullable(): boolean; } - interface KClassifier { - } - const KVisibility: { - PUBLIC: kotlin.reflect.KVisibility; - PROTECTED: kotlin.reflect.KVisibility; - INTERNAL: kotlin.reflect.KVisibility; - PRIVATE: kotlin.reflect.KVisibility; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): kotlin.reflect.KVisibility; - } - interface KVisibility extends kotlin.Enum { - } interface KProperty$Getter extends kotlin.reflect.KProperty$Accessor, kotlin.reflect.KFunction { } interface KProperty$Accessor { @@ -9160,30 +9273,6 @@ declare global { isOperator(): boolean; isInfix(): boolean; } - interface KClass extends kotlin.reflect.KDeclarationContainer, kotlin.reflect.KAnnotatedElement, kotlin.reflect.KClassifier { - getSimpleName(): string | null | undefined; - getQualifiedName(): string | null | undefined; - getConstructors(): Array>; - getNestedClasses(): Array>; - getObjectInstance(): T; - getTypeParameters(): Array; - getSupertypes(): Array; - getSealedSubclasses(): Array>; - getVisibility(): kotlin.reflect.KVisibility | null | undefined; - isFinal(): boolean; - isOpen(): boolean; - isAbstract(): boolean; - isSealed(): boolean; - isData(): boolean; - isInner(): boolean; - isCompanion(): boolean; - isFun(): boolean; - isValue(): boolean; - isInstance(value: any | null | undefined): boolean; - } - interface KDeclarationContainer { - getMembers(): Array>; - } interface KMutableProperty0 extends kotlin.reflect.KProperty0, kotlin.reflect.KMutableProperty { set(value: V): void; } @@ -10104,23 +10193,6 @@ declare global { getCurrentScreen(): net.minecraft.client.gui.screens.Screen | null | undefined; displayScreen(screen: net.minecraft.client.gui.screens.Screen | null | undefined): void; } - const UGraphics$DrawMode: { - LINES: gg.essential.universal.UGraphics$DrawMode; - LINE_STRIP: gg.essential.universal.UGraphics$DrawMode; - TRIANGLES: gg.essential.universal.UGraphics$DrawMode; - TRIANGLE_STRIP: gg.essential.universal.UGraphics$DrawMode; - TRIANGLE_FAN: gg.essential.universal.UGraphics$DrawMode; - QUADS: gg.essential.universal.UGraphics$DrawMode; - entries: kotlin.enums.EnumEntries; - fromGl(p0: number): gg.essential.universal.UGraphics$DrawMode; - fromRenderLayer(p0: net.minecraft.client.renderer.rendertype.RenderType): gg.essential.universal.UGraphics$DrawMode; - values(): Array; - valueOf(value: string): gg.essential.universal.UGraphics$DrawMode; - } - interface UGraphics$DrawMode extends kotlin.Enum { - glMode: number; - mcMode: com.mojang.blaze3d.vertex.VertexFormat$Mode; - } } namespace vigilance { namespace data { @@ -37090,13 +37162,6 @@ declare global { name(): string; signature(): net.minecraft.network.chat.MessageSignature; } - const ColorArgument: { - ERROR_INVALID_VALUE: com.mojang.brigadier.exceptions.DynamicCommandExceptionType; - color(): net.minecraft.commands.arguments.ColorArgument; - getColor(context: com.mojang.brigadier.context.CommandContext, name: string): net.minecraft.ChatFormatting; - } - interface ColorArgument extends com.mojang.brigadier.arguments.ArgumentType { - } const RangeArgument$Floats: { new(): net.minecraft.commands.arguments.RangeArgument$Floats; getRange(context: com.mojang.brigadier.context.CommandContext, name: string): net.minecraft.advancements.criterion.MinMaxBounds$Doubles; @@ -38676,12 +38741,6 @@ declare global { } } } - namespace api { - interface ClientModInitializer { - onInitializeClient(): void; - (): void; - } - } namespace loader { namespace api { namespace entrypoint { @@ -38692,6 +38751,12 @@ declare global { } } } + namespace api { + interface ClientModInitializer { + onInitializeClient(): void; + (): void; + } + } } } namespace com { @@ -43495,8363 +43560,616 @@ declare global { } } } + namespace v5 { + namespace loader { + const V5PreLaunch: { + new(): com.v5.loader.V5PreLaunch; + } + interface V5PreLaunch extends net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint { + } + } + } namespace chattriggers { namespace ctjs { - namespace api { - namespace vec { - const Vec3i: { - new(): com.chattriggers.ctjs.api.vec.Vec3i; - new(x: number): com.chattriggers.ctjs.api.vec.Vec3i; - new(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec3i; - new(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3i; - } - interface Vec3i { - getX(): number; - getY(): number; - getZ(): number; - magnitudeSquared(): number; - magnitude(): number; - translated(dx: number, dy: number, dz: number): com.chattriggers.ctjs.api.vec.Vec3i; - scaled(scale: number): com.chattriggers.ctjs.api.vec.Vec3i; - scaled(xScale: number, yScale: number, zScale: number): com.chattriggers.ctjs.api.vec.Vec3i; - crossProduct(other: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.vec.Vec3i; - dotProduct(other: com.chattriggers.ctjs.api.vec.Vec3i): number; - angleTo(other: com.chattriggers.ctjs.api.vec.Vec3i): number; - normalized(): com.chattriggers.ctjs.api.vec.Vec3f; - unaryMinus(): com.chattriggers.ctjs.api.vec.Vec3i; - plus(other: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.vec.Vec3i; - minus(other: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.vec.Vec3i; - } - const Vec3f: { - new(): com.chattriggers.ctjs.api.vec.Vec3f; - new(x: number): com.chattriggers.ctjs.api.vec.Vec3f; - new(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec3f; - new(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; - } - interface Vec3f { - getX(): number; - getY(): number; - getZ(): number; - magnitudeSquared(): number; - magnitude(): number; - translated(dx: number, dy: number, dz: number): com.chattriggers.ctjs.api.vec.Vec3f; - scaled(scale: number): com.chattriggers.ctjs.api.vec.Vec3f; - scaled(xScale: number, yScale: number, zScale: number): com.chattriggers.ctjs.api.vec.Vec3f; - crossProduct(other: com.chattriggers.ctjs.api.vec.Vec3f): com.chattriggers.ctjs.api.vec.Vec3f; - dotProduct(other: com.chattriggers.ctjs.api.vec.Vec3f): number; - angleTo(other: com.chattriggers.ctjs.api.vec.Vec3f): number; - normalized(): com.chattriggers.ctjs.api.vec.Vec3f; - unaryMinus(): com.chattriggers.ctjs.api.vec.Vec3f; - plus(other: com.chattriggers.ctjs.api.vec.Vec3f): com.chattriggers.ctjs.api.vec.Vec3f; - minus(other: com.chattriggers.ctjs.api.vec.Vec3f): com.chattriggers.ctjs.api.vec.Vec3f; - component1(): number; - component2(): number; - component3(): number; - copy(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; - } - const Vec2f: { - new(): com.chattriggers.ctjs.api.vec.Vec2f; - new(x: number): com.chattriggers.ctjs.api.vec.Vec2f; - new(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec2f; - } - interface Vec2f { - getX(): number; - getY(): number; - magnitudeSquared(): number; - magnitude(): number; - translated(dx: number, dy: number): com.chattriggers.ctjs.api.vec.Vec2f; - scaled(scale: number): com.chattriggers.ctjs.api.vec.Vec2f; - scaled(xScale: number, yScale: number): com.chattriggers.ctjs.api.vec.Vec2f; - dotProduct(other: com.chattriggers.ctjs.api.vec.Vec2f): number; - angleTo(other: com.chattriggers.ctjs.api.vec.Vec2f): number; - normalized(): com.chattriggers.ctjs.api.vec.Vec2f; - unaryMinus(): com.chattriggers.ctjs.api.vec.Vec2f; - plus(other: com.chattriggers.ctjs.api.vec.Vec2f): com.chattriggers.ctjs.api.vec.Vec2f; - minus(other: com.chattriggers.ctjs.api.vec.Vec2f): com.chattriggers.ctjs.api.vec.Vec2f; - component1(): number; - component2(): number; - copy(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec2f; - } + namespace engine { + const WrappedThread: { + new(task: java.lang.Runnable): com.chattriggers.ctjs.engine.WrappedThread; } - namespace inventory { - namespace nbt { - const NBTBase: { - new(mcValue: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - } - interface NBTBase extends com.chattriggers.ctjs.api.CTWrapper { - /** - * Gets the type byte for the tag. - */ - getId(): number; - /** - * Creates a clone of the tag. - */ - copy(): net.minecraft.nbt.Tag; - /** - * Return whether this compound has no tags. - */ - hasNoTags(): boolean; - hasTags(): boolean; - } - const NBTBase$Companion: { - fromMC(nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - new(): com.chattriggers.ctjs.api.inventory.nbt.NBTBase$Companion; - } - interface NBTBase$Companion { - fromMC(nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - new(): com.chattriggers.ctjs.api.inventory.nbt.NBTBase$Companion; - toObject(): any | null | undefined; - toObject(): org.mozilla.javascript.NativeObject; - toObject(): org.mozilla.javascript.NativeArray; - } - const NBTTagList: { - new(mcValue: net.minecraft.nbt.ListTag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - } - interface NBTTagList extends com.chattriggers.ctjs.api.inventory.nbt.NBTBase { - getTagCount(): number; - appendTag(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - appendTag(nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - set(id: number, nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - set(id: number, nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - insertTag(index: number, nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - insertTag(index: number, nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - removeTag(index: number): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - getShortAt(index: number): java.util.Optional; - getIntAt(index: number): java.util.Optional; - getFloatAt(index: number): java.util.Optional; - getDoubleAt(index: number): java.util.Optional; - getStringTagAt(index: number): string; - getListAt(index: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - getCompoundTagAt(index: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - getIntArrayAt(index: number): Array; - getLongArrayAt(index: number): Array; - get(index: number): net.minecraft.nbt.Tag; - get(index: number, type: number): any; - toArray(): org.mozilla.javascript.NativeArray; - } - const NBTTagCompound: { - NBTDataType: typeof com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - new(mcValue: net.minecraft.nbt.CompoundTag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - } - interface NBTTagCompound extends com.chattriggers.ctjs.api.inventory.nbt.NBTBase { - getTagMap(): Map; - getKeySet(): Set; - getTag(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTBase | null | undefined; - getTagId(key: string): number | null | undefined; - getByte(key: string): java.util.Optional; - getShort(key: string): java.util.Optional; - getInteger(key: string): java.util.Optional; - getLong(key: string): java.util.Optional; - getFloat(key: string): java.util.Optional; - getDouble(key: string): java.util.Optional; - getString(key: string): java.util.Optional; - getByteArray(key: string): java.util.Optional>; - getIntArray(key: string): java.util.Optional>; - getBoolean(key: string): java.util.Optional; - getCompoundTag(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - getTagList(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; - get(key: string, type: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType, tagType: number | null | undefined): any | null | undefined; - get(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTBase | null | undefined; - setNBTBase(key: string, value: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setNBTBase(key: string, value: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setBoolean(key: string, value: boolean): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setByte(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setShort(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setInteger(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setLong(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setFloat(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setDouble(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setString(key: string, value: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setByteArray(key: string, value: Array): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - setIntArray(key: string, value: Array): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - putLongArray(key: string, value: Array): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - set(key: string, value: any): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - removeTag(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; - toObject(): org.mozilla.javascript.NativeObject; - } - const NBTTagCompound$NBTDataType: { - BYTE: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - SHORT: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - INTEGER: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - LONG: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - FLOAT: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - DOUBLE: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - STRING: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - BYTE_ARRAY: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - INT_ARRAY: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - LONG_ARRAY: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - BOOLEAN: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - COMPOUND_TAG: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - TAG_LIST: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; - } - interface NBTTagCompound$NBTDataType extends kotlin.Enum { - } - const NBT: { - /** - * Creates a new [NBTBase] from the given [nbt] - * - * @param nbt the value to convert to NBT - * @param options optional argument to allow refinement of the NBT data. - * Possible options include: - * - coerceNumericStrings: Boolean, default false. - * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, - * "50l" as a long - * - preferArraysOverLists: Boolean, default false - * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or - * NBTTagIntArray accordingly - * - * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] - * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. - */ - parse(nbt: any): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - /** - * Creates a new [NBTBase] from the given [nbt] - * - * @param nbt the value to convert to NBT - * @param options optional argument to allow refinement of the NBT data. - * Possible options include: - * - coerceNumericStrings: Boolean, default false. - * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, - * "50l" as a long - * - preferArraysOverLists: Boolean, default false - * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or - * NBTTagIntArray accordingly - * - * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] - * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. - */ - parse(nbt: any, options: org.mozilla.javascript.NativeObject | null | undefined): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - toObject(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound): org.mozilla.javascript.NativeObject; - toArray(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagList): org.mozilla.javascript.NativeArray; - new(): com.chattriggers.ctjs.api.inventory.nbt.NBT; - } - interface NBT { - /** - * Creates a new [NBTBase] from the given [nbt] - * - * @param nbt the value to convert to NBT - * @param options optional argument to allow refinement of the NBT data. - * Possible options include: - * - coerceNumericStrings: Boolean, default false. - * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, - * "50l" as a long - * - preferArraysOverLists: Boolean, default false - * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or - * NBTTagIntArray accordingly - * - * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] - * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. - */ - parse(nbt: any): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - /** - * Creates a new [NBTBase] from the given [nbt] - * - * @param nbt the value to convert to NBT - * @param options optional argument to allow refinement of the NBT data. - * Possible options include: - * - coerceNumericStrings: Boolean, default false. - * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, - * "50l" as a long - * - preferArraysOverLists: Boolean, default false - * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or - * NBTTagIntArray accordingly - * - * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] - * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. - */ - parse(nbt: any, options: org.mozilla.javascript.NativeObject | null | undefined): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; - toObject(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound): org.mozilla.javascript.NativeObject; - toArray(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagList): org.mozilla.javascript.NativeArray; - new(): com.chattriggers.ctjs.api.inventory.nbt.NBT; - } - } - namespace action { - const DropAction: { - new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.DropAction; - } - interface DropAction extends com.chattriggers.ctjs.api.inventory.action.Action { - getHoldingCtrl(): boolean; - /** - * Whether the click should act as if control is being held (defaults to false) - * - * @param holdingCtrl to hold ctrl or not - */ - setHoldingCtrl(holdingCtrl: boolean): com.chattriggers.ctjs.api.inventory.action.DropAction; - } - const Action: { - Type: typeof com.chattriggers.ctjs.api.inventory.action.Action$Type; - new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.Action; - } - interface Action { - getSlot(): number; - setSlot(value: number): void; - getWindowId(): number; - setWindowId(value: number): void; - setSlot(slot: number): com.chattriggers.ctjs.api.inventory.action.Action; - setWindowId(windowId: number): com.chattriggers.ctjs.api.inventory.action.Action; - } - const Action$Companion: { - /** - * Creates a new action. - * The Inventory must be a container, see [Inventory.isContainer]. - * The slot can be -999 for outside of the gui - * - * @param inventory the inventory to complete the action on - * @param slot the slot to complete the action on - * @param typeString the type of action to do (CLICK, DRAG, DROP, KEY) - * @return the new action - */ - of(inventory: com.chattriggers.ctjs.api.inventory.Inventory, slot: number, typeString: string): com.chattriggers.ctjs.api.inventory.action.Action; - new(): com.chattriggers.ctjs.api.inventory.action.Action$Companion; - } - interface Action$Companion { - /** - * Creates a new action. - * The Inventory must be a container, see [Inventory.isContainer]. - * The slot can be -999 for outside of the gui - * - * @param inventory the inventory to complete the action on - * @param slot the slot to complete the action on - * @param typeString the type of action to do (CLICK, DRAG, DROP, KEY) - * @return the new action - */ - of(inventory: com.chattriggers.ctjs.api.inventory.Inventory, slot: number, typeString: string): com.chattriggers.ctjs.api.inventory.action.Action; - new(): com.chattriggers.ctjs.api.inventory.action.Action$Companion; - } - const Action$Type: { - CLICK: com.chattriggers.ctjs.api.inventory.action.Action$Type; - DRAG: com.chattriggers.ctjs.api.inventory.action.Action$Type; - KEY: com.chattriggers.ctjs.api.inventory.action.Action$Type; - DROP: com.chattriggers.ctjs.api.inventory.action.Action$Type; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.Action$Type; - } - interface Action$Type extends kotlin.Enum { - } - const KeyAction: { - new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.KeyAction; - } - interface KeyAction extends com.chattriggers.ctjs.api.inventory.action.Action { - getKey(): number; - /** - * Which key to act as if has been clicked (REQUIRED). - * Options currently are 0-8, representing the hotbar keys - * - * @param key which key to "click" - */ - setKey(key: number): com.chattriggers.ctjs.api.inventory.action.KeyAction; - } - const ClickAction: { - ClickType: typeof com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; - new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.ClickAction; - } - interface ClickAction extends com.chattriggers.ctjs.api.inventory.action.Action { - getClickType(): com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; - /** - * The type of click (REQUIRED) - * - * @param clickType the new click type - */ - setClickType(clickType: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType): com.chattriggers.ctjs.api.inventory.action.ClickAction; - getHoldingShift(): boolean; - /** - * Whether the click should act as if shift is being held (defaults to false) - * - * @param holdingShift to hold shift or not - */ - setHoldingShift(holdingShift: boolean): com.chattriggers.ctjs.api.inventory.action.ClickAction; - getItemInHand(): boolean; - /** - * Whether the click should act as if an item is being held - * (defaults to whether there actually is an item in the hand) - * - * @param itemInHand to be holding an item or not - */ - setItemInHand(itemInHand: boolean): com.chattriggers.ctjs.api.inventory.action.ClickAction; - getPickupAll(): boolean; - /** - * Whether the click should try to pick up all items of said type in the inventory (essentially double clicking) - * (defaults to whether there actually is an item in the hand) - * - * @param pickupAll to pick up all items of the same type - */ - setPickupAll(pickupAll: boolean): com.chattriggers.ctjs.api.inventory.action.ClickAction; - /** - * Sets the type of click. - * Possible values are: LEFT, RIGHT, MIDDLE - * - * @param clickType the click type - * @return the current Action for method chaining - */ - setClickString(clickType: string): com.chattriggers.ctjs.api.inventory.action.ClickAction; - } - const ClickAction$ClickType: { - LEFT: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; - RIGHT: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; - MIDDLE: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; - } - interface ClickAction$ClickType extends kotlin.Enum { - getButton(): number; - } - const DragAction: { - ClickType: typeof com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; - Stage: typeof com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; - new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.DragAction; - } - interface DragAction extends com.chattriggers.ctjs.api.inventory.action.Action { - getClickType(): com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; - /** - * The type of click (REQUIRED) - * - * @param clickType the new click type - */ - setClickType(clickType: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType): com.chattriggers.ctjs.api.inventory.action.DragAction; - getStage(): com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; - /** - * The stage of this drag (REQUIRED) - * BEGIN is when beginning the drag - * SLOT is for each slot being dragged into - * END is for ending the drag - * - * @param stage the stage - */ - setStage(stage: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage): com.chattriggers.ctjs.api.inventory.action.DragAction; - /** - * Sets the type of click. - * Possible values are: LEFT, RIGHT, MIDDLE - * - * @param clickType the click type - * @return the current Action for method chaining - */ - setClickString(clickType: string): com.chattriggers.ctjs.api.inventory.action.DragAction; - /** - * Sets the stage of this drag. - * Possible values are: BEGIN, SLOT, END [stage] - * - * @param stage the stage - * @return the current Action for method chaining - */ - setStageString(stage: string): com.chattriggers.ctjs.api.inventory.action.DragAction; - } - const DragAction$ClickType: { - LEFT: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; - RIGHT: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; - MIDDLE: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; - } - interface DragAction$ClickType extends kotlin.Enum { - getButton(): number; - } - const DragAction$Stage: { - BEGIN: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; - SLOT: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; - END: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; - } - interface DragAction$Stage extends kotlin.Enum { - getStage(): number; - } - } - const Inventory: { - new(inventory: net.minecraft.world.Container): com.chattriggers.ctjs.api.inventory.Inventory; - new(container: net.minecraft.client.gui.screens.inventory.AbstractContainerScreen): com.chattriggers.ctjs.api.inventory.Inventory; - } - interface Inventory { - getInventory(): net.minecraft.world.Container; - getScreen(): net.minecraft.client.gui.screens.inventory.AbstractContainerScreen | null | undefined; - /** - * Gets the total size of the Inventory. - * The player's inventory size is 36, 27 for the main inventory, plus 9 for the hotbar. - * A single chest's size would be 63, because it also counts the player's inventory. - * - * @return the size of the Inventory - */ - getSize(): number; - /** - * Gets the item in any slot, starting from 0. - * - * @param slot the slot index - * @return the [Item] in that slot, or null if there is no item - */ - getStackInSlot(slot: number): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * Returns the window identifier number of this Inventory. - * This Inventory must be backed by a HandledScreen [isScreen] - * - * @return the window id - */ - getWindowId(): number; - /** - * Checks if an item can be shift clicked into a certain slot, i.e. coal into the bottom of a furnace. - * - * @param slot the slot index - * @param item the item for checking - * @return whether it can be shift clicked in - */ - isItemValidForSlot(slot: number, item: com.chattriggers.ctjs.api.inventory.Item): boolean; - /** - * @return a list of the [Item]s in an inventory - */ - getItems(): Array; - /** - * Checks whether the inventory contains the given item. - * - * @param item the item to check for - * @return whether the inventory contains the item - */ - contains(item: com.chattriggers.ctjs.api.inventory.Item): boolean; - /** - * Checks whether the inventory contains an item with ID. - * - * @param id the ID of the item to match - * @return whether the inventory contains an item with ID - */ - contains(id: number): boolean; - /** - * Gets the index of any item in the inventory, and returns the slot number. - * Returns -1 if the inventory does not contain the item. - * - * @param item the item to check for - * @return the index of the given item - */ - indexOf(item: com.chattriggers.ctjs.api.inventory.Item): number; - /** - * Gets the index of any item in the inventory with matching ID, and returns the slot number. - * Returns -1 if the inventory does not contain the item. - * - * @param id the item ID to check for - * @return the index of the given item with ID - */ - indexOf(id: number): number; - /** - * Returns true if this Inventory wraps a [HandledScreen] object - * rather than an [MCInventory] object - * - * @return if this is a container - */ - isScreen(): boolean; - /** - * Shorthand for [ClickAction] - * - * @param slot the slot to click on - * @param button the mouse button to use. "LEFT" by default. - * @param shift whether shift is being held. False by default - * @return this inventory for method chaining - */ - click(slot: number): com.chattriggers.ctjs.api.inventory.Inventory; - /** - * Shorthand for [ClickAction] - * - * @param slot the slot to click on - * @param button the mouse button to use. "LEFT" by default. - * @param shift whether shift is being held. False by default - * @return this inventory for method chaining - */ - click(slot: number, shift: boolean): com.chattriggers.ctjs.api.inventory.Inventory; - /** - * Shorthand for [ClickAction] - * - * @param slot the slot to click on - * @param button the mouse button to use. "LEFT" by default. - * @param shift whether shift is being held. False by default - * @return this inventory for method chaining - */ - click(slot: number, shift: boolean, button: string): com.chattriggers.ctjs.api.inventory.Inventory; - /** - * Shorthand for [DropAction] - * - * @param slot the slot to drop - * @param ctrl whether control should be held (drops whole stack) - * @return this inventory for method chaining - */ - drop(slot: number, ctrl: boolean): com.chattriggers.ctjs.api.inventory.Inventory; - /** - * Shorthand for [DragAction] - * - * @param type what click type this should be: LEFT, MIDDLE, RIGHT - * @param slots all of the slots to drag onto - * @return this inventory for method chaining - */ - drag(type: string, slots: number): com.chattriggers.ctjs.api.inventory.Inventory; - /** - * Gets the name of the inventory, simply "container" for most chest-like blocks. - * - * @return the name of the inventory - */ - getName(): com.chattriggers.ctjs.api.message.TextComponent; - getClassName(): string; - } - const Item: { - new(mcValue: net.minecraft.world.item.ItemStack): com.chattriggers.ctjs.api.inventory.Item; - new(type: com.chattriggers.ctjs.api.inventory.ItemType): com.chattriggers.ctjs.api.inventory.Item; - } - interface Item extends com.chattriggers.ctjs.api.CTWrapper { - getType(): com.chattriggers.ctjs.api.inventory.ItemType; - getStackSize(): number; - setStackSize(size: number): com.chattriggers.ctjs.api.inventory.Item; - getEnchantments(): Map | null | undefined, number>; - isEnchantable(): boolean; - isEnchanted(): boolean; - canPlaceOn(pos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; - canPlaceOn(block: com.chattriggers.ctjs.api.world.block.Block): boolean; - canHarvest(pos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; - canHarvest(block: com.chattriggers.ctjs.api.world.block.Block): boolean; - getDurability(): number; - getMaxDamage(): number; - getDamage(): number; - isDamageable(): boolean; - getName(): string; - setName(name: com.chattriggers.ctjs.api.message.TextComponent | null | undefined): com.chattriggers.ctjs.api.inventory.Item; - resetName(): void; - getLore(): Array; - getLore(advanced: boolean): Array; - setLore(lore: Array): void; - resetLore(): void; - getNBT(): net.minecraft.core.component.DataComponentMap; - draw(): void; - draw(x: number): void; - draw(x: number, y: number): void; - draw(x: number, y: number, scale: number): void; - } - const ItemType: { - new(mcValue: net.minecraft.world.item.Item): com.chattriggers.ctjs.api.inventory.ItemType; - new(itemName: string): com.chattriggers.ctjs.api.inventory.ItemType; - new(id: number): com.chattriggers.ctjs.api.inventory.ItemType; - new(blockType: com.chattriggers.ctjs.api.world.block.BlockType): com.chattriggers.ctjs.api.inventory.ItemType; - } - interface ItemType extends com.chattriggers.ctjs.api.CTWrapper { - getName(): string; - getNameComponent(): com.chattriggers.ctjs.api.message.TextComponent; - getId(): number; - getTranslationKey(): string; - getRegistryName(): string; - asItem(): com.chattriggers.ctjs.api.inventory.Item; - } - const ItemType$Companion: { - fromMC(mcValue: net.minecraft.world.item.Item): com.chattriggers.ctjs.api.inventory.ItemType | null | undefined; - new(): com.chattriggers.ctjs.api.inventory.ItemType$Companion; - } - interface ItemType$Companion { - fromMC(mcValue: net.minecraft.world.item.Item): com.chattriggers.ctjs.api.inventory.ItemType | null | undefined; - new(): com.chattriggers.ctjs.api.inventory.ItemType$Companion; - } - const Item$Companion: { - fromMC(mcValue: net.minecraft.world.item.ItemStack): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - new(): com.chattriggers.ctjs.api.inventory.Item$Companion; - } - interface Item$Companion { - fromMC(mcValue: net.minecraft.world.item.ItemStack): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - new(): com.chattriggers.ctjs.api.inventory.Item$Companion; - } - const Slot: { - new(mcValue: net.minecraft.world.inventory.Slot): com.chattriggers.ctjs.api.inventory.Slot; - } - interface Slot extends com.chattriggers.ctjs.api.CTWrapper { - getIndex(): number; - getDisplayX(): number; - getDisplayY(): number; - getInventory(): com.chattriggers.ctjs.api.inventory.Inventory; - getItem(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - isEnabled(): boolean; - } + interface WrappedThread { + start(): void; + run(): void; + stop(): void; + interrupt(): void; + isInterrupted(): boolean; + destroy(): void; + isAlive(): boolean; + suspend(): void; + resume(): void; + setDaemon(on: boolean): void; + getId(): number; } - namespace message { - const TextComponent: { - /** - * Creates an empty [TextComponent] with a single, unstyled, empty part. - */ - new(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Creates a [TextComponent] from a variable number of objects. These - * objects can be: - * - A plain string possibly containing formatting codes. If the string has - * formatting codes, it will be split into different parts accordingly - * - A [TextComponent], whose parts will be appended in sequence to this - * [TextComponent]'s list of parts - * - A [Text] object, which acts as a single part - * - A JS object, which must contain a "text" key, and can optionally contain - * any of the [Style] keys: - * - color: a [TextColor] or string format of a [TextColor], [Formatting], or a hex value - * - bold: boolean - * - italic: boolean - * - underline: boolean - * - strikethrough: boolean - * - obfuscated: boolean - * - clickEvent: object with { action: [ClickEvent.Action] or string format of a [ClickEvent.Action], value: string or null } - * - hoverEvent: object with { action: [HoverEvent.Action], string format of a [HoverEvent.Action], or null, value: string or null } - * - insertion: string or null - * - font: string format of an [net.minecraft.util.Identifier] - * - * @see Style - */ - new(parts: any): com.chattriggers.ctjs.api.message.TextComponent; - } - interface TextComponent extends net.minecraft.network.chat.Component, kotlin.collections.Iterable { - /** - * Returns the text of all parts concatenated without formatting codes. - */ - getUnformattedText(): string; - /** - * Returns the text of all parts concatenated with formatting codes. - */ - getFormattedText(): string; - getSize(): number; - /** - * If this [TextComponent] is recursive, sending this instance (via [chat] or - * [actionBar]) may trigger other `chat` triggers as if it had been received by - * the server. [TextComponent]s are non-recursive by default. - * - * @return true if the message can trigger other triggers. - */ - isRecursive(): boolean; - /** - * Get the chat line ID of this message, if it exists. The chat line can be used - * to easily edit or delete a message later via [ChatLib.editChat] and - * [ChatLib.deleteChat]. - * - * @return the chat line ID of the message, or -1 if this [TextComponent] does - * not have an associated chat line ID. - */ - getChatLineId(): number; - /** - * @return a new [TextComponent] with the given chat line id - */ - withChatLineId(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * @return a new [TextComponent] with the given chat line id - */ - withChatLineId(id: number): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets whether the message can trigger other triggers. - * - * @param recursive true if message can trigger other triggers. - */ - withRecursive(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets whether the message can trigger other triggers. - * - * @param recursive true if message can trigger other triggers. - */ - withRecursive(recursive: boolean): com.chattriggers.ctjs.api.message.TextComponent; - /** - * @return a new [TextComponent] with the specified [value] appended to the end. - * This accepts all types of objects that the vararg constructor does. - */ - withText(value: any): com.chattriggers.ctjs.api.message.TextComponent; - /** - * @return a new [TextComponent] with the specified [value] inserted at [index]. - * This accepts all types of objects that the vararg constructor does. - */ - withTextAt(index: number, value: any): com.chattriggers.ctjs.api.message.TextComponent; - /** - * @return a new [TextComponent] without the part at [index] - */ - withoutTextAt(index: number): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Edits this text component, replacing it with the given [newText]. Note that - * this compares [TextComponent]s based on [formattedText]; if an exact match - * is needed, use [ChatLib.editChat] in conjunction with a chat line ID. - */ - edit(newText: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Edits this text component, replacing it with a new [TextComponent] from the - * given [parts]. Note that this compares [TextComponent]s based on - * [formattedText]; if an exact match is needed, use [ChatLib.editChat] in - * conjunction with a chat line ID. - */ - edit(parts: any): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sends this [TextComponent] to the players chat. - * - * Note that this is purely client-side, and will not be sent to the server. If [isRecursive], - * will trigger any matching `chat` triggers - * - * @see ChatLib.chat - * @see ChatLib.say - */ - chat(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sends this [TextComponent] to the players action bar. - * - * If [isRecursive], will trigger any matching `actionBar` triggers - * - * @see ChatLib.actionBar - */ - actionBar(): com.chattriggers.ctjs.api.message.TextComponent; - contains(element: org.mozilla.javascript.NativeObject): boolean; - containsAll(elements: Array): boolean; - get(index: number): org.mozilla.javascript.NativeObject; - indexOf(element: org.mozilla.javascript.NativeObject): number; - isEmpty(): boolean; - } - const Chat: { - sendGradientMsg(prefix: string, startRgb: number, endRgb: number, messages: any): void; - new(): com.chattriggers.ctjs.api.message.Chat; - } - interface Chat { - sendGradientMsg(prefix: string, startRgb: number, endRgb: number, messages: any): void; - new(): com.chattriggers.ctjs.api.message.Chat; - } - const ChatLib: { - /** - * Prints text in the chat. - * The text can be a String or a [TextComponent] - * - * @param text the text to be printed - */ - chat(text: any | null | undefined): void; - /** - * Shows text in the action bar. - * The text can be a String or a [TextComponent] - * - * @param text the text to show - */ - actionBar(text: any | null | undefined): void; - /** - * Simulates a chat message to be caught by other triggers for testing. - * The text can be a String or a [TextComponent] - * - * @param text The message to simulate - */ - simulateChat(text: any | null | undefined): void; - /** - * Replaces the easier to type '&' color codes with proper color codes in a string. - * - * @param message The string to add color codes to - * @return the formatted message - */ - addColor(message: string | null | undefined): string; - /** - * Says chat message. - * This message is actually sent to the server. - * - * @param text the message to be sent - */ - say(text: string): void; - /** - * Runs a command. - * - * @param text the command to run, without the leading slash (Ex. "help") - * @param clientSide should the command be run as a client side command - */ - command(text: string): void; - /** - * Runs a command. - * - * @param text the command to run, without the leading slash (Ex. "help") - * @param clientSide should the command be run as a client side command - */ - command(text: string, clientSide: boolean): void; - /** - * Clear all chat messages - */ - clearChat(): void; - /** - * Get a message that will be perfectly one line of chat, - * the separator repeated as many times as necessary. - * The separator defaults to "-" - * - * @param separator the message to split chat with - * @return the message that would split chat - */ - getChatBreak(): string; - /** - * Get a message that will be perfectly one line of chat, - * the separator repeated as many times as necessary. - * The separator defaults to "-" - * - * @param separator the message to split chat with - * @return the message that would split chat - */ - getChatBreak(separator: string): string; - /** - * Gets the width of Minecraft's chat - * - * @return the width of chat - */ - getChatWidth(): number; - /** - * Remove all formatting - * - * @param text the string to un-format - * @return the unformatted string - */ - removeFormatting(text: string): string; - /** - * Replaces Minecraft formatted text with normal formatted text - * - * @param text the formatted string - * @return the unformatted string - */ - replaceFormatting(text: string): string; - /** - * Get a message that will be perfectly centered in chat. - * - * @param text the text to be centered - * @return the centered message - */ - getCenteredText(text: string): string; - /** - * Copies the given String to the user's clipboard - * - * @param text the text to copy - */ - copyToClipboard(text: string): void; - /** - * Edits an already sent chat message matched by [regexp]. - * - * @param regexp the regex object to match to the message - * @param replacements the new message(s) to be put in replace of the old one - */ - editChat(regexp: org.mozilla.javascript.regexp.NativeRegExp, replacements: any): void; - /** - * Edits an already sent chat message by the text of the chat - * - * @param toReplace the unformatted text of the message to be replaced - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(toReplace: string, replacements: any): void; - /** - * Edits an already sent chat message by the [TextComponent] - * - * @param toReplace the message to be replaced - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(toReplace: com.chattriggers.ctjs.api.message.TextComponent, replacements: any): void; - /** - * Edits an already sent chat message by its chat line id - * - * @param chatLineId the chat line id of the message to be replaced - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(chatLineId: number, replacements: any): void; - /** - * Edits an already sent chat message by given a callback that receives - * [TextComponent] instances - * - * @param matcher a function that accepts a [TextComponent] and returns a boolean - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(matcher: kotlin.Function1, replacements: any): void; - /** - * Deletes an already sent chat message matching [regexp]. - * - * @param regexp the regex object to match to the message - */ - deleteChat(regexp: org.mozilla.javascript.regexp.NativeRegExp): void; - /** - * Deletes an already sent chat message by the text of the chat - * - * @param toDelete the unformatted text of the message to be deleted - */ - deleteChat(toDelete: string): void; - /** - * Deletes an already sent chat message by the [TextComponent] - * - * @param toDelete the message to be deleted - */ - deleteChat(toDelete: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Deletes an already sent chat message by its chat line id - * - * @param chatLineId the chat line id of the message to be deleted - */ - deleteChat(chatLineId: number): void; - /** - * Deletes an already sent chat message given a callback that receives - * [TextComponent] instances - * - * @param matcher a function that accepts a [TextComponent] and returns a boolean - */ - deleteChat(matcher: kotlin.Function1): void; - /** - * Gets the previous 1000 lines of chat - * - * @return A list of the last 1000 chat lines - */ - getChatLines(): Array; - /** - * Adds a message to the player's chat history. This allows the message to - * show up for the player when pressing the up/down keys while in the chat gui - * - * @param index the index to insert the message - * @param message the message to add to chat history - */ - addToSentMessageHistory(message: string): void; - /** - * Adds a message to the player's chat history. This allows the message to - * show up for the player when pressing the up/down keys while in the chat gui - * - * @param index the index to insert the message - * @param message the message to add to chat history - */ - addToSentMessageHistory(index: number, message: string): void; - new(): com.chattriggers.ctjs.api.message.ChatLib; - } - interface ChatLib { - /** - * Prints text in the chat. - * The text can be a String or a [TextComponent] - * - * @param text the text to be printed - */ - chat(text: any | null | undefined): void; - /** - * Shows text in the action bar. - * The text can be a String or a [TextComponent] - * - * @param text the text to show - */ - actionBar(text: any | null | undefined): void; - /** - * Simulates a chat message to be caught by other triggers for testing. - * The text can be a String or a [TextComponent] - * - * @param text The message to simulate - */ - simulateChat(text: any | null | undefined): void; - /** - * Replaces the easier to type '&' color codes with proper color codes in a string. - * - * @param message The string to add color codes to - * @return the formatted message - */ - addColor(message: string | null | undefined): string; - /** - * Says chat message. - * This message is actually sent to the server. - * - * @param text the message to be sent - */ - say(text: string): void; - /** - * Runs a command. - * - * @param text the command to run, without the leading slash (Ex. "help") - * @param clientSide should the command be run as a client side command - */ - command(text: string): void; - /** - * Runs a command. - * - * @param text the command to run, without the leading slash (Ex. "help") - * @param clientSide should the command be run as a client side command - */ - command(text: string, clientSide: boolean): void; - /** - * Clear all chat messages - */ - clearChat(): void; - /** - * Get a message that will be perfectly one line of chat, - * the separator repeated as many times as necessary. - * The separator defaults to "-" - * - * @param separator the message to split chat with - * @return the message that would split chat - */ - getChatBreak(): string; - /** - * Get a message that will be perfectly one line of chat, - * the separator repeated as many times as necessary. - * The separator defaults to "-" - * - * @param separator the message to split chat with - * @return the message that would split chat - */ - getChatBreak(separator: string): string; - /** - * Gets the width of Minecraft's chat - * - * @return the width of chat - */ - getChatWidth(): number; - /** - * Remove all formatting - * - * @param text the string to un-format - * @return the unformatted string - */ - removeFormatting(text: string): string; - /** - * Replaces Minecraft formatted text with normal formatted text - * - * @param text the formatted string - * @return the unformatted string - */ - replaceFormatting(text: string): string; - /** - * Get a message that will be perfectly centered in chat. - * - * @param text the text to be centered - * @return the centered message - */ - getCenteredText(text: string): string; - /** - * Copies the given String to the user's clipboard - * - * @param text the text to copy - */ - copyToClipboard(text: string): void; - /** - * Edits an already sent chat message matched by [regexp]. - * - * @param regexp the regex object to match to the message - * @param replacements the new message(s) to be put in replace of the old one - */ - editChat(regexp: org.mozilla.javascript.regexp.NativeRegExp, replacements: any): void; - /** - * Edits an already sent chat message by the text of the chat - * - * @param toReplace the unformatted text of the message to be replaced - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(toReplace: string, replacements: any): void; - /** - * Edits an already sent chat message by the [TextComponent] - * - * @param toReplace the message to be replaced - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(toReplace: com.chattriggers.ctjs.api.message.TextComponent, replacements: any): void; - /** - * Edits an already sent chat message by its chat line id - * - * @param chatLineId the chat line id of the message to be replaced - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(chatLineId: number, replacements: any): void; - /** - * Edits an already sent chat message by given a callback that receives - * [TextComponent] instances - * - * @param matcher a function that accepts a [TextComponent] and returns a boolean - * @param replacements the new message(s) to be put in place of the old one - */ - editChat(matcher: kotlin.Function1, replacements: any): void; - /** - * Deletes an already sent chat message matching [regexp]. - * - * @param regexp the regex object to match to the message - */ - deleteChat(regexp: org.mozilla.javascript.regexp.NativeRegExp): void; - /** - * Deletes an already sent chat message by the text of the chat - * - * @param toDelete the unformatted text of the message to be deleted - */ - deleteChat(toDelete: string): void; - /** - * Deletes an already sent chat message by the [TextComponent] - * - * @param toDelete the message to be deleted - */ - deleteChat(toDelete: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Deletes an already sent chat message by its chat line id - * - * @param chatLineId the chat line id of the message to be deleted - */ - deleteChat(chatLineId: number): void; - /** - * Deletes an already sent chat message given a callback that receives - * [TextComponent] instances - * - * @param matcher a function that accepts a [TextComponent] and returns a boolean - */ - deleteChat(matcher: kotlin.Function1): void; - /** - * Gets the previous 1000 lines of chat - * - * @return A list of the last 1000 chat lines - */ - getChatLines(): Array; - /** - * Adds a message to the player's chat history. This allows the message to - * show up for the player when pressing the up/down keys while in the chat gui - * - * @param index the index to insert the message - * @param message the message to add to chat history - */ - addToSentMessageHistory(message: string): void; - /** - * Adds a message to the player's chat history. This allows the message to - * show up for the player when pressing the up/down keys while in the chat gui - * - * @param index the index to insert the message - * @param message the message to add to chat history - */ - addToSentMessageHistory(index: number, message: string): void; - new(): com.chattriggers.ctjs.api.message.ChatLib; - } + const WrappedThread$Companion: { + sleep(millis: number): void; + sleep(millis: number, nanos: number): void; + currentThread(): java.lang.Thread; + new(): com.chattriggers.ctjs.engine.WrappedThread$Companion; } - namespace world { - namespace block { - const BlockType: { - new(mcValue: net.minecraft.world.level.block.Block): com.chattriggers.ctjs.api.world.block.BlockType; - new(block: com.chattriggers.ctjs.api.world.block.BlockType): com.chattriggers.ctjs.api.world.block.BlockType; - new(blockName: string): com.chattriggers.ctjs.api.world.block.BlockType; - new(blockID: number): com.chattriggers.ctjs.api.world.block.BlockType; - new(item: com.chattriggers.ctjs.api.inventory.Item): com.chattriggers.ctjs.api.world.block.BlockType; - } - interface BlockType extends com.chattriggers.ctjs.api.CTWrapper { - /** - * Returns a [Block] based on this block and the - * provided BlockPos - * - * @param blockPos the block position - * @return a [Block] object - */ - withBlockPos(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; - getID(): number; - /** - * Gets the block's registry name. - * Example: minecraft:oak_planks - * - * @return the block's registry name - */ - getRegistryName(): string; - /** - * Gets the block's translation key. - * Example: block.minecraft.oak_planks - * - * @return the block's translation key - */ - getTranslationKey(): string; - /** - * Gets the block's localized name. - * Example: Wooden Planks - * - * @return the block's localized name - */ - getName(): string; - getLightValue(): number; - getDefaultState(): net.minecraft.world.level.block.state.BlockState; - canProvidePower(): boolean; - isTranslucent(): boolean; - } - const BlockPos: { - new(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.BlockPos; - new(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.BlockPos; - new(pos: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.world.block.BlockPos; - new(pos: net.minecraft.core.BlockPos): com.chattriggers.ctjs.api.world.block.BlockPos; - new(source: com.chattriggers.ctjs.api.entity.Entity): com.chattriggers.ctjs.api.world.block.BlockPos; - } - interface BlockPos extends com.chattriggers.ctjs.api.vec.Vec3i, com.chattriggers.ctjs.api.CTWrapper { - up(): com.chattriggers.ctjs.api.world.block.BlockPos; - up(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; - down(): com.chattriggers.ctjs.api.world.block.BlockPos; - down(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; - north(): com.chattriggers.ctjs.api.world.block.BlockPos; - north(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; - south(): com.chattriggers.ctjs.api.world.block.BlockPos; - south(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; - east(): com.chattriggers.ctjs.api.world.block.BlockPos; - east(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; - west(): com.chattriggers.ctjs.api.world.block.BlockPos; - west(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; - offset(facing: com.chattriggers.ctjs.api.world.block.BlockFace): com.chattriggers.ctjs.api.world.block.BlockPos; - offset(facing: com.chattriggers.ctjs.api.world.block.BlockFace, n: number): com.chattriggers.ctjs.api.world.block.BlockPos; - distanceTo(other: com.chattriggers.ctjs.api.world.block.BlockPos): number; - toVec3d(): net.minecraft.world.phys.Vec3; - } - const BlockFace: { - DOWN: com.chattriggers.ctjs.api.world.block.BlockFace; - UP: com.chattriggers.ctjs.api.world.block.BlockFace; - NORTH: com.chattriggers.ctjs.api.world.block.BlockFace; - SOUTH: com.chattriggers.ctjs.api.world.block.BlockFace; - WEST: com.chattriggers.ctjs.api.world.block.BlockFace; - EAST: com.chattriggers.ctjs.api.world.block.BlockFace; - Plane: typeof com.chattriggers.ctjs.api.world.block.BlockFace$Plane; - AxisDirection: typeof com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; - Axis: typeof com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace; - } - interface BlockFace extends kotlin.Enum, net.minecraft.util.StringRepresentable, com.chattriggers.ctjs.api.CTWrapper { - getAxisDirection(): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; - getAxis(): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - getDirectionVec(): com.chattriggers.ctjs.api.vec.Vec3i; - getOpposite(): com.chattriggers.ctjs.api.world.block.BlockFace; - getOffsetX(): number; - getOffsetY(): number; - getOffsetZ(): number; - rotateAround(axis: com.chattriggers.ctjs.api.world.block.BlockFace$Axis): com.chattriggers.ctjs.api.world.block.BlockFace; - rotateX(): com.chattriggers.ctjs.api.world.block.BlockFace; - rotateY(): com.chattriggers.ctjs.api.world.block.BlockFace; - rotateZ(): com.chattriggers.ctjs.api.world.block.BlockFace; - } - const BlockFace$AxisDirection: { - POSITIVE: com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; - NEGATIVE: com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; - } - interface BlockFace$AxisDirection extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { - getOffset(): number; - } - const BlockFace$AxisDirection$Companion: { - fromMC(axisDirection: net.minecraft.core.Direction$AxisDirection): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; - new(): unknown; - } - interface BlockFace$AxisDirection$Companion { - fromMC(axisDirection: net.minecraft.core.Direction$AxisDirection): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; - new(): unknown; - } - const BlockFace$Axis: { - X: com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - Y: com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - Z: com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - } - interface BlockFace$Axis extends kotlin.Enum, net.minecraft.util.StringRepresentable, com.chattriggers.ctjs.api.CTWrapper { - getPlane(): com.chattriggers.ctjs.api.world.block.BlockFace$Plane; - isHorizontal(): boolean; - isVertical(): boolean; - } - const BlockFace$Plane: { - HORIZONTAL: com.chattriggers.ctjs.api.world.block.BlockFace$Plane; - VERTICAL: com.chattriggers.ctjs.api.world.block.BlockFace$Plane; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace$Plane; - } - interface BlockFace$Plane extends kotlin.Enum, kotlin.collections.Iterable { - facings(): Array; - } - const BlockFace$Axis$Companion: { - fromMC(axis: net.minecraft.core.Direction$Axis): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - new(): unknown; - } - interface BlockFace$Axis$Companion { - fromMC(axis: net.minecraft.core.Direction$Axis): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; - new(): unknown; - } - const BlockFace$Companion: { - fromMC(facing: net.minecraft.core.Direction): com.chattriggers.ctjs.api.world.block.BlockFace; - new(): com.chattriggers.ctjs.api.world.block.BlockFace$Companion; - } - interface BlockFace$Companion { - fromMC(facing: net.minecraft.core.Direction): com.chattriggers.ctjs.api.world.block.BlockFace; - new(): com.chattriggers.ctjs.api.world.block.BlockFace$Companion; - } - const Block: { - new(type: com.chattriggers.ctjs.api.world.block.BlockType, pos: com.chattriggers.ctjs.api.world.block.BlockPos, face: com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined): com.chattriggers.ctjs.api.world.block.Block; - } - interface Block { - getType(): com.chattriggers.ctjs.api.world.block.BlockType; - getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; - getFace(): com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined; - getX(): number; - getY(): number; - getZ(): number; - withType(type: com.chattriggers.ctjs.api.world.block.BlockType): com.chattriggers.ctjs.api.world.block.Block; - withPos(pos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; - /** - * Narrows this block to reference a certain face. Used by - * [Player.lookingAt] to specify the block face - * being looked at. - */ - withFace(face: com.chattriggers.ctjs.api.world.block.BlockFace): com.chattriggers.ctjs.api.world.block.Block; - getState(): net.minecraft.world.level.block.state.BlockState | null | undefined; - isEmittingPower(): boolean; - isEmittingPower(face: com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined): boolean; - getEmittingPower(): number; - getEmittingPower(face: com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined): number; - isReceivingPower(): boolean; - getReceivingPower(): number; - /** - * Checks whether the block can be mined with the tool in the player's hand - * - * @return whether the block can be mined - */ - canBeHarvested(): boolean; - canBeHarvestedWith(item: com.chattriggers.ctjs.api.inventory.Item): boolean; - } - } - namespace pathfinding { - const Swift: { - new(): com.chattriggers.ctjs.api.world.pathfinding.Swift; - } - interface Swift extends net.fabricmc.api.ClientModInitializer { - } - const Swift$Companion: { - executor: java.util.concurrent.ExecutorService; - new(): com.chattriggers.ctjs.api.world.pathfinding.Swift$Companion; - } - interface Swift$Companion { - executor: java.util.concurrent.ExecutorService; - new(): com.chattriggers.ctjs.api.world.pathfinding.Swift$Companion; - getCHUNKS_PER_TICK(): number; - getMAXIMUM_CACHED_CHUNKS(): number; - } - const NativeVoxelFlags: { - new(): com.chattriggers.ctjs.api.world.pathfinding.NativeVoxelFlags; - } - interface NativeVoxelFlags { - new(): com.chattriggers.ctjs.api.world.pathfinding.NativeVoxelFlags; - getPASSABLE(): number; - getSOLID(): number; - getPASSABLE_FLY(): number; - getBLOCKING_WALL(): number; - getFLUID(): number; - getSLAB_BOTTOM(): number; - getSLAB_TOP(): number; - getFENCE_LIKE(): number; - getSTAIRS_BOTTOM(): number; - getCARPET_LIKE(): number; - getETHER_PASSABLE(): number; - getETHER_TELEPORT_CLEAR(): number; - getETHER_FEET_BLOCKER(): number; - } - const NativeStateEncoder: { - flagsForStateId(stateId: number): number; - flagsForState(state: net.minecraft.world.level.block.state.BlockState): number; - flagsShortForState(state: net.minecraft.world.level.block.state.BlockState): number; - flagsShortForStateId(stateId: number): number; - new(): com.chattriggers.ctjs.api.world.pathfinding.NativeStateEncoder; - } - interface NativeStateEncoder { - flagsForStateId(stateId: number): number; - flagsForState(state: net.minecraft.world.level.block.state.BlockState): number; - flagsShortForState(state: net.minecraft.world.level.block.state.BlockState): number; - flagsShortForStateId(stateId: number): number; - new(): com.chattriggers.ctjs.api.world.pathfinding.NativeStateEncoder; - } - const NativeEtherwarpResult: { - path: Array; - angles: kotlin.FloatArray; - timeMs: number; - nodesExplored: number; - nanosecondsPerNode: number; - new(path: Array, angles: kotlin.FloatArray, timeMs: number, nodesExplored: number, nanosecondsPerNode: number): com.chattriggers.ctjs.api.world.pathfinding.NativeEtherwarpResult; - } - interface NativeEtherwarpResult { - } - const NativePathfinderBridge: { - NativePathSearchRequest: typeof com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest; - NativeEtherwarpSearchRequest: typeof com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest; - isAvailable(): boolean; - getLastError(): string | null | undefined; - setWorld(worldKey: string, minY: number, maxY: number): void; - clearWorld(): void; - upsertChunk(chunkX: number, chunkZ: number, minY: number, maxY: number, sectionMask: number, sectionFlags: Array): void; - applyBlockUpdates(updates: Array): void; - findPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativePathResult | null | undefined; - findEtherwarpPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativeEtherwarpResult | null | undefined; - cancelSearch(): void; - new(): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge; - } - interface NativePathfinderBridge { - isAvailable(): boolean; - getLastError(): string | null | undefined; - setWorld(worldKey: string, minY: number, maxY: number): void; - clearWorld(): void; - upsertChunk(chunkX: number, chunkZ: number, minY: number, maxY: number, sectionMask: number, sectionFlags: Array): void; - applyBlockUpdates(updates: Array): void; - findPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativePathResult | null | undefined; - findEtherwarpPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativeEtherwarpResult | null | undefined; - cancelSearch(): void; - new(): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge; - } - const NativePathfinderBridge$NativePathSearchRequest: { - new(startPoints: Array, endPoints: Array, isFly: boolean, maxIterations: number, heuristicWeight: number, nonPrimaryStartPenalty: number, moveOrderOffset: number, avoidMeta: Array, avoidPenalty: kotlin.DoubleArray): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest; - } - interface NativePathfinderBridge$NativePathSearchRequest { - getStartPoints(): Array; - getEndPoints(): Array; - isFly(): boolean; - getMaxIterations(): number; - getHeuristicWeight(): number; - getNonPrimaryStartPenalty(): number; - getMoveOrderOffset(): number; - getAvoidMeta(): Array; - getAvoidPenalty(): kotlin.DoubleArray; - component1(): Array; - component2(): Array; - component3(): boolean; - component4(): number; - component5(): number; - component6(): number; - component7(): number; - component8(): Array; - component9(): kotlin.DoubleArray; - copy(startPoints: Array, endPoints: Array, isFly: boolean, maxIterations: number, heuristicWeight: number, nonPrimaryStartPenalty: number, moveOrderOffset: number, avoidMeta: Array, avoidPenalty: kotlin.DoubleArray): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest; - } - const NativePathResult: { - path: Array; - keyPath: Array; - timeMs: number; - nodesExplored: number; - nanosecondsPerNode: number; - selectedStartIndex: number; - pathFlags: Array; - keyNodeFlags: Array; - keyNodeMetrics: Array; - pathSignature: string; - new(path: Array, keyPath: Array, timeMs: number, nodesExplored: number, nanosecondsPerNode: number, selectedStartIndex: number, pathFlags: Array, keyNodeFlags: Array, keyNodeMetrics: Array, pathSignature: string): com.chattriggers.ctjs.api.world.pathfinding.NativePathResult; - } - interface NativePathResult { - } - const NativePathfinderBridge$NativeEtherwarpSearchRequest: { - new(goalX: number, goalY: number, goalZ: number, startEyeX: number, startEyeY: number, startEyeZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest; - } - interface NativePathfinderBridge$NativeEtherwarpSearchRequest { - getGoalX(): number; - getGoalY(): number; - getGoalZ(): number; - getStartEyeX(): number; - getStartEyeY(): number; - getStartEyeZ(): number; - getMaxIterations(): number; - getThreadCount(): number; - getYawStep(): number; - getPitchStep(): number; - getNewNodeCost(): number; - getHeuristicWeight(): number; - getRayLength(): number; - getRewireEpsilon(): number; - getEyeHeight(): number; - component1(): number; - component2(): number; - component3(): number; - component4(): number; - component5(): number; - component6(): number; - component7(): number; - component8(): number; - component9(): number; - component10(): number; - component11(): number; - component12(): number; - component13(): number; - component14(): number; - component15(): number; - copy(goalX: number, goalY: number, goalZ: number, startEyeX: number, startEyeY: number, startEyeZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest; - } - const CachedWorld: { - getBlockFlags(x: number, y: number, z: number): number | null | undefined; - getChunk(x: number, z: number): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk | null | undefined; - new(): com.chattriggers.ctjs.api.world.pathfinding.CachedWorld; - } - interface CachedWorld { - getBlockFlags(x: number, y: number, z: number): number | null | undefined; - getChunk(x: number, z: number): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk | null | undefined; - new(): com.chattriggers.ctjs.api.world.pathfinding.CachedWorld; - onPacketReceive(packet: net.minecraft.network.protocol.Packet): void; - processPendingChunks(): void; - saveAndClear(lobbyName: string): void; - load(lobbyName: string): void; - waitForLoad(): void; - clear(): void; - getCacheStats(): string; - setUnlimitedChunkCache(enabled: boolean): void; - setWorldKey(newWorldKey: string | null | undefined): void; - } - const CachedChunk: { - minY: number; - maxY: number; - ready: boolean; - new(minY: number, maxY: number): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk; - } - interface CachedChunk { - getFlags(localX: number, y: number, localZ: number): number; - setFlags(localX: number, y: number, localZ: number, flags: number): void; - hasSection(index: number): boolean; - copySectionFlags(index: number, dest: Array, destOffset: number): void; - setSection(sectionIndex: number, data: Array): void; - } - const CachedChunk$Companion: { - AIR_FLAGS: number; - new(): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk$Companion; - } - interface CachedChunk$Companion { - AIR_FLAGS: number; - new(): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk$Companion; - } - const PathManager: { - isSearching(): boolean; - findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number): boolean; - findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number): boolean; - findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number, isFly: boolean): boolean; - findPath(startPoints: Array>, endPoints: Array>): boolean; - findPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; - findPath(startPoints: Array>, endPoints: Array>, maxIterations: number, isFly: boolean): boolean; - findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array): boolean; - findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number): boolean; - findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number, isFly: boolean): boolean; - findFlyPath(startPoints: Array>, endPoints: Array>): boolean; - findFlyPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): boolean; - isFlyPositionClear(x: number, y: number, z: number): boolean; - isValidEtherwarpLanding(x: number, y: number, z: number): boolean; - getEtherwarpLandingCenter(x: number, y: number, z: number): kotlin.DoubleArray | null | undefined; - getEtherwarpLandingCandidates(anchorX: number, anchorY: number, anchorZ: number, radius: number, maxDistance: number, sortOriginX: number, sortOriginY: number, sortOriginZ: number): com.chattriggers.ctjs.api.world.pathfinding.EtherwarpLandingCandidatesResult | null | undefined; - getCurrentEtherwarpEyeHeight(): number; - getCurrentEtherwarpSneakOffset(): number; - cancelSearch(): void; - getPathArray(): Array; - getKeyNodesArray(): Array; - getEtherwarpPathArray(): Array; - getEtherwarpAnglesArray(): kotlin.FloatArray; - getPathFlagsArray(): Array; - getKeyNodeFlagsArray(): Array; - getKeyNodeMetricsArray(): Array; - getPathSignature(): string; - getPathFlagBits(): Array; - getEtherwarpVoxelFlagsAt(x: number, y: number, z: number): number; - isEtherwarpSupportSolid(flags: number): boolean; - getEtherwarpStandOffsetForFlags(flags: number): number; - isEtherwarpTeleportSpaceClearFlags(flags: number): boolean; - addTransientAvoidPoint(x: number, y: number, z: number): void; - addTransientAvoidPoint(x: number, y: number, z: number, radius: number): void; - addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number): void; - addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number, ttlSearches: number): void; - addTransientAvoidPoints(points: Array): void; - addTransientAvoidPoints(points: Array, radius: number): void; - addTransientAvoidPoints(points: Array, radius: number, penalty: number): void; - addTransientAvoidPoints(points: Array, radius: number, penalty: number, ttlSearches: number): void; - clearTransientAvoidPoints(): void; - getPathSize(): number; - getEtherwarpPathSize(): number; - getKeyNodeCount(): number; - getLastTimeMs(): number; - getEtherwarpLastTimeMs(): number; - getNodesExplored(): number; - getEtherwarpNodesExplored(): number; - getNanosecondsPerNode(): number; - getEtherwarpNanosecondsPerNode(): number; - getSelectedStartIndex(): number; - setSearchVariantSeed(seed: number): void; - getLastError(): string | null | undefined; - hasPath(): boolean; - hasEtherwarpPath(): boolean; - clear(): void; - new(): com.chattriggers.ctjs.api.world.pathfinding.PathManager; - } - interface PathManager { - isSearching(): boolean; - findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number): boolean; - findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number): boolean; - findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number, isFly: boolean): boolean; - findPath(startPoints: Array>, endPoints: Array>): boolean; - findPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; - findPath(startPoints: Array>, endPoints: Array>, maxIterations: number, isFly: boolean): boolean; - findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array): boolean; - findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number): boolean; - findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number, isFly: boolean): boolean; - findFlyPath(startPoints: Array>, endPoints: Array>): boolean; - findFlyPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number): boolean; - findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): boolean; - isFlyPositionClear(x: number, y: number, z: number): boolean; - isValidEtherwarpLanding(x: number, y: number, z: number): boolean; - getEtherwarpLandingCenter(x: number, y: number, z: number): kotlin.DoubleArray | null | undefined; - getEtherwarpLandingCandidates(anchorX: number, anchorY: number, anchorZ: number, radius: number, maxDistance: number, sortOriginX: number, sortOriginY: number, sortOriginZ: number): com.chattriggers.ctjs.api.world.pathfinding.EtherwarpLandingCandidatesResult | null | undefined; - getCurrentEtherwarpEyeHeight(): number; - getCurrentEtherwarpSneakOffset(): number; - cancelSearch(): void; - getPathArray(): Array; - getKeyNodesArray(): Array; - getEtherwarpPathArray(): Array; - getEtherwarpAnglesArray(): kotlin.FloatArray; - getPathFlagsArray(): Array; - getKeyNodeFlagsArray(): Array; - getKeyNodeMetricsArray(): Array; - getPathSignature(): string; - getPathFlagBits(): Array; - getEtherwarpVoxelFlagsAt(x: number, y: number, z: number): number; - isEtherwarpSupportSolid(flags: number): boolean; - getEtherwarpStandOffsetForFlags(flags: number): number; - isEtherwarpTeleportSpaceClearFlags(flags: number): boolean; - addTransientAvoidPoint(x: number, y: number, z: number): void; - addTransientAvoidPoint(x: number, y: number, z: number, radius: number): void; - addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number): void; - addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number, ttlSearches: number): void; - addTransientAvoidPoints(points: Array): void; - addTransientAvoidPoints(points: Array, radius: number): void; - addTransientAvoidPoints(points: Array, radius: number, penalty: number): void; - addTransientAvoidPoints(points: Array, radius: number, penalty: number, ttlSearches: number): void; - clearTransientAvoidPoints(): void; - getPathSize(): number; - getEtherwarpPathSize(): number; - getKeyNodeCount(): number; - getLastTimeMs(): number; - getEtherwarpLastTimeMs(): number; - getNodesExplored(): number; - getEtherwarpNodesExplored(): number; - getNanosecondsPerNode(): number; - getEtherwarpNanosecondsPerNode(): number; - getSelectedStartIndex(): number; - setSearchVariantSeed(seed: number): void; - getLastError(): string | null | undefined; - hasPath(): boolean; - hasEtherwarpPath(): boolean; - clear(): void; - new(): com.chattriggers.ctjs.api.world.pathfinding.PathManager; - getFLAG_FLUID_FEET(): number; - getFLAG_FLUID_HEAD(): number; - getFLAG_LOW_HEADROOM(): number; - getFLAG_NEAR_EDGE(): number; - getFLAG_NEAR_WALL(): number; - getFLAG_STEP_UP_NEXT(): number; - getFLAG_DROP_NEXT(): number; - getFLAG_TIGHT_CORRIDOR(): number; - getETHERWARP_VOXEL_SOLID(): number; - getETHERWARP_VOXEL_FENCE_LIKE(): number; - getETHERWARP_VOXEL_TELEPORT_CLEAR(): number; - getETHERWARP_VOXEL_FEET_BLOCKER(): number; - } - const EtherwarpLandingCandidatesResult: { - goals: Array; - centers: kotlin.DoubleArray; - new(goals: Array, centers: kotlin.DoubleArray): com.chattriggers.ctjs.api.world.pathfinding.EtherwarpLandingCandidatesResult; - } - interface EtherwarpLandingCandidatesResult { - } - const HypixelManager: { - new(): com.chattriggers.ctjs.api.world.pathfinding.HypixelManager; - } - interface HypixelManager { - new(): com.chattriggers.ctjs.api.world.pathfinding.HypixelManager; - init(): void; - onDisconnect(): void; - } - const WynncraftManager: { - new(): com.chattriggers.ctjs.api.world.pathfinding.WynncraftManager; - } - interface WynncraftManager { - new(): com.chattriggers.ctjs.api.world.pathfinding.WynncraftManager; - init(): void; - onDisconnect(): void; - } - const WorldSerializer: { - new(): com.chattriggers.ctjs.api.world.pathfinding.WorldSerializer; - } - interface WorldSerializer { - new(): com.chattriggers.ctjs.api.world.pathfinding.WorldSerializer; - save(name: string, chunks: Map): void; - load(name: string): java.util.concurrent.ConcurrentHashMap | null | undefined; - } - } - const Chunk: { - new(mcValue: net.minecraft.world.level.chunk.ChunkAccess): com.chattriggers.ctjs.api.world.Chunk; - } - interface Chunk extends com.chattriggers.ctjs.api.CTWrapper { - /** - * Gets the x position of the chunk - */ - getX(): number; - /** - * Gets the z position of the chunk - */ - getZ(): number; - /** - * Gets the minimum x coordinate of a block in the chunk - * - * @return the minimum x coordinate - */ - getMinBlockX(): number; - /** - * Gets the minimum z coordinate of a block in the chunk - * - * @return the minimum z coordinate - */ - getMinBlockZ(): number; - /** - * Gets every entity in this chunk - * - * @return the entity list - */ - getAllEntities(): Array; - /** - * Gets every entity in this chunk of a certain class - * - * @param clazz the class to filter for (Use `Java.type().class` to get this) - * @return the entity list - */ - getAllEntitiesOfType(clazz: java.lang.Class): Array; - /** - * Gets every block entity in this chunk - * - * @return the block entity list - */ - getAllBlockEntities(): Array; - /** - * Gets every block entity in this chunk of a certain class - * - * @param clazz the class to filter for (Use `Java.type().class` to get this) - * @return the block entity list - */ - getAllBlockEntitiesOfType(clazz: java.lang.Class): Array; - } - const PotionEffectType: { - new(type: net.minecraft.world.effect.MobEffect): com.chattriggers.ctjs.api.world.PotionEffectType; - } - interface PotionEffectType { - getType(): net.minecraft.world.effect.MobEffect; - /** - * The Int associated with this type - */ - getRawId(): number; - /** - * Whether this effect is instant (e.g. instant health) - */ - isInstant(): boolean; - /** - * The raw key used for this effect type - */ - getTranslationKey(): string; - /** - * The user-friendly name of this type as a [TextComponent] - */ - getName(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * The [net.minecraft.entity.effect.StatusEffectCategory] of this type - */ - getCategory(): net.minecraft.world.effect.MobEffectCategory; - /** - * The color of this type - */ - getColor(): java.awt.Color; - } - const PotionEffect: { - new(effect: net.minecraft.world.effect.MobEffectInstance): com.chattriggers.ctjs.api.world.PotionEffect; - } - interface PotionEffect { - getEffect(): net.minecraft.world.effect.MobEffectInstance; - /** - * The type of this potion - */ - getType(): com.chattriggers.ctjs.api.world.PotionEffectType; - /** - * Returns the translation key of the potion. - * Ex: "potion.poison" - */ - getName(): string; - /** - * Returns the localized name of the potion that - * is displayed in the player's inventory. - * Ex: "Poison" - */ - getLocalizedName(): string; - getAmplifier(): number; - getDuration(): number; - getId(): number; - getAmbient(): boolean; - isInfinite(): boolean; - getShowsParticles(): boolean; - } - const World: { - BorderWrapper: typeof com.chattriggers.ctjs.api.world.World$BorderWrapper; - SpawnWrapper: typeof com.chattriggers.ctjs.api.world.World$SpawnWrapper; - ParticleWrapper: typeof com.chattriggers.ctjs.api.world.World$ParticleWrapper; - spawn: com.chattriggers.ctjs.api.world.World$SpawnWrapper; - particle: com.chattriggers.ctjs.api.world.World$ParticleWrapper; - border: com.chattriggers.ctjs.api.world.World$BorderWrapper; - toMC(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; - getWorld(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; - isLoaded(): boolean; - isRaining(): boolean; - getTime(): number; - /** - * Gets the [Block] at a location in the world. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return the [Block] at the location - */ - getBlockAt(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.Block; - /** - * Gets the [Block] at a location in the world. - * - * @param pos The block position - * @return the [Block] at the location - */ - getBlockAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; - getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number): Array; - getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number, types: Array): Array; - /** - * Gets the [BlockState] at a location in the world. - * - * @param pos The block position - * @return the [BlockState] at the location - */ - getBlockStateAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): net.minecraft.world.level.block.state.BlockState; - /** - * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu - * - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return the skylight level at the location - */ - getSkyLightLevel(x: number, y: number, z: number): number; - /** - * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu - * - * @param pos The block position - * @return the skylight level at the location - */ - getSkyLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; - /** - * Gets the block light level at the given position. This is the value seen in the debug (F3) menu - * - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return the block light level at the location - */ - getBlockLightLevel(x: number, y: number, z: number): number; - /** - * Gets the block light level at the given position. This is the value seen in the debug (F3) menu - * - * @param pos The block position - * @return the block light level at the location - */ - getBlockLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; - /** - * Gets all of the players in the world, and returns their wrapped versions. - * - * @return the players - */ - getAllPlayers(): Array; - /** - * Gets a player by their username, must be in the currently loaded chunks! - * - * @param name the username - * @return the player with said username, or null if they don't exist. - */ - getPlayerByName(name: string): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; - getChunk(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.Chunk; - getAllEntities(): Array; - /** - * Gets every entity loaded in the world of a certain class - * - * @param clazz the class to filter for (Use `Java.type().class` to get this) - * @return the entity list - */ - getAllEntitiesOfType(clazz: java.lang.Class): Array; - getAllBlockEntities(): Array; - getAllBlockEntitiesOfType(clazz: java.lang.Class): Array; - /** - * Returns the TPS of the current world. - * - * On modern version (1.20.3+), this is variable. On earlier versions, - * it is always 20. - */ - getTicksPerSecond(): number; - new(): com.chattriggers.ctjs.api.world.World; - } - interface World { - spawn: com.chattriggers.ctjs.api.world.World$SpawnWrapper; - particle: com.chattriggers.ctjs.api.world.World$ParticleWrapper; - border: com.chattriggers.ctjs.api.world.World$BorderWrapper; - toMC(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; - getWorld(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; - isLoaded(): boolean; - isRaining(): boolean; - getTime(): number; - /** - * Gets the [Block] at a location in the world. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return the [Block] at the location - */ - getBlockAt(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.Block; - /** - * Gets the [Block] at a location in the world. - * - * @param pos The block position - * @return the [Block] at the location - */ - getBlockAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; - getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number): Array; - getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number, types: Array): Array; - /** - * Gets the [BlockState] at a location in the world. - * - * @param pos The block position - * @return the [BlockState] at the location - */ - getBlockStateAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): net.minecraft.world.level.block.state.BlockState; - /** - * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu - * - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return the skylight level at the location - */ - getSkyLightLevel(x: number, y: number, z: number): number; - /** - * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu - * - * @param pos The block position - * @return the skylight level at the location - */ - getSkyLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; - /** - * Gets the block light level at the given position. This is the value seen in the debug (F3) menu - * - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return the block light level at the location - */ - getBlockLightLevel(x: number, y: number, z: number): number; - /** - * Gets the block light level at the given position. This is the value seen in the debug (F3) menu - * - * @param pos The block position - * @return the block light level at the location - */ - getBlockLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; - /** - * Gets all of the players in the world, and returns their wrapped versions. - * - * @return the players - */ - getAllPlayers(): Array; - /** - * Gets a player by their username, must be in the currently loaded chunks! - * - * @param name the username - * @return the player with said username, or null if they don't exist. - */ - getPlayerByName(name: string): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; - getChunk(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.Chunk; - getAllEntities(): Array; - /** - * Gets every entity loaded in the world of a certain class - * - * @param clazz the class to filter for (Use `Java.type().class` to get this) - * @return the entity list - */ - getAllEntitiesOfType(clazz: java.lang.Class): Array; - getAllBlockEntities(): Array; - getAllBlockEntitiesOfType(clazz: java.lang.Class): Array; - /** - * Returns the TPS of the current world. - * - * On modern version (1.20.3+), this is variable. On earlier versions, - * it is always 20. - */ - getTicksPerSecond(): number; - new(): com.chattriggers.ctjs.api.world.World; - } - const World$SpawnWrapper: { - /** - * World spawn object for getting spawn location. - */ - new(): com.chattriggers.ctjs.api.world.World$SpawnWrapper; - } - interface World$SpawnWrapper { - /** - * Gets the spawn x location. - * - * @return the spawn x location. - */ - getX(): number; - /** - * Gets the spawn y location. - * - * @return the spawn y location. - */ - getY(): number; - /** - * Gets the spawn z location. - * - * @return the spawn z location. - */ - getZ(): number; - } - const World$ParticleWrapper: { - new(): com.chattriggers.ctjs.api.world.World$ParticleWrapper; - } - interface World$ParticleWrapper { - /** - * Gets an array of all the different particle names you can pass - * to [spawnParticle] - * - * @return the array of name strings - */ - getParticleNames(): Array; - /** - * Spawns a particle into the world with the given attributes, - * which can be configured further with the returned [com.chattriggers.ctjs.api.entity.Particle] - * - * @param particle the name of the particle to spawn, see [getParticleNames] - * @param x the x coordinate to spawn the particle at - * @param y the y coordinate to spawn the particle at - * @param z the z coordinate to spawn the particle at - * @param xSpeed the motion the particle should have in the x direction - * @param ySpeed the motion the particle should have in the y direction - * @param zSpeed the motion the particle should have in the z direction - * @return the newly spawned particle for further configuration - */ - spawnParticle(particle: string, x: number, y: number, z: number, xSpeed: number, ySpeed: number, zSpeed: number): com.chattriggers.ctjs.api.entity.Particle | null | undefined; - spawnParticle(particle: net.minecraft.client.particle.Particle): com.chattriggers.ctjs.api.entity.Particle; - } - const World$BorderWrapper: { - /** - * World border object to get border parameters - */ - new(): com.chattriggers.ctjs.api.world.World$BorderWrapper; - } - interface World$BorderWrapper { - /** - * Gets the border center x location. - * - * @return the border center x location - */ - getCenterX(): number; - /** - * Gets the border center z location. - * - * @return the border center z location - */ - getCenterZ(): number; - /** - * Gets the border size. - * - * @return the border size - */ - getSize(): number; - } - const TabList: { - Name: typeof com.chattriggers.ctjs.api.world.TabList$Name; - toMC(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; - /** - * Gets the scoreboard objective corresponding to the tab list, or null if it doesn't exist - */ - getObjective(): net.minecraft.world.scores.Objective | null | undefined; - /** - * Gets the tab list header as a [TextComponent] - * - * @return the header - */ - getHeaderComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; - /** - * Gets the tab list header as a formatted string. - * - * @return the header - */ - getHeader(): string | null | undefined; - /** - * Sets the header text for the TabList. - * If [header] is null, it will remove the header entirely - * - * @param header the header to set, or null to clear - */ - setHeader(header: any | null | undefined): void; - clearHeader(): void; - /** - * Gets the tab list footer as a [TextComponent] - * - * @return the footer - */ - getFooterComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; - /** - * Gets the tab list footer as a string. - * Be aware that this can contain color codes. - * - * @return the footer - */ - getFooter(): string | null | undefined; - /** - * Sets the footer text for the TabList. - * If [footer] is null, it will remove the footer entirely - * - * @param footer the footer to set, or null to clear - */ - setFooter(footer: any | null | undefined): void; - clearFooter(): void; - /** - * Gets names set in scoreboard objectives - * - * @return The formatted names - */ - getNamesByObjectives(): Array; - /** - * Get all names on the tab list - * - * @return the list of names - */ - getNames(): Array; - /** - * Gets all names in tabs without formatting - * - * @return the unformatted names - */ - getUnformattedNames(): Array; - /** - * Adds a new name to the tab list - * - * @param name the formatted name to add - * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. - * If false, will use a random default skin (Steve, Alex, etc) - */ - addName(name: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Adds a new name to the tab list - * - * @param name the formatted name to add - * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. - * If false, will use a random default skin (Steve, Alex, etc) - */ - addName(name: com.chattriggers.ctjs.api.message.TextComponent, useExistingSkin: boolean): void; - addName(name: string): void; - addName(name: string, useExistingSkin: boolean): void; - /** - * Removes all names from the tab list with a certain name - * - * @param name the name of the entry to remove - */ - removeNames(name: com.chattriggers.ctjs.api.message.TextComponent): void; - removeNames(name: string): void; - new(): com.chattriggers.ctjs.api.world.TabList; - } - interface TabList { - toMC(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; - /** - * Gets the scoreboard objective corresponding to the tab list, or null if it doesn't exist - */ - getObjective(): net.minecraft.world.scores.Objective | null | undefined; - /** - * Gets the tab list header as a [TextComponent] - * - * @return the header - */ - getHeaderComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; - /** - * Gets the tab list header as a formatted string. - * - * @return the header - */ - getHeader(): string | null | undefined; - /** - * Sets the header text for the TabList. - * If [header] is null, it will remove the header entirely - * - * @param header the header to set, or null to clear - */ - setHeader(header: any | null | undefined): void; - clearHeader(): void; - /** - * Gets the tab list footer as a [TextComponent] - * - * @return the footer - */ - getFooterComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; - /** - * Gets the tab list footer as a string. - * Be aware that this can contain color codes. - * - * @return the footer - */ - getFooter(): string | null | undefined; - /** - * Sets the footer text for the TabList. - * If [footer] is null, it will remove the footer entirely - * - * @param footer the footer to set, or null to clear - */ - setFooter(footer: any | null | undefined): void; - clearFooter(): void; - /** - * Gets names set in scoreboard objectives - * - * @return The formatted names - */ - getNamesByObjectives(): Array; - /** - * Get all names on the tab list - * - * @return the list of names - */ - getNames(): Array; - /** - * Gets all names in tabs without formatting - * - * @return the unformatted names - */ - getUnformattedNames(): Array; - /** - * Adds a new name to the tab list - * - * @param name the formatted name to add - * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. - * If false, will use a random default skin (Steve, Alex, etc) - */ - addName(name: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Adds a new name to the tab list - * - * @param name the formatted name to add - * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. - * If false, will use a random default skin (Steve, Alex, etc) - */ - addName(name: com.chattriggers.ctjs.api.message.TextComponent, useExistingSkin: boolean): void; - addName(name: string): void; - addName(name: string, useExistingSkin: boolean): void; - /** - * Removes all names from the tab list with a certain name - * - * @param name the name of the entry to remove - */ - removeNames(name: com.chattriggers.ctjs.api.message.TextComponent): void; - removeNames(name: string): void; - new(): com.chattriggers.ctjs.api.world.TabList; - } - const TabList$Name: { - new(mcValue: net.minecraft.client.multiplayer.PlayerInfo): com.chattriggers.ctjs.api.world.TabList$Name; - } - interface TabList$Name extends com.chattriggers.ctjs.api.CTWrapper { - /** - * Gets the latency associated with this name - * - * @return the latency - */ - getLatency(): number; - /** - * Sets the latency associated with this name. - * - latency between 0 and 149 represents all 5 bars - * - latency between 150 and 299 represents 4 bars - * - latency between 300 and 599 represents 3 bars - * - latency between 600 and 999 represents 2 bars - * - latency between 1000 and more represents 1 bar - * - * @param latency the latency to set - * @return the name to allow for method chaining - */ - setLatency(latency: number): com.chattriggers.ctjs.api.world.TabList$Name; - /** - * Gets the team associated with this name, if it exists - * - * @return the team, or null if it does not exist - */ - getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; - /** - * Sets the team associated with this name - * - * @param team the new team to set for this name. Custom teams can be created - * using [Scoreboard.createTeam] - * @return the score to allow for method chaining - */ - setTeam(team: com.chattriggers.ctjs.api.entity.Team | null | undefined): com.chattriggers.ctjs.api.world.TabList$Name; - /** - * Gets the display text of this name - * - * @return the display name - */ - getName(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets the display name of this name - * - * @param name the new name - * @return the name to allow for method chaining - */ - setName(name: com.chattriggers.ctjs.api.message.TextComponent | null | undefined): com.chattriggers.ctjs.api.world.TabList$Name; - /** - * Removes this name from the tab list - */ - remove(): void; - } - const StructureFinder: { - submitChunkScan(chunkX: number, chunkZ: number): void; - submitBlockUpdate(blockX: number, blockY: number, blockZ: number): void; - getRenderBlocksArray(): Array; - getRenderLabelsArray(): Array; - clear(): void; - shutdown(): void; - new(): com.chattriggers.ctjs.api.world.StructureFinder; - } - interface StructureFinder { - submitChunkScan(chunkX: number, chunkZ: number): void; - submitBlockUpdate(blockX: number, blockY: number, blockZ: number): void; - getRenderBlocksArray(): Array; - getRenderLabelsArray(): Array; - clear(): void; - shutdown(): void; - new(): com.chattriggers.ctjs.api.world.StructureFinder; - } - const BossBars: { - BossBar: typeof com.chattriggers.ctjs.api.world.BossBars$BossBar; - Color: typeof com.chattriggers.ctjs.api.world.BossBars$Color; - Style: typeof com.chattriggers.ctjs.api.world.BossBars$Style; - toMC(): net.minecraft.client.gui.components.BossHealthOverlay; - /** - * Gets the list of currently shown [BossBar]s - * - * @return the currently displayed [BossBar]s - */ - getBossBars(): Array; - /** - * Gets all [BossBar]s with a given name - * - * @param name the name to match - * @return the [BossBar]s - */ - getBossBarsByName(name: string): Array; - /** - * Adds a new [BossBar] to be displayed - * - * Takes a parameter with the following options: - * - name: The name to appear above the BossBar. Defaults to an empty string - * - percent: The percent full the BossBar is. Defaults to 1 (full health) - * - color: The color of the BossBar. Can be any [Color], but defaults to white - * - sections: The number of notches/sections to appear on the BossBar. Can be any [Style], but - * defaults to 1 entire section - * - darkenSky: Whether the BossBar should darken the screen of the player. Defaults to false - * - dragonMusic: Whether the BossBar should play dragon music while in the End. Defaults to false - * - thickenFog: Whether the BossBar should thicken the fog around the player. Defaults to false - * - * @param obj An options bag - * - * @return the [BossBar] for further modification - */ - addBossBar(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Clears all [BossBar]s on screen - */ - clearBossBars(): void; - /** - * Removes all [BossBar]s with the given name - * - * @param name the name to match - */ - removeBossBarsByName(name: string): void; - /** - * Removes the given [BossBar] - * - * @param bossBar the BossBar to remove - */ - removeBossBar(bossBar: com.chattriggers.ctjs.api.world.BossBars$BossBar): void; - new(): com.chattriggers.ctjs.api.world.BossBars; - } - interface BossBars { - toMC(): net.minecraft.client.gui.components.BossHealthOverlay; - /** - * Gets the list of currently shown [BossBar]s - * - * @return the currently displayed [BossBar]s - */ - getBossBars(): Array; - /** - * Gets all [BossBar]s with a given name - * - * @param name the name to match - * @return the [BossBar]s - */ - getBossBarsByName(name: string): Array; - /** - * Adds a new [BossBar] to be displayed - * - * Takes a parameter with the following options: - * - name: The name to appear above the BossBar. Defaults to an empty string - * - percent: The percent full the BossBar is. Defaults to 1 (full health) - * - color: The color of the BossBar. Can be any [Color], but defaults to white - * - sections: The number of notches/sections to appear on the BossBar. Can be any [Style], but - * defaults to 1 entire section - * - darkenSky: Whether the BossBar should darken the screen of the player. Defaults to false - * - dragonMusic: Whether the BossBar should play dragon music while in the End. Defaults to false - * - thickenFog: Whether the BossBar should thicken the fog around the player. Defaults to false - * - * @param obj An options bag - * - * @return the [BossBar] for further modification - */ - addBossBar(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Clears all [BossBar]s on screen - */ - clearBossBars(): void; - /** - * Removes all [BossBar]s with the given name - * - * @param name the name to match - */ - removeBossBarsByName(name: string): void; - /** - * Removes the given [BossBar] - * - * @param bossBar the BossBar to remove - */ - removeBossBar(bossBar: com.chattriggers.ctjs.api.world.BossBars$BossBar): void; - new(): com.chattriggers.ctjs.api.world.BossBars; - } - const BossBars$BossBar: { - new(mcValue: net.minecraft.client.gui.components.LerpingBossEvent): com.chattriggers.ctjs.api.world.BossBars$BossBar; - } - interface BossBars$BossBar extends com.chattriggers.ctjs.api.CTWrapper { - /** - * Gets the UUID of this BossBar - * - * @return the uuid - */ - getUUID(): java.util.UUID; - /** - * Gets the name of this BossBar - * - * @return the name - */ - getName(): string; - /** - * Sets the name of this BossBar - * - * @param name the name to set - */ - setName(name: string): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Gets how full this BossBar is - * - * @return how full the BossBar is - */ - getPercent(): number; - /** - * Sets how full this BossBar is - * - * @param percent how full to set this BossBar. Must be between 0 and 1 - */ - setPercent(percent: number): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Gets the [Color] of this BossBar - */ - getColor(): com.chattriggers.ctjs.api.world.BossBars$Color; - /** - * Sets the [Color] of this BossBar - * - * @param color the color to set. Can be [Color], [MCBossBarColor], or a string - */ - setColor(color: any): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Gets the style of this BossBar. e.g. how many notches are displayed - */ - getStyle(): com.chattriggers.ctjs.api.world.BossBars$Style; - /** - * Sets the style of this BossBar - * - * @param style the style to set. Can be [Style], [MCBossBarStyle], a string, - * or a number of how many notches to put - */ - setStyle(style: any): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Gets whether this BossBar darkens the sky - */ - shouldDarkenSky(): boolean; - /** - * Sets whether this BossBar should darken the sky - * - * @param darken whether to darken the sky - */ - setShouldDarkenSky(darken: boolean): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Gets whether this BossBar will play dragon music. - * This will do nothing when the player is not in the end dimension - */ - hasDragonMusic(): boolean; - /** - * Sets whether this BossBar will play dragon music - * - * @param music whether to play dragon music - */ - setHasDragonMusic(music: boolean): com.chattriggers.ctjs.api.world.BossBars$BossBar; - /** - * Gets whether this BossBar should thicken the fog around the player - */ - shouldThickenFog(): boolean; - /** - * Sets whether this BossBar should thicken the fog around the player - * - * @param fog whether to thicken the fog - */ - setShouldThickenFog(fog: boolean): com.chattriggers.ctjs.api.world.BossBars$BossBar; - } - const BossBars$Color: { - PINK: com.chattriggers.ctjs.api.world.BossBars$Color; - BLUE: com.chattriggers.ctjs.api.world.BossBars$Color; - RED: com.chattriggers.ctjs.api.world.BossBars$Color; - GREEN: com.chattriggers.ctjs.api.world.BossBars$Color; - YELLOW: com.chattriggers.ctjs.api.world.BossBars$Color; - PURPLE: com.chattriggers.ctjs.api.world.BossBars$Color; - WHITE: com.chattriggers.ctjs.api.world.BossBars$Color; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.world.BossBars$Color; - } - interface BossBars$Color extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { - } - const BossBars$Color$Companion: { - fromMC(mcValue: net.minecraft.world.BossEvent$BossBarColor): com.chattriggers.ctjs.api.world.BossBars$Color; - from(value: any): com.chattriggers.ctjs.api.world.BossBars$Color; - new(): unknown; - } - interface BossBars$Color$Companion { - fromMC(mcValue: net.minecraft.world.BossEvent$BossBarColor): com.chattriggers.ctjs.api.world.BossBars$Color; - from(value: any): com.chattriggers.ctjs.api.world.BossBars$Color; - new(): unknown; - } - const BossBars$Style: { - ONE: com.chattriggers.ctjs.api.world.BossBars$Style; - SIX: com.chattriggers.ctjs.api.world.BossBars$Style; - TEN: com.chattriggers.ctjs.api.world.BossBars$Style; - TWELVE: com.chattriggers.ctjs.api.world.BossBars$Style; - TWENTY: com.chattriggers.ctjs.api.world.BossBars$Style; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.world.BossBars$Style; - } - interface BossBars$Style extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { - getSections(): number; - } - const BossBars$Style$Companion: { - fromMC(mcValue: net.minecraft.world.BossEvent$BossBarOverlay): com.chattriggers.ctjs.api.world.BossBars$Style; - from(value: any): com.chattriggers.ctjs.api.world.BossBars$Style; - new(): unknown; - } - interface BossBars$Style$Companion { - fromMC(mcValue: net.minecraft.world.BossEvent$BossBarOverlay): com.chattriggers.ctjs.api.world.BossBars$Style; - from(value: any): com.chattriggers.ctjs.api.world.BossBars$Style; - new(): unknown; - } - const Scoreboard: { - Score: typeof com.chattriggers.ctjs.api.world.Scoreboard$Score; - toMC(): net.minecraft.world.scores.Scoreboard | null | undefined; - getSidebar(): net.minecraft.world.scores.Objective | null | undefined; - /** - * Gets the top-most string which is displayed on the scoreboard. (doesn't have a score on the side). - * Be aware that this can contain color codes. - * - * @return the scoreboard title - */ - getTitle(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets the scoreboard title. - * - * @param title the new title - * @return the scoreboard title - */ - setTitle(title: com.chattriggers.ctjs.api.message.TextComponent): void; - setTitle(title: string): void; - /** - * Get all currently visible strings on the scoreboard. (excluding title) - * Be aware that this can contain color codes. - * - * @return the list of lines - */ - getLines(): Array; - /** - * Get all currently visible strings on the scoreboard. (excluding title) - * Be aware that this can contain color codes. - * - * @return the list of lines - */ - getLines(descending: boolean): Array; - /** - * Gets the line at the specified index (0 based) - * Equivalent to Scoreboard.getLines().get(index) - * - * @param index the line index - * @return the score object at the index - */ - getLineByIndex(index: number): com.chattriggers.ctjs.api.world.Scoreboard$Score; - /** - * Gets a list of lines that have a certain score, - * i.e. the numbers shown on the right - * - * @param score the score to look for - * @return a list of actual score objects - */ - getLinesByScore(score: number): Array; - /** - * Sets a line in the scoreboard to the specified name and score. - * - * @param score the score value for this item - * @param line the [TextComponent] to display on said line - * @param override whether to remove old lines with the same score - */ - setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Sets a line in the scoreboard to the specified name and score. - * - * @param score the score value for this item - * @param line the [TextComponent] to display on said line - * @param override whether to remove old lines with the same score - */ - setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent, override: boolean): void; - setLine(score: number, line: string): void; - setLine(score: number, line: string, override: boolean): void; - /** - * Adds a line to the scoreboard - * - * @param score the score value for this item - * @param line the [TextComponent] to display on said line - */ - addLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; - addLine(score: number, line: string): void; - /** - * Removes all lines from the scoreboard matching with a certain score - * - * @param score the score of the lines to remove - */ - removeScores(score: number): void; - /** - * Removes the line at a certain index - * - * @param index the index of the line to remove - */ - removeIndex(index: number): void; - /** - * Removes the line at a certain index - * - * @param index the index of the line to remove - */ - removeIndex(index: number, descending: boolean): void; - setShouldRender(shouldRender: boolean): void; - getShouldRender(): boolean; - /** - * Creates or gets a [Team] with a given name - * - * @param name the name of the team - */ - createTeam(name: string): com.chattriggers.ctjs.api.entity.Team; - new(): com.chattriggers.ctjs.api.world.Scoreboard; - } - interface Scoreboard { - toMC(): net.minecraft.world.scores.Scoreboard | null | undefined; - getSidebar(): net.minecraft.world.scores.Objective | null | undefined; - /** - * Gets the top-most string which is displayed on the scoreboard. (doesn't have a score on the side). - * Be aware that this can contain color codes. - * - * @return the scoreboard title - */ - getTitle(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets the scoreboard title. - * - * @param title the new title - * @return the scoreboard title - */ - setTitle(title: com.chattriggers.ctjs.api.message.TextComponent): void; - setTitle(title: string): void; - /** - * Get all currently visible strings on the scoreboard. (excluding title) - * Be aware that this can contain color codes. - * - * @return the list of lines - */ - getLines(): Array; - /** - * Get all currently visible strings on the scoreboard. (excluding title) - * Be aware that this can contain color codes. - * - * @return the list of lines - */ - getLines(descending: boolean): Array; - /** - * Gets the line at the specified index (0 based) - * Equivalent to Scoreboard.getLines().get(index) - * - * @param index the line index - * @return the score object at the index - */ - getLineByIndex(index: number): com.chattriggers.ctjs.api.world.Scoreboard$Score; - /** - * Gets a list of lines that have a certain score, - * i.e. the numbers shown on the right - * - * @param score the score to look for - * @return a list of actual score objects - */ - getLinesByScore(score: number): Array; - /** - * Sets a line in the scoreboard to the specified name and score. - * - * @param score the score value for this item - * @param line the [TextComponent] to display on said line - * @param override whether to remove old lines with the same score - */ - setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Sets a line in the scoreboard to the specified name and score. - * - * @param score the score value for this item - * @param line the [TextComponent] to display on said line - * @param override whether to remove old lines with the same score - */ - setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent, override: boolean): void; - setLine(score: number, line: string): void; - setLine(score: number, line: string, override: boolean): void; - /** - * Adds a line to the scoreboard - * - * @param score the score value for this item - * @param line the [TextComponent] to display on said line - */ - addLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; - addLine(score: number, line: string): void; - /** - * Removes all lines from the scoreboard matching with a certain score - * - * @param score the score of the lines to remove - */ - removeScores(score: number): void; - /** - * Removes the line at a certain index - * - * @param index the index of the line to remove - */ - removeIndex(index: number): void; - /** - * Removes the line at a certain index - * - * @param index the index of the line to remove - */ - removeIndex(index: number, descending: boolean): void; - setShouldRender(shouldRender: boolean): void; - getShouldRender(): boolean; - /** - * Creates or gets a [Team] with a given name - * - * @param name the name of the team - */ - createTeam(name: string): com.chattriggers.ctjs.api.entity.Team; - new(): com.chattriggers.ctjs.api.world.Scoreboard; - } - const Scoreboard$Score: { - new(mcValue: net.minecraft.world.scores.ScoreAccess): com.chattriggers.ctjs.api.world.Scoreboard$Score; - } - interface Scoreboard$Score extends com.chattriggers.ctjs.api.CTWrapper { - /** - * Gets the team associated with this score, if it exists - * - * @return the team, or null if it does not exist - */ - getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; - /** - * Sets the team associated with this score - * - * @param team the new team to set for this line. Custom teams can be created using [createTeam] - * @return the score to allow for method chaining - */ - setTeam(team: com.chattriggers.ctjs.api.entity.Team | null | undefined): com.chattriggers.ctjs.api.world.Scoreboard$Score; - /** - * Gets the score value for this score, - * i.e. the number on the right of the board - * - * @return the actual point value - */ - getScore(): number; - /** - * Sets the score value for this score - * - * @param score the new point value - * @return the score to allow for method chaining - */ - setScore(score: number): com.chattriggers.ctjs.api.world.Scoreboard$Score; - /** - * Gets the display text of this score - * - * @return the display name - */ - getName(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets the name of this score - * - * @param name the new name - * @return the score to allow for method chaining - */ - setName(name: com.chattriggers.ctjs.api.message.TextComponent | null | undefined): com.chattriggers.ctjs.api.world.Scoreboard$Score; - /** - * Gets the number format of this score - * - * @return the number format - */ - getNumberFormat(): net.minecraft.network.chat.numbers.NumberFormat | null | undefined; - /** - * Sets the number format of this score - * - * @param format either a formatting string, i.e. "&6", style in the form of an object, see [TextComponent], a - * [NumberFormat], or hex value - * @return the score to allow for method chaining - * - * @see [TextComponent] - */ - setNumberFormat(format: any | null | undefined): com.chattriggers.ctjs.api.world.Scoreboard$Score; - /** - * Removes this score from the scoreboard - */ - remove(): void; - } - const Server: { - toMC(): net.minecraft.client.multiplayer.ServerData | null | undefined; - isSingleplayer(): boolean; - /** - * Gets the current server's IP, or "localhost" if the player - * is in a single-player world. - * - * @return The IP of the current server - */ - getIP(): string; - /** - * Gets the current server's name, or "SinglePlayer" if the player - * is in a single-player world. - * - * @return The name of the current server - */ - getName(): string; - /** - * Gets the current server's MOTD, or "SinglePlayer" if the player - * is in a single-player world. - * - * @return The MOTD of the current server - */ - getMOTD(): string; - /** - * Gets the ping to the current server, or 5 if the player - * is in a single-player world. Returns -1 if not in a world - * - * @return The ping to the current server - */ - getPing(): number; - new(): com.chattriggers.ctjs.api.world.Server; - } - interface Server { - toMC(): net.minecraft.client.multiplayer.ServerData | null | undefined; - isSingleplayer(): boolean; - /** - * Gets the current server's IP, or "localhost" if the player - * is in a single-player world. - * - * @return The IP of the current server - */ - getIP(): string; - /** - * Gets the current server's name, or "SinglePlayer" if the player - * is in a single-player world. - * - * @return The name of the current server - */ - getName(): string; - /** - * Gets the current server's MOTD, or "SinglePlayer" if the player - * is in a single-player world. - * - * @return The MOTD of the current server - */ - getMOTD(): string; - /** - * Gets the ping to the current server, or 5 if the player - * is in a single-player world. Returns -1 if not in a world - * - * @return The ping to the current server - */ - getPing(): number; - new(): com.chattriggers.ctjs.api.world.Server; - } - } - namespace entity { - const Entity: { - DimensionType: typeof com.chattriggers.ctjs.api.entity.Entity$DimensionType; - new(mcValue: net.minecraft.world.entity.Entity): com.chattriggers.ctjs.api.entity.Entity; - } - interface Entity extends com.chattriggers.ctjs.api.CTWrapper { - getX(): number; - getY(): number; - getZ(): number; - getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; - getRotation(): net.minecraft.world.phys.Vec2; - getLastX(): number; - getLastY(): number; - getLastZ(): number; - getRenderX(): number; - getRenderY(): number; - getRenderZ(): number; - /** - * Gets the pitch, the horizontal direction the entity is facing towards. - * This has a range of -180 to 180. - * - * @return the entity's pitch - */ - getPitch(): number; - /** - * Gets the yaw, the vertical direction the entity is facing towards. - * This has a range of -180 to 180. - * - * @return the entity's yaw - */ - getYaw(): number; - /** - * Gets the entity's x motion. - * This is the amount the entity will move in the x direction next tick. - * - * @return the entity's x motion - */ - getMotionX(): number; - /** - * Gets the entity's y motion. - * This is the amount the entity will move in the y direction next tick. - * - * @return the entity's y motion - */ - getMotionY(): number; - /** - * Gets the entity's z motion. - * This is the amount the entity will move in the z direction next tick. - * - * @return the entity's z motion - */ - getMotionZ(): number; - /** - * Returns the entity this entity is riding, if one exists - * - * @return an Entity or null - */ - getRiding(): com.chattriggers.ctjs.api.entity.Entity | null | undefined; - /** - * Returns a list of all entity riding this entity - * - * @return List of entities, empty if there are no riders - */ - getRiders(): Array; - /** - * Checks whether the entity is dead. - * This is a fairly loose term, dead for a particle could mean it has faded, - * while dead for an entity means it has no health. - * - * @return whether an entity is dead - */ - isDead(): boolean; - /** - * Gets the entire width of the entity's hitbox - * - * @return the entity's width - */ - getWidth(): number; - /** - * Gets the entire height of the entity's hitbox - * - * @return the entity's height - */ - getHeight(): number; - /** - * Gets the height of the eyes on the entity, - * can be added to its Y coordinate to get the actual Y location of the eyes. - * This value defaults to 85% of an entity's height, however is different for some entities. - * - * @return the height of the entity's eyes - */ - getEyeHeight(): number; - /** - * Gets the name of the entity, could be "Villager", - * or, if the entity has a custom name, it returns that. - * - * @return the (custom) name of the entity as a String - */ - getName(): string; - /** - * Gets the name of the entity, could be "Villager", - * or, if the entity has a custom name, it returns that. - * - * @return the (custom) name of the entity as a [TextComponent] - */ - getNameComponent(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Gets the Java class name of the entity, for example "EntityVillager" - * - * @return the entity's class name - */ - getClassName(): string; - /** - * Gets the Java UUID object of this entity. - * Use of [UUID.toString] in conjunction is recommended. - * - * @return the entity's uuid - */ - getUUID(): java.util.UUID; - /** - * Gets the entity's air level. - * - * The returned value will be an integer. If the player is not taking damage, it - * will be between 300 (not in water) and 0. If the player is taking damage, it - * will be between -20 and 0, getting reset to 0 every time the player takes damage. - * - * @return the entity's air level - */ - getAir(): number; - distanceTo(other: com.chattriggers.ctjs.api.entity.Entity): number; - distanceTo(other: net.minecraft.world.entity.Entity): number; - distanceTo(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): number; - distanceTo(x: number, y: number, z: number): number; - isOnGround(): boolean; - isCollided(): boolean; - getDistanceWalked(): number; - getStepHeight(): number; - hasNoClip(): boolean; - getTicksExisted(): number; - getFireResistance(): number; - isImmuneToFire(): boolean; - isInWater(): boolean; - isWet(): boolean; - getDimension(): com.chattriggers.ctjs.api.entity.Entity$DimensionType; - getMaxInPortalTime(): number; - isSilent(): boolean; - isInLava(): boolean; - getLookVector(): net.minecraft.world.phys.Vec3; - getLookVector(partialTicks: number): net.minecraft.world.phys.Vec3; - getEyePosition(): net.minecraft.world.phys.Vec3; - getEyePosition(partialTicks: number): net.minecraft.world.phys.Vec3; - canBeCollidedWith(): boolean; - canBePushed(): boolean; - isSneaking(): boolean; - isSprinting(): boolean; - isInvisible(): boolean; - isOutsideBorder(): boolean; - isBurning(): boolean; - getWorld(): net.minecraft.world.level.Level; - getChunk(): com.chattriggers.ctjs.api.world.Chunk; - } - const Entity$DimensionType: { - OVERWORLD: com.chattriggers.ctjs.api.entity.Entity$DimensionType; - NETHER: com.chattriggers.ctjs.api.entity.Entity$DimensionType; - END: com.chattriggers.ctjs.api.entity.Entity$DimensionType; - OVERWORLD_CAVES: com.chattriggers.ctjs.api.entity.Entity$DimensionType; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.entity.Entity$DimensionType; - } - interface Entity$DimensionType extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper> { - } - const Entity$Companion: { - fromMC(entity: net.minecraft.world.entity.Entity): com.chattriggers.ctjs.api.entity.Entity; - new(): com.chattriggers.ctjs.api.entity.Entity$Companion; - } - interface Entity$Companion { - fromMC(entity: net.minecraft.world.entity.Entity): com.chattriggers.ctjs.api.entity.Entity; - new(): com.chattriggers.ctjs.api.entity.Entity$Companion; - } - const Team: { - Visibility: typeof com.chattriggers.ctjs.api.entity.Team$Visibility; - new(mcValue: net.minecraft.world.scores.PlayerTeam): com.chattriggers.ctjs.api.entity.Team; - } - interface Team extends com.chattriggers.ctjs.api.CTWrapper { - /** - * Gets the registered name of the team - */ - getRegisteredName(): string; - /** - * Gets the display name of the team - */ - getName(): string; - /** - * Sets the display name of the team - * @param name the new display name - * @return the team for method chaining - */ - setName(name: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.entity.Team; - /** - * Sets the display name of the team - * @param name the new display name - * @return the team for method chaining - */ - setName(name: string): com.chattriggers.ctjs.api.entity.Team; - /** - * Gets the list of names on the team - */ - getMembers(): Array; - /** - * Gets the team prefix - */ - getPrefix(): string; - /** - * Sets the team prefix - * @param prefix the prefix to set - * @return the team for method chaining - */ - setPrefix(prefix: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.entity.Team; - /** - * Sets the team prefix - * @param prefix the prefix to set - * @return the team for method chaining - */ - setPrefix(prefix: string): com.chattriggers.ctjs.api.entity.Team; - /** - * Gets the team suffix - */ - getSuffix(): string; - /** - * Sets the team suffix - * @param suffix the suffix to set - * @return the team for method chaining - */ - setSuffix(suffix: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.entity.Team; - /** - * Sets the team suffix - * @param suffix the suffix to set - * @return the team for method chaining - */ - setSuffix(suffix: string): com.chattriggers.ctjs.api.entity.Team; - getColor(): string; - /** - * Sets the team color - * @param color a string format of a [Formatting], or a hex value - * @return the team for method chaining - */ - setColor(color: any | null | undefined): com.chattriggers.ctjs.api.entity.Team; - /** - * Gets the team's friendly fire setting - */ - getFriendlyFire(): boolean; - /** - * Gets whether the team can see invisible players on the same team - */ - canSeeInvisibleTeammates(): boolean; - /** - * Gets the team's name tag visibility - */ - getNameTagVisibility(): com.chattriggers.ctjs.api.entity.Team$Visibility; - /** - * Gets the team's death message visibility - */ - getDeathMessageVisibility(): com.chattriggers.ctjs.api.entity.Team$Visibility; - } - const Team$Visibility: { - ALWAYS: com.chattriggers.ctjs.api.entity.Team$Visibility; - NEVER: com.chattriggers.ctjs.api.entity.Team$Visibility; - HIDE_FOR_OTHERS_TEAMS: com.chattriggers.ctjs.api.entity.Team$Visibility; - HIDE_FOR_OWN_TEAM: com.chattriggers.ctjs.api.entity.Team$Visibility; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.entity.Team$Visibility; - } - interface Team$Visibility extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { - } - const Team$Visibility$Companion: { - fromMC(mcValue: net.minecraft.world.scores.Team$Visibility): com.chattriggers.ctjs.api.entity.Team$Visibility; - new(): unknown; - } - interface Team$Visibility$Companion { - fromMC(mcValue: net.minecraft.world.scores.Team$Visibility): com.chattriggers.ctjs.api.entity.Team$Visibility; - new(): unknown; - } - const PlayerMP: { - new(mcValue: net.minecraft.world.entity.player.Player): com.chattriggers.ctjs.api.entity.PlayerMP; - } - interface PlayerMP extends com.chattriggers.ctjs.api.entity.LivingEntity { - isSpectator(): boolean; - getPing(): number; - getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; - /** - * Gets the display name for this player, - * i.e. the name shown in tab list and in the player's nametag. - * @return the display name - */ - getDisplayName(): com.chattriggers.ctjs.api.message.TextComponent; - setTabDisplayName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Sets the name for this player shown above their head, - * in their name tag - * - * @param textComponent the new name to display - */ - setNametagName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Draws the player in the GUI. Takes the same parameters as [Renderer.drawPlayer] - * minus `player`. - * - * @see Renderer.drawPlayer - */ - draw(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.entity.PlayerMP; - } - const LivingEntity: { - new(mcValue: net.minecraft.world.entity.LivingEntity): com.chattriggers.ctjs.api.entity.LivingEntity; - } - interface LivingEntity extends com.chattriggers.ctjs.api.entity.Entity { - getActivePotionEffects(): Array; - canSeeEntity(other: net.minecraft.world.entity.Entity): boolean; - canSeeEntity(other: com.chattriggers.ctjs.api.entity.Entity): boolean; - /** - * Gets the item currently in the entity's specified inventory slot. - * 0 for main hand, 1 for offhand, 2-5 for armor - * - * @param slot the slot to access - * @return the item in said slot - */ - getStackInSlot(slot: number): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - getHP(): number; - getMaxHP(): number; - getAbsorption(): number; - getAge(): number; - getArmorValue(): number; - isPotionActive(id: number): boolean; - isPotionActive(type: com.chattriggers.ctjs.api.world.PotionEffectType): boolean; - isPotionActive(effect: com.chattriggers.ctjs.api.world.PotionEffect): boolean; - } - const PlayerInteraction: { - UseBlock: typeof com.chattriggers.ctjs.api.entity.PlayerInteraction$UseBlock; - UseEntity: typeof com.chattriggers.ctjs.api.entity.PlayerInteraction$UseEntity; - UseItem: typeof com.chattriggers.ctjs.api.entity.PlayerInteraction$UseItem; - new(name: string, mainHand: boolean): com.chattriggers.ctjs.api.entity.PlayerInteraction; - } - interface PlayerInteraction { - getName(): string; - getMainHand(): boolean; - } - const PlayerInteraction$AttackBlock: { - new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackBlock; - } - interface PlayerInteraction$AttackBlock extends com.chattriggers.ctjs.api.entity.PlayerInteraction { - new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackBlock; - } - const PlayerInteraction$AttackEntity: { - new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackEntity; - } - interface PlayerInteraction$AttackEntity extends com.chattriggers.ctjs.api.entity.PlayerInteraction { - new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackEntity; - } - const PlayerInteraction$BreakBlock: { - new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$BreakBlock; - } - interface PlayerInteraction$BreakBlock extends com.chattriggers.ctjs.api.entity.PlayerInteraction { - new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$BreakBlock; - } - const PlayerInteraction$UseBlock: { - new(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.entity.PlayerInteraction$UseBlock; - } - interface PlayerInteraction$UseBlock extends com.chattriggers.ctjs.api.entity.PlayerInteraction { - } - const PlayerInteraction$UseEntity: { - new(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.entity.PlayerInteraction$UseEntity; - } - interface PlayerInteraction$UseEntity extends com.chattriggers.ctjs.api.entity.PlayerInteraction { - } - const PlayerInteraction$UseItem: { - new(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.entity.PlayerInteraction$UseItem; - } - interface PlayerInteraction$UseItem extends com.chattriggers.ctjs.api.entity.PlayerInteraction { - } - const BlockEntity: { - new(mcValue: net.minecraft.world.level.block.entity.BlockEntity): com.chattriggers.ctjs.api.entity.BlockEntity; - } - interface BlockEntity extends com.chattriggers.ctjs.api.CTWrapper { - getX(): number; - getY(): number; - getZ(): number; - getBlockType(): com.chattriggers.ctjs.api.world.block.BlockType; - getBlockPos(): com.chattriggers.ctjs.api.world.block.BlockPos; - getBlock(): com.chattriggers.ctjs.api.world.block.Block; - } - const Particle: { - new(mcValue: net.minecraft.client.particle.Particle): com.chattriggers.ctjs.api.entity.Particle; - } - interface Particle extends com.chattriggers.ctjs.api.CTWrapper { - getX(): number; - setX(value: number): void; - getY(): number; - setY(value: number): void; - getZ(): number; - setZ(value: number): void; - getLastX(): number; - setLastX(value: number): void; - getLastY(): number; - setLastY(value: number): void; - getLastZ(): number; - setLastZ(value: number): void; - getRenderX(): number; - getRenderY(): number; - getRenderZ(): number; - getMotionX(): number; - setMotionX(value: number): void; - getMotionY(): number; - setMotionY(value: number): void; - getMotionZ(): number; - setMotionZ(value: number): void; - getAge(): number; - setAge(value: number): void; - getDead(): boolean; - setDead(value: boolean): void; - scale(scale: number): com.chattriggers.ctjs.api.entity.Particle; - /** - * Sets the amount of ticks this particle will live for - * - * @param maxAge the particle's max age (in ticks) - */ - setMaxAge(maxAge: number): com.chattriggers.ctjs.api.entity.Particle; - remove(): com.chattriggers.ctjs.api.entity.Particle; - } - } - namespace commands { - interface RootCommand { - register(): void; - } - const DynamicCommands: { - AngleArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$AngleArgumentWrapper; - PosArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$PosArgumentWrapper; - BlockPredicateWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$BlockPredicateWrapper; - BlockStateArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$BlockStateArgumentWrapper; - EntitySelectorWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$EntitySelectorWrapper; - ItemStackArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$ItemStackArgumentWrapper; - MessageFormatArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$MessageFormatArgumentWrapper; - NbtPathWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$NbtPathWrapper; - registerCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; - registerCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; - buildCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; - buildCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; - argument(name: string, type: com.mojang.brigadier.arguments.ArgumentType, builder: org.mozilla.javascript.Function): void; - literal(name: string, builder: org.mozilla.javascript.Function): void; - redirect(node: com.chattriggers.ctjs.api.commands.RootCommand): void; - redirect(node: com.mojang.brigadier.tree.CommandNode): void; - exec(method: org.mozilla.javascript.Function): void; - /** - * A helper method for getting Fabric's client CommandDispatcher root node. This allows user - * commands to be redirected to the root node in the same way that "/execute run ..." does. - * - * As the result is a CommandNode, `.getChild(name)` can be used to access sub-command nodes - * to, for example, redirect to just `/advancement` instead of `/`. - */ - getDispatcherRoot(): com.mojang.brigadier.tree.RootCommandNode | null | undefined; - /** - * @see Argument Types: bool - */ - bool(): com.mojang.brigadier.arguments.BoolArgumentType; - /** - * @see brigadier:double - */ - double(): com.mojang.brigadier.arguments.DoubleArgumentType; - /** - * @see brigadier:double - */ - double(min: number): com.mojang.brigadier.arguments.DoubleArgumentType; - /** - * @see brigadier:double - */ - double(min: number, max: number): com.mojang.brigadier.arguments.DoubleArgumentType; - /** - * @see brigadier:float - */ - float(): com.mojang.brigadier.arguments.FloatArgumentType; - /** - * @see brigadier:float - */ - float(min: number): com.mojang.brigadier.arguments.FloatArgumentType; - /** - * @see brigadier:float - */ - float(min: number, max: number): com.mojang.brigadier.arguments.FloatArgumentType; - /** - * @see brigadier:integer - */ - integer(): com.mojang.brigadier.arguments.IntegerArgumentType; - /** - * @see brigadier:integer - */ - integer(min: number): com.mojang.brigadier.arguments.IntegerArgumentType; - /** - * @see brigadier:integer - */ - integer(min: number, max: number): com.mojang.brigadier.arguments.IntegerArgumentType; - /** - * @see brigadier:long - */ - long(): com.mojang.brigadier.arguments.LongArgumentType; - /** - * @see brigadier:long - */ - long(min: number): com.mojang.brigadier.arguments.LongArgumentType; - /** - * @see brigadier:long - */ - long(min: number, max: number): com.mojang.brigadier.arguments.LongArgumentType; - /** - * @see brigadier:string - */ - string(): com.mojang.brigadier.arguments.StringArgumentType; - /** - * @see brigadier:string - */ - greedyString(): com.mojang.brigadier.arguments.StringArgumentType; - /** - * @see brigadier:string - */ - word(): com.mojang.brigadier.arguments.StringArgumentType; - /** - * @see minecraft:angle - */ - angle(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:block_pos - */ - blockPos(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:block_predicate - */ - blockPredicate(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:block_state - */ - blockState(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:color - */ - color(): net.minecraft.commands.arguments.ColorArgument; - /** - * @see minecraft:column_pos - */ - columnPos(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:dimension - */ - dimension(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:entity - */ - entity(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:entity - */ - entities(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:float_range - */ - floatRange(): net.minecraft.commands.arguments.RangeArgument$Floats; - /** - * @see minecraft:game_profile - */ - gameProfile(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:game_profile - */ - player(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:game_profile - */ - players(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:gamemode - */ - gameMode(): net.minecraft.commands.arguments.GameModeArgument; - /** - * @see minecraft:int_range - */ - intRange(): net.minecraft.commands.arguments.RangeArgument$Ints; - /** - * @see minecraft:item_predicate - */ - itemPredicate(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:item_slot - */ - itemSlot(): net.minecraft.commands.arguments.SlotArgument; - /** - * @see minecraft:item_stack - */ - itemStack(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:message - */ - message(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:nbt_compound_tag - */ - nbtCompoundTag(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:nbt_path - */ - nbtPath(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:nbt_tag - */ - nbtTag(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:resource - */ - resource(): net.minecraft.commands.arguments.IdentifierArgument; - /** - * @see minecraft:rotation - */ - rotation(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:swizzle - */ - swizzle(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:time - */ - time(): net.minecraft.commands.arguments.TimeArgument; - /** - * @see minecraft:time - */ - time(minimum: number): net.minecraft.commands.arguments.TimeArgument; - /** - * @see minecraft:uuid - */ - uuid(): net.minecraft.commands.arguments.UuidArgument; - /** - * @see minecraft:vec2 - */ - vec2(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:vec2 - */ - vec2(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:vec3 - */ - vec3(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:vec3 - */ - vec3(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; - /** - * Allows choosing from a set list of strings. When suggested to the user, this - * will look as though this argument is multiple "literal()" nodes. - */ - choices(options: string): com.mojang.brigadier.arguments.ArgumentType; - /** - * Allows easy creation of a custom ArgumentType without needing to use - * JavaAdapter. Example: - * - * ```js - * const HEADS = 0; - * const TAILS = 1; - * - * const coinFlipArgType = Commands.custom({ - * parse(reader) { - * // `reader` is a com.mojang.brigadier.StringReader - * - * const savedCursor = reader.getCursor(); - * const str = reader.readString(); - * if (str === 'heads') - * return HEADS; - * if (str === 'tails') - * return TAILS; - * Commands.error(reader, `Expected one of: 'heads', 'tails'`); - * }, - * suggest(ctx, builder) { - * // ctx is a com.mojang.brigadier.context.CommandContext - * // builder is a com.mojang.brigadier.suggestion.SuggestionsBuilder - * builder.suggest('heads'); - * builder.suggest('tails'); - * return builder.buildFuture(); - * }, - * getExamples() { - * return ['heads', 'tails']; - * } - * }); - * ``` - * - * @see StringReader - * @see CommandContext - * @see SuggestionsBuilder - */ - custom(obj: org.mozilla.javascript.NativeObject): com.mojang.brigadier.arguments.ArgumentType; - /** - * Throw a detailed error given the reader, meant to be used with [custom] - */ - error(reader: com.mojang.brigadier.ImmutableStringReader, message: string): never; - /** - * Throw a detailed error given the reader, meant to be used with [custom] - */ - error(reader: com.mojang.brigadier.ImmutableStringReader, message: com.chattriggers.ctjs.api.message.TextComponent): never; - /** - * An alternative to the command register that allows full use of the - * functionality provided by Brigadier. - * - * For more information about Brigadier, see - * their GitHub page. - * Also see [CTCommand] for an example Brigadier command. - * - * ## General - * - * This API works similarly to Brigadier, however much of the annoyance - * of using the Brigadier API has been eliminated, mainly the excessive - * use of nested function calls. It works via a global context, so function - * calls are free. However, this means that multiples commands cannot be - * built at once. This means that commands should only ever be built on the - * main thread. If two commands are built at the same time, an error will be - * thrown. - * - * ## Argument Types - * - * The [ArgumentType] interface is a fundamental part of Brigadier, and - * most of the MC argument types have been exposed via helper function - * in this class. It is also possible to build new instances of - * [ArgumentType] via [custom]. - * - * When possible, the argument types returned from the helper function on - * this class resolve in a way that their Minecraft variants do. For example, - * the [message] type will replace selectors with their target entity, if - * possible. - * - * ## Basic Example - * - * Here is an example command that recreates the `/advancement` command - * (without any of the actual functionality, of course): - * - * ```js - * // The `Commands` object supports destructuring, which makes assembling long - * // commands much nicer - * const { argument, choices, exec, greedyString, literal, registerCommand, resource, players } = Commands; - * - * registerCommand('ctadvancement', () => { - * // Note the use of choices to avoid having to copy-paste two separate literal() trees - * argument('kind', choices('grant', 'revoke'), () => { - * argument('targets', players(), () => { - * literal('everything', () => { - * // exec() receives a single object with all of the arguments, which means we can - * // destructure it to pull out the ones we want. Only values from argument() calls - * // are included here; the literal nodes are ignored and have no impact on this object. - * exec(({ kind, targets }) => { - * ChatLib.chat(`${kind} everything from ${targets}`); - * }); - * }); - * - * literal('only', () => { - * argument('advancement', resource(), () => { - * argument('criterion', greedyString(), () => { - * exec(({ kind, targets, advancement, criterion }) => { - * ChatLib.chat(`${kind} only ${advancement} applied to ${targets} (criterion = ${criterion})`); - * }); - * }); - * }); - * }); - * - * argument('subkind', choices('from', 'through', 'until'), () => { - * argument('advancement', resource(), () => { - * exec(({ kind, subkind, targets, advancement }) => { - * ChatLib.chat(`kind = ${kind}, subkind = ${subkind}, advancement = ${advancement}, targets = ${targets}`); - * }); - * }); - * }); - * }); - * }); - * }); - * ``` - * - * ## Redirect - * - * Like Brigadier, this API supports assembling partial command nodes for use - * in redirection. To do this, use [buildCommand], which returns the command node - * (well, an internal representation of it). This object can then be passed to - * further calls to [redirect] inside of a [literal] or [argument] block. - * - * Examples: - * - * ```js - * // destructuring omitted - * - * const testCmdNode = buildCommand('testcmd', () => { - * exec(({ arg }) => { - * if (arg) { - * ChatLib.chat(`arg supplied, value = ${arg}`); - * } else { - * ChatLib.chat('no arg supplied'); - * } - * }); - * }); - * - * // Manually register it since we used buildCommand() instead of registerCommand() - * testCmdNode.register() - * - * registerCommand('testcmd', () => { - * argument('arg', greedyString(), () => { - * redirect(testCmdNode); - * }); - * }); - * ``` - */ - new(): com.chattriggers.ctjs.api.commands.DynamicCommands; - } - interface DynamicCommands extends com.chattriggers.ctjs.internal.commands.CommandCollection { - registerCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; - registerCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; - buildCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; - buildCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; - argument(name: string, type: com.mojang.brigadier.arguments.ArgumentType, builder: org.mozilla.javascript.Function): void; - literal(name: string, builder: org.mozilla.javascript.Function): void; - redirect(node: com.chattriggers.ctjs.api.commands.RootCommand): void; - redirect(node: com.mojang.brigadier.tree.CommandNode): void; - exec(method: org.mozilla.javascript.Function): void; - /** - * A helper method for getting Fabric's client CommandDispatcher root node. This allows user - * commands to be redirected to the root node in the same way that "/execute run ..." does. - * - * As the result is a CommandNode, `.getChild(name)` can be used to access sub-command nodes - * to, for example, redirect to just `/advancement` instead of `/`. - */ - getDispatcherRoot(): com.mojang.brigadier.tree.RootCommandNode | null | undefined; - /** - * @see Argument Types: bool - */ - bool(): com.mojang.brigadier.arguments.BoolArgumentType; - /** - * @see brigadier:double - */ - double(): com.mojang.brigadier.arguments.DoubleArgumentType; - /** - * @see brigadier:double - */ - double(min: number): com.mojang.brigadier.arguments.DoubleArgumentType; - /** - * @see brigadier:double - */ - double(min: number, max: number): com.mojang.brigadier.arguments.DoubleArgumentType; - /** - * @see brigadier:float - */ - float(): com.mojang.brigadier.arguments.FloatArgumentType; - /** - * @see brigadier:float - */ - float(min: number): com.mojang.brigadier.arguments.FloatArgumentType; - /** - * @see brigadier:float - */ - float(min: number, max: number): com.mojang.brigadier.arguments.FloatArgumentType; - /** - * @see brigadier:integer - */ - integer(): com.mojang.brigadier.arguments.IntegerArgumentType; - /** - * @see brigadier:integer - */ - integer(min: number): com.mojang.brigadier.arguments.IntegerArgumentType; - /** - * @see brigadier:integer - */ - integer(min: number, max: number): com.mojang.brigadier.arguments.IntegerArgumentType; - /** - * @see brigadier:long - */ - long(): com.mojang.brigadier.arguments.LongArgumentType; - /** - * @see brigadier:long - */ - long(min: number): com.mojang.brigadier.arguments.LongArgumentType; - /** - * @see brigadier:long - */ - long(min: number, max: number): com.mojang.brigadier.arguments.LongArgumentType; - /** - * @see brigadier:string - */ - string(): com.mojang.brigadier.arguments.StringArgumentType; - /** - * @see brigadier:string - */ - greedyString(): com.mojang.brigadier.arguments.StringArgumentType; - /** - * @see brigadier:string - */ - word(): com.mojang.brigadier.arguments.StringArgumentType; - /** - * @see minecraft:angle - */ - angle(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:block_pos - */ - blockPos(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:block_predicate - */ - blockPredicate(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:block_state - */ - blockState(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:color - */ - color(): net.minecraft.commands.arguments.ColorArgument; - /** - * @see minecraft:column_pos - */ - columnPos(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:dimension - */ - dimension(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:entity - */ - entity(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:entity - */ - entities(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:float_range - */ - floatRange(): net.minecraft.commands.arguments.RangeArgument$Floats; - /** - * @see minecraft:game_profile - */ - gameProfile(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:game_profile - */ - player(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:game_profile - */ - players(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:gamemode - */ - gameMode(): net.minecraft.commands.arguments.GameModeArgument; - /** - * @see minecraft:int_range - */ - intRange(): net.minecraft.commands.arguments.RangeArgument$Ints; - /** - * @see minecraft:item_predicate - */ - itemPredicate(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:item_slot - */ - itemSlot(): net.minecraft.commands.arguments.SlotArgument; - /** - * @see minecraft:item_stack - */ - itemStack(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:message - */ - message(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:nbt_compound_tag - */ - nbtCompoundTag(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:nbt_path - */ - nbtPath(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:nbt_tag - */ - nbtTag(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:resource - */ - resource(): net.minecraft.commands.arguments.IdentifierArgument; - /** - * @see minecraft:rotation - */ - rotation(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:swizzle - */ - swizzle(): com.mojang.brigadier.arguments.ArgumentType>; - /** - * @see minecraft:time - */ - time(): net.minecraft.commands.arguments.TimeArgument; - /** - * @see minecraft:time - */ - time(minimum: number): net.minecraft.commands.arguments.TimeArgument; - /** - * @see minecraft:uuid - */ - uuid(): net.minecraft.commands.arguments.UuidArgument; - /** - * @see minecraft:vec2 - */ - vec2(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:vec2 - */ - vec2(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:vec3 - */ - vec3(): com.mojang.brigadier.arguments.ArgumentType; - /** - * @see minecraft:vec3 - */ - vec3(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; - /** - * Allows choosing from a set list of strings. When suggested to the user, this - * will look as though this argument is multiple "literal()" nodes. - */ - choices(options: string): com.mojang.brigadier.arguments.ArgumentType; - /** - * Allows easy creation of a custom ArgumentType without needing to use - * JavaAdapter. Example: - * - * ```js - * const HEADS = 0; - * const TAILS = 1; - * - * const coinFlipArgType = Commands.custom({ - * parse(reader) { - * // `reader` is a com.mojang.brigadier.StringReader - * - * const savedCursor = reader.getCursor(); - * const str = reader.readString(); - * if (str === 'heads') - * return HEADS; - * if (str === 'tails') - * return TAILS; - * Commands.error(reader, `Expected one of: 'heads', 'tails'`); - * }, - * suggest(ctx, builder) { - * // ctx is a com.mojang.brigadier.context.CommandContext - * // builder is a com.mojang.brigadier.suggestion.SuggestionsBuilder - * builder.suggest('heads'); - * builder.suggest('tails'); - * return builder.buildFuture(); - * }, - * getExamples() { - * return ['heads', 'tails']; - * } - * }); - * ``` - * - * @see StringReader - * @see CommandContext - * @see SuggestionsBuilder - */ - custom(obj: org.mozilla.javascript.NativeObject): com.mojang.brigadier.arguments.ArgumentType; - /** - * Throw a detailed error given the reader, meant to be used with [custom] - */ - error(reader: com.mojang.brigadier.ImmutableStringReader, message: string): never; - /** - * Throw a detailed error given the reader, meant to be used with [custom] - */ - error(reader: com.mojang.brigadier.ImmutableStringReader, message: com.chattriggers.ctjs.api.message.TextComponent): never; - /** - * An alternative to the command register that allows full use of the - * functionality provided by Brigadier. - * - * For more information about Brigadier, see - * their GitHub page. - * Also see [CTCommand] for an example Brigadier command. - * - * ## General - * - * This API works similarly to Brigadier, however much of the annoyance - * of using the Brigadier API has been eliminated, mainly the excessive - * use of nested function calls. It works via a global context, so function - * calls are free. However, this means that multiples commands cannot be - * built at once. This means that commands should only ever be built on the - * main thread. If two commands are built at the same time, an error will be - * thrown. - * - * ## Argument Types - * - * The [ArgumentType] interface is a fundamental part of Brigadier, and - * most of the MC argument types have been exposed via helper function - * in this class. It is also possible to build new instances of - * [ArgumentType] via [custom]. - * - * When possible, the argument types returned from the helper function on - * this class resolve in a way that their Minecraft variants do. For example, - * the [message] type will replace selectors with their target entity, if - * possible. - * - * ## Basic Example - * - * Here is an example command that recreates the `/advancement` command - * (without any of the actual functionality, of course): - * - * ```js - * // The `Commands` object supports destructuring, which makes assembling long - * // commands much nicer - * const { argument, choices, exec, greedyString, literal, registerCommand, resource, players } = Commands; - * - * registerCommand('ctadvancement', () => { - * // Note the use of choices to avoid having to copy-paste two separate literal() trees - * argument('kind', choices('grant', 'revoke'), () => { - * argument('targets', players(), () => { - * literal('everything', () => { - * // exec() receives a single object with all of the arguments, which means we can - * // destructure it to pull out the ones we want. Only values from argument() calls - * // are included here; the literal nodes are ignored and have no impact on this object. - * exec(({ kind, targets }) => { - * ChatLib.chat(`${kind} everything from ${targets}`); - * }); - * }); - * - * literal('only', () => { - * argument('advancement', resource(), () => { - * argument('criterion', greedyString(), () => { - * exec(({ kind, targets, advancement, criterion }) => { - * ChatLib.chat(`${kind} only ${advancement} applied to ${targets} (criterion = ${criterion})`); - * }); - * }); - * }); - * }); - * - * argument('subkind', choices('from', 'through', 'until'), () => { - * argument('advancement', resource(), () => { - * exec(({ kind, subkind, targets, advancement }) => { - * ChatLib.chat(`kind = ${kind}, subkind = ${subkind}, advancement = ${advancement}, targets = ${targets}`); - * }); - * }); - * }); - * }); - * }); - * }); - * ``` - * - * ## Redirect - * - * Like Brigadier, this API supports assembling partial command nodes for use - * in redirection. To do this, use [buildCommand], which returns the command node - * (well, an internal representation of it). This object can then be passed to - * further calls to [redirect] inside of a [literal] or [argument] block. - * - * Examples: - * - * ```js - * // destructuring omitted - * - * const testCmdNode = buildCommand('testcmd', () => { - * exec(({ arg }) => { - * if (arg) { - * ChatLib.chat(`arg supplied, value = ${arg}`); - * } else { - * ChatLib.chat('no arg supplied'); - * } - * }); - * }); - * - * // Manually register it since we used buildCommand() instead of registerCommand() - * testCmdNode.register() - * - * registerCommand('testcmd', () => { - * argument('arg', greedyString(), () => { - * redirect(testCmdNode); - * }); - * }); - * ``` - */ - new(): com.chattriggers.ctjs.api.commands.DynamicCommands; - } - const DynamicCommands$AngleArgumentWrapper: { - new(angle: net.minecraft.commands.arguments.AngleArgument$SingleAngle): com.chattriggers.ctjs.api.commands.DynamicCommands$AngleArgumentWrapper; - } - interface DynamicCommands$AngleArgumentWrapper { - getAngle(): net.minecraft.commands.arguments.AngleArgument$SingleAngle; - getAngle(): number; - getAngle(entity: com.chattriggers.ctjs.api.entity.Entity): number; - component1(): net.minecraft.commands.arguments.AngleArgument$SingleAngle; - copy(angle: net.minecraft.commands.arguments.AngleArgument$SingleAngle): com.chattriggers.ctjs.api.commands.DynamicCommands$AngleArgumentWrapper; - } - const DynamicCommands$PosArgumentWrapper: { - new(impl: net.minecraft.commands.arguments.coordinates.Coordinates): com.chattriggers.ctjs.api.commands.DynamicCommands$PosArgumentWrapper; - } - interface DynamicCommands$PosArgumentWrapper extends net.minecraft.commands.arguments.coordinates.Coordinates { - getImpl(): net.minecraft.commands.arguments.coordinates.Coordinates; - toAbsolutePos(): net.minecraft.world.phys.Vec3; - toAbsoluteBlockPos(): com.chattriggers.ctjs.api.world.block.BlockPos; - toAbsoluteRotation(): net.minecraft.world.phys.Vec2; - component1(): net.minecraft.commands.arguments.coordinates.Coordinates; - copy(impl: net.minecraft.commands.arguments.coordinates.Coordinates): com.chattriggers.ctjs.api.commands.DynamicCommands$PosArgumentWrapper; - } - const DynamicCommands$BlockPredicateWrapper: { - new(impl: net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockPredicateWrapper; - } - interface DynamicCommands$BlockPredicateWrapper { - getImpl(): net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result; - test(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; - component1(): net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result; - copy(impl: net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockPredicateWrapper; - } - const DynamicCommands$BlockStateArgumentWrapper: { - new(impl: net.minecraft.commands.arguments.blocks.BlockInput): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockStateArgumentWrapper; - } - interface DynamicCommands$BlockStateArgumentWrapper { - getImpl(): net.minecraft.commands.arguments.blocks.BlockInput; - test(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; - component1(): net.minecraft.commands.arguments.blocks.BlockInput; - copy(impl: net.minecraft.commands.arguments.blocks.BlockInput): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockStateArgumentWrapper; - } - const DynamicCommands$EntitySelectorWrapper: { - new(impl: net.minecraft.commands.arguments.selector.EntitySelector): com.chattriggers.ctjs.api.commands.DynamicCommands$EntitySelectorWrapper; - } - interface DynamicCommands$EntitySelectorWrapper { - getEntity(): com.chattriggers.ctjs.api.entity.Entity; - getEntities(): Array; - getPlayers(): Array; - } - const DynamicCommands$ItemStackArgumentWrapper: { - new(impl: net.minecraft.commands.arguments.item.ItemInput): com.chattriggers.ctjs.api.commands.DynamicCommands$ItemStackArgumentWrapper; - } - interface DynamicCommands$ItemStackArgumentWrapper { - getItemType(): com.chattriggers.ctjs.api.inventory.ItemType; - test(type: com.chattriggers.ctjs.api.inventory.ItemType): boolean; - component1(): net.minecraft.commands.arguments.item.ItemInput; - copy(impl: net.minecraft.commands.arguments.item.ItemInput): com.chattriggers.ctjs.api.commands.DynamicCommands$ItemStackArgumentWrapper; - } - const DynamicCommands$MessageFormatArgumentWrapper: { - new(impl: net.minecraft.commands.arguments.MessageArgument$Message): com.chattriggers.ctjs.api.commands.DynamicCommands$MessageFormatArgumentWrapper; - } - interface DynamicCommands$MessageFormatArgumentWrapper { - getText(): string; - setText(value: string): void; - format(): com.chattriggers.ctjs.api.message.TextComponent; - component1(): net.minecraft.commands.arguments.MessageArgument$Message; - copy(impl: net.minecraft.commands.arguments.MessageArgument$Message): com.chattriggers.ctjs.api.commands.DynamicCommands$MessageFormatArgumentWrapper; - } - const DynamicCommands$NbtPathWrapper: { - new(impl: net.minecraft.commands.arguments.NbtPathArgument$NbtPath): com.chattriggers.ctjs.api.commands.DynamicCommands$NbtPathWrapper; - } - interface DynamicCommands$NbtPathWrapper { - get(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): Array; - count(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): number; - getOrInit(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase, supplier: kotlin.Function0): Array; - put(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase, source: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): number; - insert(index: number, compound: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound, elements: Array): number; - remove(element: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): number; - component1(): net.minecraft.commands.arguments.NbtPathArgument$NbtPath; - copy(impl: net.minecraft.commands.arguments.NbtPathArgument$NbtPath): com.chattriggers.ctjs.api.commands.DynamicCommands$NbtPathWrapper; - } - } - namespace client { - const Proxy: { - new(ip: string, port: number, name: string, username: string, password: string, isEnabled: boolean): com.chattriggers.ctjs.api.client.Proxy; - } - interface Proxy { - getIp(): string; - setIp(value: string): void; - getPort(): number; - setPort(value: number): void; - getName(): string; - setName(value: string): void; - getUsername(): string; - setUsername(value: string): void; - getPassword(): string; - setPassword(value: string): void; - isEnabled(): boolean; - setEnabled(value: boolean): void; - component1(): string; - component2(): number; - component3(): string; - component4(): string; - component5(): string; - component6(): boolean; - copy(ip: string, port: number, name: string, username: string, password: string, isEnabled: boolean): com.chattriggers.ctjs.api.client.Proxy; - } - const DiscordRPC: { - stayOn(): void; - turnOff(): void; - updatePresence(details: string, state: string): void; - resetTimestamp(): void; - revertToIdle(): void; - new(): com.chattriggers.ctjs.api.client.DiscordRPC; - } - interface DiscordRPC { - stayOn(): void; - turnOff(): void; - updatePresence(details: string, state: string): void; - resetTimestamp(): void; - revertToIdle(): void; - new(): com.chattriggers.ctjs.api.client.DiscordRPC; - } - const Sound: { - Category: typeof com.chattriggers.ctjs.api.client.Sound$Category; - AttenuationType: typeof com.chattriggers.ctjs.api.client.Sound$AttenuationType; - new(config: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.client.Sound; - } - interface Sound { - destroy(): void; - /** - * Gets the category of this sound, making it respect the Player's sound volume sliders. - * - * @return the category - */ - getCategory(): com.chattriggers.ctjs.api.client.Sound$Category; - /** - * Sets the category of this sound, making it respect the Player's sound volume sliders. - * - * @param category the category - */ - setCategory(category: com.chattriggers.ctjs.api.client.Sound$Category): com.chattriggers.ctjs.api.client.Sound; - /** - * Gets this sound's volume. - * - * @return A float value (0.0f - 1.0f). - */ - getVolume(): number; - /** - * Sets this sound's volume. - * - * @param volume A float value (0.0f - 1.0f). - */ - setVolume(volume: number): com.chattriggers.ctjs.api.client.Sound; - getX(): number; - getY(): number; - getZ(): number; - setX(x: number): com.chattriggers.ctjs.api.client.Sound; - setY(y: number): com.chattriggers.ctjs.api.client.Sound; - setZ(z: number): com.chattriggers.ctjs.api.client.Sound; - getPosition(): net.minecraft.world.phys.Vec3; - setPosition(x: number, y: number, z: number): com.chattriggers.ctjs.api.client.Sound; - /** - * Gets this sound's pitch. - * - * @return A float value (0.5f - 2.0f). - */ - getPitch(): number; - /** - * Sets this sound's pitch. - * - * @param pitch A float value (0.5f - 2.0f). - */ - setPitch(pitch: number): com.chattriggers.ctjs.api.client.Sound; - /** - * Gets the attenuation type (fade out over space) of the sound - * - * @return The type of Attenuation - */ - getAttenuationType(): com.chattriggers.ctjs.api.client.Sound$AttenuationType; - /** - * Sets the attenuation type (fade out over space) of the sound - * - * @param attenuationType The type of Attenuation - */ - setAttenuationType(attenuationType: com.chattriggers.ctjs.api.client.Sound$AttenuationType): com.chattriggers.ctjs.api.client.Sound; - /** - * Gets the attenuation distance of the sound - */ - getAttenuation(): number; - /** - * Sets the attenuation distance of the sound - */ - setAttenuation(attenuation: number): com.chattriggers.ctjs.api.client.Sound; - /** - * Gets whether the sound should repeat after finishing - */ - getLoop(): boolean; - /** - * Sets whether the sound should repeat after finishing - */ - setLoop(loop: boolean): com.chattriggers.ctjs.api.client.Sound; - /** - * Gets the tick delay after finishing before looping again (if getLoop() is true) - */ - getLoopDelay(): number; - /** - * Sets the tick delay after finishing before looping again (if getLoop() is true) - */ - setLoopDelay(loopDelay: number): com.chattriggers.ctjs.api.client.Sound; - /** - * Plays/resumes the sound. This requires the world to be loaded - */ - play(): void; - /** - * Plays/resumes the sound. This requires the world to be loaded - */ - play(delay: number): void; - /** - * Pauses the sound, to be resumed later. This requires the world to be loaded - */ - pause(): void; - /** - * Completely stops the sound. This requires the world to be loaded - */ - stop(): void; - /** - * Immediately restarts the sound. This requires the world to be loaded - */ - rewind(): void; - } - const Sound$Category: { - MASTER: com.chattriggers.ctjs.api.client.Sound$Category; - MUSIC: com.chattriggers.ctjs.api.client.Sound$Category; - RECORDS: com.chattriggers.ctjs.api.client.Sound$Category; - WEATHER: com.chattriggers.ctjs.api.client.Sound$Category; - BLOCKS: com.chattriggers.ctjs.api.client.Sound$Category; - HOSTILE: com.chattriggers.ctjs.api.client.Sound$Category; - NEUTRAL: com.chattriggers.ctjs.api.client.Sound$Category; - PLAYERS: com.chattriggers.ctjs.api.client.Sound$Category; - AMBIENT: com.chattriggers.ctjs.api.client.Sound$Category; - VOICE: com.chattriggers.ctjs.api.client.Sound$Category; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.client.Sound$Category; - } - interface Sound$Category extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { - } - const Sound$Category$Companion: { - fromMC(mcValue: net.minecraft.sounds.SoundSource): com.chattriggers.ctjs.api.client.Sound$Category; - from(value: any): com.chattriggers.ctjs.api.client.Sound$Category; - new(): unknown; - } - interface Sound$Category$Companion { - fromMC(mcValue: net.minecraft.sounds.SoundSource): com.chattriggers.ctjs.api.client.Sound$Category; - from(value: any): com.chattriggers.ctjs.api.client.Sound$Category; - new(): unknown; - } - const Sound$AttenuationType: { - NONE: com.chattriggers.ctjs.api.client.Sound$AttenuationType; - LINEAR: com.chattriggers.ctjs.api.client.Sound$AttenuationType; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.client.Sound$AttenuationType; - } - interface Sound$AttenuationType extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { - } - const Sound$AttenuationType$Companion: { - fromMC(mcValue: net.minecraft.client.resources.sounds.SoundInstance$Attenuation): com.chattriggers.ctjs.api.client.Sound$AttenuationType; - from(value: any): com.chattriggers.ctjs.api.client.Sound$AttenuationType; - new(): unknown; - } - interface Sound$AttenuationType$Companion { - fromMC(mcValue: net.minecraft.client.resources.sounds.SoundInstance$Attenuation): com.chattriggers.ctjs.api.client.Sound$AttenuationType; - from(value: any): com.chattriggers.ctjs.api.client.Sound$AttenuationType; - new(): unknown; - } - const Player: { - ArmorWrapper: typeof com.chattriggers.ctjs.api.client.Player$ArmorWrapper; - armor: com.chattriggers.ctjs.api.client.Player$ArmorWrapper; - toMC(): net.minecraft.client.player.LocalPlayer | null | undefined; - /** - * Gets Minecraft's EntityPlayerSP object representing the user - * - * @return The Minecraft EntityPlayerSP object representing the user - */ - getPlayer(): net.minecraft.client.player.LocalPlayer | null | undefined; - getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; - asPlayerMP(): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; - getX(): number; - getY(): number; - getZ(): number; - getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; - getRotation(): net.minecraft.world.phys.Vec2; - getLastX(): number; - getLastY(): number; - getLastZ(): number; - getRenderX(): number; - getRenderY(): number; - getRenderZ(): number; - /** - * Gets the player's x motion. - * This is the amount the player will move in the x direction next tick. - * - * @return the player's x motion - */ - getMotionX(): number; - /** - * Gets the player's y motion. - * This is the amount the player will move in the y direction next tick. - * - * @return the player's y motion - */ - getMotionY(): number; - /** - * Gets the player's z motion. - * This is the amount the player will move in the z direction next tick. - * - * @return the player's z motion - */ - getMotionZ(): number; - /** - * Gets the player's camera pitch. - * - * @return the player's camera pitch - */ - getPitch(): number; - /** - * Gets the player's camera yaw. - * - * @return the player's camera yaw - */ - getYaw(): number; - /** - * Gets the player's username. - * - * @return the player's username - */ - getName(): string; - /** - * Gets the Java UUID object of the player. - * Use of [UUID.toString] in conjunction is recommended. - * - * @return the player's uuid - */ - getUUID(): java.util.UUID; - getHP(): number; - /** - * Gets the player's air level. - * - * The returned value will be an integer. If the player is not taking damage, it - * will be between 300 (not in water) and 0. If the player is taking damage, it - * will be between -20 and 0, getting reset to 0 every time the player takes damage. - * - * @return the player's air level - */ - getAirLevel(): number; - getXPLevel(): number; - isMoving(): boolean; - isSneaking(): boolean; - isSprinting(): boolean; - /** - * Checks if player can be pushed by water. - * - * @return true if the player is flying, false otherwise - */ - isFlying(): boolean; - isSleeping(): boolean; - /** - * Gets the direction the player is facing. - * Example: "South West" - * - * @return The direction the player is facing, one of the four cardinal directions - */ - facing(): string; - /** - * Gets the current active potion effects. Returns an empty list - * if the player has no active potion effects. - * - * @return a list of the active [PotionEffect]s - */ - getActivePotionEffects(): Array; - /** - * Gets the current object that the player is looking at, - * whether that be a block or an entity. Returns null when not looking - * at anything. - * - * @return the [Block] or [Entity] being looked at, or null if air - */ - lookingAt(): any | null | undefined; - /** - * Gets the current item in the player's hand. - * - * @param hand the hand of the item - * @return the current held [Item] - */ - getHeldItem(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * Gets the current item in the player's hand. - * - * @param hand the hand of the item - * @return the current held [Item] - */ - getHeldItem(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * Sets the current held item based on the provided index. - * - * @param index the new held item index - */ - setHeldItemIndex(index: number): void; - /** - * Gets the current index of the held item. - * - * @return the current index - */ - getHeldItemIndex(): number; - /** - * Gets the inventory of the player, i.e. the inventory accessed by 'e'. - * - * @return the player's inventory - */ - getInventory(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; - /** - * Gets the display name for the player, - * i.e. the name shown in tab list and in the player's nametag. - * @return the display name - */ - getDisplayName(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets the name for this player shown in tab list - * - * @param textComponent the new name to display - */ - setTabDisplayName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Sets the name for this player shown above their head, - * in their name tag - * - * @param textComponent the new name to display - */ - setNametagName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Gets the container the user currently has open, i.e. a chest. - * - * @return the currently opened container - */ - getContainer(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; - /** - * Draws the player in the GUI. Takes the same parameters as [Renderer.drawPlayer] - * minus `player`. - * - * @see Renderer.drawPlayer - */ - draw(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.client.Player; - new(): com.chattriggers.ctjs.api.client.Player; - } - interface Player { - armor: com.chattriggers.ctjs.api.client.Player$ArmorWrapper; - toMC(): net.minecraft.client.player.LocalPlayer | null | undefined; - /** - * Gets Minecraft's EntityPlayerSP object representing the user - * - * @return The Minecraft EntityPlayerSP object representing the user - */ - getPlayer(): net.minecraft.client.player.LocalPlayer | null | undefined; - getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; - asPlayerMP(): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; - getX(): number; - getY(): number; - getZ(): number; - getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; - getRotation(): net.minecraft.world.phys.Vec2; - getLastX(): number; - getLastY(): number; - getLastZ(): number; - getRenderX(): number; - getRenderY(): number; - getRenderZ(): number; - /** - * Gets the player's x motion. - * This is the amount the player will move in the x direction next tick. - * - * @return the player's x motion - */ - getMotionX(): number; - /** - * Gets the player's y motion. - * This is the amount the player will move in the y direction next tick. - * - * @return the player's y motion - */ - getMotionY(): number; - /** - * Gets the player's z motion. - * This is the amount the player will move in the z direction next tick. - * - * @return the player's z motion - */ - getMotionZ(): number; - /** - * Gets the player's camera pitch. - * - * @return the player's camera pitch - */ - getPitch(): number; - /** - * Gets the player's camera yaw. - * - * @return the player's camera yaw - */ - getYaw(): number; - /** - * Gets the player's username. - * - * @return the player's username - */ - getName(): string; - /** - * Gets the Java UUID object of the player. - * Use of [UUID.toString] in conjunction is recommended. - * - * @return the player's uuid - */ - getUUID(): java.util.UUID; - getHP(): number; - /** - * Gets the player's air level. - * - * The returned value will be an integer. If the player is not taking damage, it - * will be between 300 (not in water) and 0. If the player is taking damage, it - * will be between -20 and 0, getting reset to 0 every time the player takes damage. - * - * @return the player's air level - */ - getAirLevel(): number; - getXPLevel(): number; - isMoving(): boolean; - isSneaking(): boolean; - isSprinting(): boolean; - /** - * Checks if player can be pushed by water. - * - * @return true if the player is flying, false otherwise - */ - isFlying(): boolean; - isSleeping(): boolean; - /** - * Gets the direction the player is facing. - * Example: "South West" - * - * @return The direction the player is facing, one of the four cardinal directions - */ - facing(): string; - /** - * Gets the current active potion effects. Returns an empty list - * if the player has no active potion effects. - * - * @return a list of the active [PotionEffect]s - */ - getActivePotionEffects(): Array; - /** - * Gets the current object that the player is looking at, - * whether that be a block or an entity. Returns null when not looking - * at anything. - * - * @return the [Block] or [Entity] being looked at, or null if air - */ - lookingAt(): any | null | undefined; - /** - * Gets the current item in the player's hand. - * - * @param hand the hand of the item - * @return the current held [Item] - */ - getHeldItem(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * Gets the current item in the player's hand. - * - * @param hand the hand of the item - * @return the current held [Item] - */ - getHeldItem(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * Sets the current held item based on the provided index. - * - * @param index the new held item index - */ - setHeldItemIndex(index: number): void; - /** - * Gets the current index of the held item. - * - * @return the current index - */ - getHeldItemIndex(): number; - /** - * Gets the inventory of the player, i.e. the inventory accessed by 'e'. - * - * @return the player's inventory - */ - getInventory(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; - /** - * Gets the display name for the player, - * i.e. the name shown in tab list and in the player's nametag. - * @return the display name - */ - getDisplayName(): com.chattriggers.ctjs.api.message.TextComponent; - /** - * Sets the name for this player shown in tab list - * - * @param textComponent the new name to display - */ - setTabDisplayName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Sets the name for this player shown above their head, - * in their name tag - * - * @param textComponent the new name to display - */ - setNametagName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; - /** - * Gets the container the user currently has open, i.e. a chest. - * - * @return the currently opened container - */ - getContainer(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; - /** - * Draws the player in the GUI. Takes the same parameters as [Renderer.drawPlayer] - * minus `player`. - * - * @see Renderer.drawPlayer - */ - draw(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.client.Player; - new(): com.chattriggers.ctjs.api.client.Player; - } - const Player$ArmorWrapper: { - new(): com.chattriggers.ctjs.api.client.Player$ArmorWrapper; - } - interface Player$ArmorWrapper { - /** - * @return the [Item] in the player's helmet slot or null if the slot is empty - */ - getHelmet(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * @return the [Item] in the player's chestplate slot or null if the slot is empty - */ - getChestplate(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * @return the [Item] in the player's leggings slot or null if the slot is empty - */ - getLeggings(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - /** - * @return the [Item] in the player's boots slot or null if the slot is empty - */ - getBoots(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; - } - const ScreenHelper: { - MenuButton: typeof com.chattriggers.ctjs.api.client.ScreenHelper$MenuButton; - titleFont: com.chattriggers.ctjs.api.render.Font; - smallerFont: com.chattriggers.ctjs.api.render.Font; - drawMenuButton(label: string, x: number, y: number, width: number, height: number, hovered: boolean, textColorOverride: number | null | undefined): void; - argb(a: number, r: number, g: number, b: number): number; - new(): com.chattriggers.ctjs.api.client.ScreenHelper; - } - interface ScreenHelper { - titleFont: com.chattriggers.ctjs.api.render.Font; - smallerFont: com.chattriggers.ctjs.api.render.Font; - drawMenuButton(label: string, x: number, y: number, width: number, height: number, hovered: boolean, textColorOverride: number | null | undefined): void; - argb(a: number, r: number, g: number, b: number): number; - new(): com.chattriggers.ctjs.api.client.ScreenHelper; - } - const ScreenHelper$MenuButton: { - new(label: string, x: number, y: number, width: number, height: number, onClick: kotlin.Function0): com.chattriggers.ctjs.api.client.ScreenHelper$MenuButton; - } - interface ScreenHelper$MenuButton { - getLabel(): string; - getX(): number; - getY(): number; - getWidth(): number; - getHeight(): number; - getOnClick(): kotlin.Function0; - isHovered(mouseX: number, mouseY: number): boolean; - component1(): string; - component2(): number; - component3(): number; - component4(): number; - component5(): number; - component6(): kotlin.Function0; - copy(label: string, x: number, y: number, width: number, height: number, onClick: kotlin.Function0): com.chattriggers.ctjs.api.client.ScreenHelper$MenuButton; - } - const KeyBind: { - /** - * Creates a new keybind, editable in the user's controls. - * - * @param description what the keybind does - * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A - * @param category the keybind category the keybind will be in - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - new(description: string, keyCode: number): com.chattriggers.ctjs.api.client.KeyBind; - /** - * Creates a new keybind, editable in the user's controls. - * - * @param description what the keybind does - * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A - * @param category the keybind category the keybind will be in - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - new(description: string, keyCode: number, category: string): com.chattriggers.ctjs.api.client.KeyBind; - new(keyBinding: net.minecraft.client.KeyMapping): com.chattriggers.ctjs.api.client.KeyBind; - } - interface KeyBind { - registerKeyPress(method: any): com.chattriggers.ctjs.api.client.KeyBind; - registerKeyRelease(method: any): com.chattriggers.ctjs.api.client.KeyBind; - registerKeyDown(method: any): com.chattriggers.ctjs.api.client.KeyBind; - unregisterKeyPress(): com.chattriggers.ctjs.api.client.KeyBind; - unregisterKeyRelease(): com.chattriggers.ctjs.api.client.KeyBind; - unregisterKeyDown(): com.chattriggers.ctjs.api.client.KeyBind; - /** - * Returns true if the key is pressed (used for continuous querying). - * - * @return whether the key is pressed - */ - isKeyDown(): boolean; - /** - * Returns true on the initial key press. For continuous querying use [isKeyDown]. - * - * @return whether the key has just been pressed - */ - isPressed(): boolean; - /** - * Gets the description of the key. - * - * @return the description - */ - getDescription(): string; - /** - * Gets the key code of the key. - * - * @return the integer key code - */ - getKeyCode(): number; - /** - * Gets the category of the key. - * - * @return the category - */ - getCategory(): string; - /** - * Sets the state of the key. - * - * @param pressed True to press, False to release - */ - setState(pressed: boolean): void; - } - const KeyBind$Companion: { - new(): com.chattriggers.ctjs.api.client.KeyBind$Companion; - } - interface KeyBind$Companion { - new(): com.chattriggers.ctjs.api.client.KeyBind$Companion; - } - const ProxyInfo: { - getProxies(): Array; - addProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; - removeProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; - updateProxy(original: com.chattriggers.ctjs.api.client.Proxy, newProxy: com.chattriggers.ctjs.api.client.Proxy): void; - setProxyEnabled(proxy: com.chattriggers.ctjs.api.client.Proxy, enabled: boolean): void; - getEnabledProxies(): Array; - new(): com.chattriggers.ctjs.api.client.ProxyInfo; - } - interface ProxyInfo { - getProxies(): Array; - addProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; - removeProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; - updateProxy(original: com.chattriggers.ctjs.api.client.Proxy, newProxy: com.chattriggers.ctjs.api.client.Proxy): void; - setProxyEnabled(proxy: com.chattriggers.ctjs.api.client.Proxy, enabled: boolean): void; - getEnabledProxies(): Array; - new(): com.chattriggers.ctjs.api.client.ProxyInfo; - } - const ProxyManagerScreen: { - new(parent: net.minecraft.client.gui.screens.Screen): com.chattriggers.ctjs.api.client.ProxyManagerScreen; - } - interface ProxyManagerScreen extends net.minecraft.client.gui.screens.Screen { - refreshList(): void; - } - const ProxyEditScreen: { - new(parent: com.chattriggers.ctjs.api.client.ProxyManagerScreen, existingProxy: com.chattriggers.ctjs.api.client.Proxy | null | undefined): com.chattriggers.ctjs.api.client.ProxyEditScreen; - } - interface ProxyEditScreen extends net.minecraft.client.gui.screens.Screen { - } - const MathLib: { - /** - * Maps a number from one range to another. - * - * @param number the number to map - * @param in_min the original range min - * @param in_max the original range max - * @param out_min the final range min - * @param out_max the final range max - * @return the re-mapped number - */ - map(number: number, in_min: number, in_max: number, out_min: number, out_max: number): number; - /** - * Clamps a floating number between two values. - * - * @param number the number to clamp - * @param min the minimum - * @param max the maximum - * @return the clamped number - */ - clampFloat(number: number, min: number, max: number): number; - /** - * Clamps an integer number between two values. - * - * @param number the number to clamp - * @param min the minimum - * @param max the maximum - * @return the clamped number - */ - clamp(number: number, min: number, max: number): number; - new(): com.chattriggers.ctjs.api.client.MathLib; - } - interface MathLib { - /** - * Maps a number from one range to another. - * - * @param number the number to map - * @param in_min the original range min - * @param in_max the original range max - * @param out_min the final range min - * @param out_max the final range max - * @return the re-mapped number - */ - map(number: number, in_min: number, in_max: number, out_min: number, out_max: number): number; - /** - * Clamps a floating number between two values. - * - * @param number the number to clamp - * @param min the minimum - * @param max the maximum - * @return the clamped number - */ - clampFloat(number: number, min: number, max: number): number; - /** - * Clamps an integer number between two values. - * - * @param number the number to clamp - * @param min the minimum - * @param max the maximum - * @return the clamped number - */ - clamp(number: number, min: number, max: number): number; - new(): com.chattriggers.ctjs.api.client.MathLib; - } - const FileLib: { - /** - * Writes a file to folder in modules. - * - * @param importName name of the import - * @param fileName name of the file - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(importName: string, fileName: string, toWrite: string): void; - /** - * Writes a file to folder in modules. - * - * @param importName name of the import - * @param fileName name of the file - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(importName: string, fileName: string, toWrite: string, recursive: boolean): void; - /** - * Writes a file to anywhere on the system. - * Use "./" for the ".minecraft" folder. - * - * @param fileLocation the location and file name - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(fileLocation: string, toWrite: string): void; - /** - * Writes a file to anywhere on the system. - * Use "./" for the ".minecraft" folder. - * - * @param fileLocation the location and file name - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(fileLocation: string, toWrite: string, recursive: boolean): void; - /** - * Writes a file to folder in modules. - * - * @param importName name of the import - * @param fileName name of the file - * @param toAppend string to append in file - */ - append(importName: string, fileName: string, toAppend: string): void; - /** - * Writes a file to anywhere on the system. - * Use "./" for the ".minecraft" folder. - * - * @param fileLocation the location and file name - * @param toAppend string to append in file - */ - append(fileLocation: string, toAppend: string): void; - /** - * Reads a file from folder in modules. - * Returns null if file is not found. - * - * @param importName name of the import - * @param fileName name of the file - * @return the string in the file, or null if not found - */ - read(importName: string, fileName: string): string | null | undefined; - /** - * Reads a file from anywhere on the system. - * Use "./" for the ".minecraft" folder. - * Returns null if file is not found. - * - * @param fileLocation the location and file name - * @return the string in the file, or null if not found - */ - read(fileLocation: string): string | null | undefined; - /** - * Reads a file from anywhere on the system using java.io.File. - * - * @param file the java.io.File to read - * @return the string in the file, or null if not found - */ - read(file: java.io.File): string | null | undefined; - /** - * Determines if a file or directory exists at the specified location - * - * @param importName name of the import - * @param fileName name of the file - * @return if the file exists - */ - exists(importName: string, fileName: string): boolean; - /** - * Determines if a file or directory exists at the specified location - * - * @param fileLocation the path of the file - * @return if the file exists - */ - exists(fileLocation: string): boolean; - /** - * Determines if a file or directory exists at the specified location - * - * @param importName name of the import - * @param fileName name of the file - * @return if the location is a directory - */ - isDirectory(importName: string, fileName: string): boolean; - /** - * Determines if a file or directory exists at the specified location - * - * @param fileLocation the path of the file - * @return if the location is a directory - */ - isDirectory(fileLocation: string): boolean; - /** - * Gets the contents of a url as a string. - * - * @param theUrl the url to get the data from - * @param userAgent the user agent to use in the connection - * @return the string stored in the url content - */ - getUrlContent(theUrl: string): string; - /** - * Gets the contents of a url as a string. - * - * @param theUrl the url to get the data from - * @param userAgent the user agent to use in the connection - * @return the string stored in the url content - */ - getUrlContent(theUrl: string, userAgent: string | null | undefined): string; - /** - * Deletes a directory at the specified location - * - * @param dir the directory to delete - * @return if the directory was deleted - */ - deleteDirectory(dir: string): boolean; - /** - * Deletes a directory at the specified location - * - * @param dir the directory to delete - * @return if the directory was deleted - */ - deleteDirectory(dir: java.io.File): boolean; - /** - * Extracts a zip file specified by the zipFilePath to a directory specified by - * destDirectory (will be created if does not exist). - * @param zipFilePath the zip file path - * @param destDirectory the destination directory - * @throws IOException IOException - */ - unzip(zipFilePath: string, destDirectory: string): void; - /** - * Encodes a string to a base64 string - * - * @param toEncode string to encode - * @return base64 encoded string - */ - encodeBase64(toEncode: string): string; - /** - * Decodes a base64 string to a string - * - * @param toDecode base64 encoded string to decode - * @return decoded string - */ - decodeBase64(toDecode: string): string; - /** - * Opens a url in the default browser - * - * @param url the url to open - */ - open(url: string): void; - /** - * Opens a path in the file explorer - * - * @param path the path to open - */ - open(path: java.io.File): void; - new(): com.chattriggers.ctjs.api.client.FileLib; - } - interface FileLib { - /** - * Writes a file to folder in modules. - * - * @param importName name of the import - * @param fileName name of the file - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(importName: string, fileName: string, toWrite: string): void; - /** - * Writes a file to folder in modules. - * - * @param importName name of the import - * @param fileName name of the file - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(importName: string, fileName: string, toWrite: string, recursive: boolean): void; - /** - * Writes a file to anywhere on the system. - * Use "./" for the ".minecraft" folder. - * - * @param fileLocation the location and file name - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(fileLocation: string, toWrite: string): void; - /** - * Writes a file to anywhere on the system. - * Use "./" for the ".minecraft" folder. - * - * @param fileLocation the location and file name - * @param toWrite string to write in file - * @param recursive whether to create folders to the file location if they don't exist - */ - write(fileLocation: string, toWrite: string, recursive: boolean): void; - /** - * Writes a file to folder in modules. - * - * @param importName name of the import - * @param fileName name of the file - * @param toAppend string to append in file - */ - append(importName: string, fileName: string, toAppend: string): void; - /** - * Writes a file to anywhere on the system. - * Use "./" for the ".minecraft" folder. - * - * @param fileLocation the location and file name - * @param toAppend string to append in file - */ - append(fileLocation: string, toAppend: string): void; - /** - * Reads a file from folder in modules. - * Returns null if file is not found. - * - * @param importName name of the import - * @param fileName name of the file - * @return the string in the file, or null if not found - */ - read(importName: string, fileName: string): string | null | undefined; - /** - * Reads a file from anywhere on the system. - * Use "./" for the ".minecraft" folder. - * Returns null if file is not found. - * - * @param fileLocation the location and file name - * @return the string in the file, or null if not found - */ - read(fileLocation: string): string | null | undefined; - /** - * Reads a file from anywhere on the system using java.io.File. - * - * @param file the java.io.File to read - * @return the string in the file, or null if not found - */ - read(file: java.io.File): string | null | undefined; - /** - * Determines if a file or directory exists at the specified location - * - * @param importName name of the import - * @param fileName name of the file - * @return if the file exists - */ - exists(importName: string, fileName: string): boolean; - /** - * Determines if a file or directory exists at the specified location - * - * @param fileLocation the path of the file - * @return if the file exists - */ - exists(fileLocation: string): boolean; - /** - * Determines if a file or directory exists at the specified location - * - * @param importName name of the import - * @param fileName name of the file - * @return if the location is a directory - */ - isDirectory(importName: string, fileName: string): boolean; - /** - * Determines if a file or directory exists at the specified location - * - * @param fileLocation the path of the file - * @return if the location is a directory - */ - isDirectory(fileLocation: string): boolean; - /** - * Gets the contents of a url as a string. - * - * @param theUrl the url to get the data from - * @param userAgent the user agent to use in the connection - * @return the string stored in the url content - */ - getUrlContent(theUrl: string): string; - /** - * Gets the contents of a url as a string. - * - * @param theUrl the url to get the data from - * @param userAgent the user agent to use in the connection - * @return the string stored in the url content - */ - getUrlContent(theUrl: string, userAgent: string | null | undefined): string; - /** - * Deletes a directory at the specified location - * - * @param dir the directory to delete - * @return if the directory was deleted - */ - deleteDirectory(dir: string): boolean; - /** - * Deletes a directory at the specified location - * - * @param dir the directory to delete - * @return if the directory was deleted - */ - deleteDirectory(dir: java.io.File): boolean; - /** - * Extracts a zip file specified by the zipFilePath to a directory specified by - * destDirectory (will be created if does not exist). - * @param zipFilePath the zip file path - * @param destDirectory the destination directory - * @throws IOException IOException - */ - unzip(zipFilePath: string, destDirectory: string): void; - /** - * Encodes a string to a base64 string - * - * @param toEncode string to encode - * @return base64 encoded string - */ - encodeBase64(toEncode: string): string; - /** - * Decodes a base64 string to a string - * - * @param toDecode base64 encoded string to decode - * @return decoded string - */ - decodeBase64(toDecode: string): string; - /** - * Opens a url in the default browser - * - * @param url the url to open - */ - open(url: string): void; - /** - * Opens a path in the file explorer - * - * @param path the path to open - */ - open(path: java.io.File): void; - new(): com.chattriggers.ctjs.api.client.FileLib; - } - const Client: { - CurrentGuiWrapper: typeof com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; - CameraWrapper: typeof com.chattriggers.ctjs.api.client.Client$CameraWrapper; - currentGui: com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; - camera: com.chattriggers.ctjs.api.client.Client$CameraWrapper; - /** - * Gets Minecraft's Minecraft object - * - * @return The Minecraft object - */ - getMinecraft(): net.minecraft.client.Minecraft; - /** - * Gets Minecraft's NetHandlerPlayClient object - * - * @return The NetHandlerPlayClient object - */ - getConnection(): net.minecraft.client.multiplayer.ClientPacketListener | null | undefined; - /** - * Schedule's a task to run on Minecraft's main thread in [delay] ticks. - * Defaults to the next tick. - * @param delay The delay in ticks - * @param callback The task to run on the main thread - */ - scheduleTask(callback: kotlin.Function0): void; - /** - * Schedule's a task to run on Minecraft's main thread in [delay] ticks. - * Defaults to the next tick. - * @param delay The delay in ticks - * @param callback The task to run on the main thread - */ - scheduleTask(delay: number, callback: kotlin.Function0): void; - /** - * Quits the client back to the main menu. - * This acts just like clicking the "Disconnect" or "Save and quit to title" button. - */ - disconnect(): void; - /** - * Connects to the server with the given ip. - * @param ip The ip to connect to - */ - connect(ip: string): void; - /** - * Connects to the server with the given ip. - * @param ip The ip to connect to - */ - connect(ip: string, port: number): void; - /** - * Gets the Minecraft ChatHud object for the chat gui - * - * @return The GuiNewChat object for the chat gui - */ - getChatGui(): net.minecraft.client.gui.components.ChatComponent | null | undefined; - isInChat(): boolean; - getTabGui(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; - isInTab(): boolean; - /** - * Gets whether the Minecraft window is active - * and in the foreground of the user's screen. - * - * @return true if the game is active, false otherwise - */ - isTabbedIn(): boolean; - isControlDown(): boolean; - isShiftDown(): boolean; - isAltDown(): boolean; - getFPS(): number; - getVersion(): string; - getSystemTime(): number; - getMouseX(): number; - getMouseY(): number; - isInGui(): boolean; - /** - * Gets the chat message currently typed into the chat gui. - * - * @return A blank string if the gui isn't open, otherwise, the message - */ - getCurrentChatMessage(): string; - /** - * Sets the current chat message, if the chat gui is not open, one will be opened. - * - * @param message the message to put in the chat text box. - */ - setCurrentChatMessage(message: string): void; - setSignLine(line: number, text: string): void; - resumeHeldKeys(): void; - releaseHeldKey(input: com.mojang.blaze3d.platform.InputConstants$Key): void; - leftClick(): void; - rightClick(): void; - setKey(key: string): boolean; - setKey(key: string, pressed: boolean): boolean; - isKeyDown(key: string): boolean; - stopMovement(): void; - unpressKeys(): void; - sendPacket(packet: net.minecraft.network.protocol.Packet): void; - sendSequencedPacket(packetFactory: kotlin.Function1>): void; - /** - * Display a title. - * - * @param title title text - * @param subtitle subtitle text - * @param fadeIn time to fade in - * @param time time to stay on screen - * @param fadeOut time to fade out - */ - showTitle(title: string | null | undefined, subtitle: string | null | undefined, fadeIn: number, time: number, fadeOut: number): void; - /** - * Copies a string to the clipboard - * - * @param text The text to copy - */ - copy(): void; - /** - * Copies a string to the clipboard - * - * @param text The text to copy - */ - copy(text: string): void; - /** - * Get the string currently on the clipboard - */ - paste(): string; - /** - * Get the [KeyBinding] from an already existing Minecraft KeyBinding, otherwise, returns null. - * - * @param keyCode the keycode to search for, see Keyboard below. Ex. Keyboard.KEY_A - * @return the [KeyBinding] from a Minecraft KeyBinding, or null if one doesn't exist - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - getKeyBindFromKey(keyCode: number): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; - /** - * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. - * - * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A - * @param description the description of the keybind - * @param category the keybind category the keybind will be in - * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - getKeyBindFromKey(keyCode: number, description: string): com.chattriggers.ctjs.api.client.KeyBind; - /** - * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. - * - * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A - * @param description the description of the keybind - * @param category the keybind category the keybind will be in - * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - getKeyBindFromKey(keyCode: number, description: string, category: string): com.chattriggers.ctjs.api.client.KeyBind; - /** - * Get the [KeyBinding] from an already existing - * Minecraft KeyBinding, otherwise, returns null. - * - * @param description the description of the keybind - * @return the [KeyBinding], or null if one doesn't exist - */ - getKeyBindFromDescription(description: string): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; - new(): com.chattriggers.ctjs.api.client.Client; - } - interface Client { - currentGui: com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; - camera: com.chattriggers.ctjs.api.client.Client$CameraWrapper; - /** - * Gets Minecraft's Minecraft object - * - * @return The Minecraft object - */ - getMinecraft(): net.minecraft.client.Minecraft; - /** - * Gets Minecraft's NetHandlerPlayClient object - * - * @return The NetHandlerPlayClient object - */ - getConnection(): net.minecraft.client.multiplayer.ClientPacketListener | null | undefined; - /** - * Schedule's a task to run on Minecraft's main thread in [delay] ticks. - * Defaults to the next tick. - * @param delay The delay in ticks - * @param callback The task to run on the main thread - */ - scheduleTask(callback: kotlin.Function0): void; - /** - * Schedule's a task to run on Minecraft's main thread in [delay] ticks. - * Defaults to the next tick. - * @param delay The delay in ticks - * @param callback The task to run on the main thread - */ - scheduleTask(delay: number, callback: kotlin.Function0): void; - /** - * Quits the client back to the main menu. - * This acts just like clicking the "Disconnect" or "Save and quit to title" button. - */ - disconnect(): void; - /** - * Connects to the server with the given ip. - * @param ip The ip to connect to - */ - connect(ip: string): void; - /** - * Connects to the server with the given ip. - * @param ip The ip to connect to - */ - connect(ip: string, port: number): void; - /** - * Gets the Minecraft ChatHud object for the chat gui - * - * @return The GuiNewChat object for the chat gui - */ - getChatGui(): net.minecraft.client.gui.components.ChatComponent | null | undefined; - isInChat(): boolean; - getTabGui(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; - isInTab(): boolean; - /** - * Gets whether the Minecraft window is active - * and in the foreground of the user's screen. - * - * @return true if the game is active, false otherwise - */ - isTabbedIn(): boolean; - isControlDown(): boolean; - isShiftDown(): boolean; - isAltDown(): boolean; - getFPS(): number; - getVersion(): string; - getSystemTime(): number; - getMouseX(): number; - getMouseY(): number; - isInGui(): boolean; - /** - * Gets the chat message currently typed into the chat gui. - * - * @return A blank string if the gui isn't open, otherwise, the message - */ - getCurrentChatMessage(): string; - /** - * Sets the current chat message, if the chat gui is not open, one will be opened. - * - * @param message the message to put in the chat text box. - */ - setCurrentChatMessage(message: string): void; - setSignLine(line: number, text: string): void; - resumeHeldKeys(): void; - releaseHeldKey(input: com.mojang.blaze3d.platform.InputConstants$Key): void; - leftClick(): void; - rightClick(): void; - setKey(key: string): boolean; - setKey(key: string, pressed: boolean): boolean; - isKeyDown(key: string): boolean; - stopMovement(): void; - unpressKeys(): void; - sendPacket(packet: net.minecraft.network.protocol.Packet): void; - sendSequencedPacket(packetFactory: kotlin.Function1>): void; - /** - * Display a title. - * - * @param title title text - * @param subtitle subtitle text - * @param fadeIn time to fade in - * @param time time to stay on screen - * @param fadeOut time to fade out - */ - showTitle(title: string | null | undefined, subtitle: string | null | undefined, fadeIn: number, time: number, fadeOut: number): void; - /** - * Copies a string to the clipboard - * - * @param text The text to copy - */ - copy(): void; - /** - * Copies a string to the clipboard - * - * @param text The text to copy - */ - copy(text: string): void; - /** - * Get the string currently on the clipboard - */ - paste(): string; - /** - * Get the [KeyBinding] from an already existing Minecraft KeyBinding, otherwise, returns null. - * - * @param keyCode the keycode to search for, see Keyboard below. Ex. Keyboard.KEY_A - * @return the [KeyBinding] from a Minecraft KeyBinding, or null if one doesn't exist - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - getKeyBindFromKey(keyCode: number): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; - /** - * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. - * - * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A - * @param description the description of the keybind - * @param category the keybind category the keybind will be in - * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - getKeyBindFromKey(keyCode: number, description: string): com.chattriggers.ctjs.api.client.KeyBind; - /** - * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. - * - * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A - * @param description the description of the keybind - * @param category the keybind category the keybind will be in - * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist - * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) - */ - getKeyBindFromKey(keyCode: number, description: string, category: string): com.chattriggers.ctjs.api.client.KeyBind; - /** - * Get the [KeyBinding] from an already existing - * Minecraft KeyBinding, otherwise, returns null. - * - * @param description the description of the keybind - * @return the [KeyBinding], or null if one doesn't exist - */ - getKeyBindFromDescription(description: string): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; - new(): com.chattriggers.ctjs.api.client.Client; - } - const Client$CurrentGuiWrapper: { - new(): com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; - } - interface Client$CurrentGuiWrapper { - /** - * Gets the Java class name of the currently open gui, for example, "GuiChest" - * - * @return the class name of the current gui - */ - getClassName(): string; - /** - * Gets the Minecraft gui class that is currently open - * - * @return the Minecraft gui - */ - get(): net.minecraft.client.gui.screens.Screen | null | undefined; - set(screen: net.minecraft.client.gui.screens.Screen | null | undefined): void; - /** - * Gets the slot under the mouse in the current gui, if one exists. - * - * @return the [Slot] under the mouse - */ - getSlotUnderMouse(): com.chattriggers.ctjs.api.inventory.Slot | null | undefined; - /** - * Closes the currently open gui - */ - close(): void; - } - const Client$CameraWrapper: { - new(): com.chattriggers.ctjs.api.client.Client$CameraWrapper; - } - interface Client$CameraWrapper { - getX(): number; - getY(): number; - getZ(): number; - } - const WelcomeScreen: { - new(): com.chattriggers.ctjs.api.client.WelcomeScreen; - } - interface WelcomeScreen extends net.minecraft.client.gui.screens.Screen { - } - const WelcomeScreen$Companion: { - open(): void; - new(): com.chattriggers.ctjs.api.client.WelcomeScreen$Companion; - } - interface WelcomeScreen$Companion { - open(): void; - new(): com.chattriggers.ctjs.api.client.WelcomeScreen$Companion; - } - } - namespace render { - const Font: { - new(name: string, resourcePath: string): com.chattriggers.ctjs.api.render.Font; - new(name: string, inputStream: java.io.InputStream): com.chattriggers.ctjs.api.render.Font; - } - interface Font { - getName(): string; - buffer(): java.nio.ByteBuffer; - } - const LegacyPipelineBuilder: { - new(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - } - interface LegacyPipelineBuilder { - new(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat, snippet: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - enableBlend(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - disableBlend(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - enableCull(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - disableCull(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - enableDepth(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - disableDepth(): com.chattriggers.ctjs.api.render.LegacyPipelineBuilder; - build(): com.mojang.blaze3d.pipeline.RenderPipeline; - layer(): net.minecraft.client.renderer.rendertype.RenderType; - state(): string; - } - const Renderer$DrawMode: { - LINES: com.chattriggers.ctjs.api.render.Renderer$DrawMode; - LINE_STRIP: com.chattriggers.ctjs.api.render.Renderer$DrawMode; - TRIANGLES: com.chattriggers.ctjs.api.render.Renderer$DrawMode; - TRIANGLE_STRIP: com.chattriggers.ctjs.api.render.Renderer$DrawMode; - TRIANGLE_FAN: com.chattriggers.ctjs.api.render.Renderer$DrawMode; - QUADS: com.chattriggers.ctjs.api.render.Renderer$DrawMode; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.render.Renderer$DrawMode; - } - interface Renderer$DrawMode extends kotlin.Enum { - toUC(): gg.essential.universal.UGraphics$DrawMode; - } - const Renderer$DrawMode$Companion: { - fromUC(ucValue: gg.essential.universal.UGraphics$DrawMode): com.chattriggers.ctjs.api.render.Renderer$DrawMode; - new(): unknown; - } - interface Renderer$DrawMode$Companion { - fromUC(ucValue: gg.essential.universal.UGraphics$DrawMode): com.chattriggers.ctjs.api.render.Renderer$DrawMode; - new(): unknown; - } - const Renderer$VertexFormat: { - LINES: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION_COLOR: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION_TEXTURE: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION_TEXTURE_COLOR: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION_COLOR_TEXTURE_LIGHT: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION_TEXTURE_LIGHT_COLOR: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION_TEXTURE_COLOR_LIGHT: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - POSITION_TEXTURE_COLOR_NORMAL: com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - } - interface Renderer$VertexFormat extends kotlin.Enum { - toMC(): com.mojang.blaze3d.vertex.VertexFormat; - } - const Renderer$VertexFormat$Companion: { - fromMC(ucValue: com.mojang.blaze3d.vertex.VertexFormat): com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - new(): unknown; - } - interface Renderer$VertexFormat$Companion { - fromMC(ucValue: com.mojang.blaze3d.vertex.VertexFormat): com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - new(): unknown; - } - const Renderer$RenderSnippet: { - TERRAIN_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - ENTITY_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - RENDERTYPE_BEACON_BEAM_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - TEXT_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - RENDERTYPE_END_PORTAL_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - RENDERTYPE_CLOUDS_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - RENDERTYPE_LINES_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - POSITION_COLOR_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - PARTICLE_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - WEATHER_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - GUI_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - POSITION_TEX_COLOR_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - RENDERTYPE_OUTLINE_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - POST_EFFECT_PROCESSOR_SNIPPET: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - } - interface Renderer$RenderSnippet extends kotlin.Enum { - getMcSnippet(): com.mojang.blaze3d.pipeline.RenderPipeline$Snippet; - } - const RenderPipelines: { - LINE_LIST: com.mojang.blaze3d.pipeline.RenderPipeline; - LINE_LIST_ESP: com.mojang.blaze3d.pipeline.RenderPipeline; - TRIANGLE_STRIP: com.mojang.blaze3d.pipeline.RenderPipeline; - TRIANGLE_STRIP_ESP: com.mojang.blaze3d.pipeline.RenderPipeline; - new(): com.chattriggers.ctjs.api.render.RenderPipelines; - } - interface RenderPipelines { - LINE_LIST: com.mojang.blaze3d.pipeline.RenderPipeline; - LINE_LIST_ESP: com.mojang.blaze3d.pipeline.RenderPipeline; - TRIANGLE_STRIP: com.mojang.blaze3d.pipeline.RenderPipeline; - TRIANGLE_STRIP_ESP: com.mojang.blaze3d.pipeline.RenderPipeline; - new(): com.chattriggers.ctjs.api.render.RenderPipelines; - } - const RenderLayers: { - LINE_LIST: net.minecraft.client.renderer.rendertype.RenderType; - LINE_LIST_ESP: net.minecraft.client.renderer.rendertype.RenderType; - TRIANGLE_STRIP: net.minecraft.client.renderer.rendertype.RenderType; - TRIANGLE_STRIP_ESP: net.minecraft.client.renderer.rendertype.RenderType; - new(): com.chattriggers.ctjs.api.render.RenderLayers; - } - interface RenderLayers { - LINE_LIST: net.minecraft.client.renderer.rendertype.RenderType; - LINE_LIST_ESP: net.minecraft.client.renderer.rendertype.RenderType; - TRIANGLE_STRIP: net.minecraft.client.renderer.rendertype.RenderType; - TRIANGLE_STRIP_ESP: net.minecraft.client.renderer.rendertype.RenderType; - new(): com.chattriggers.ctjs.api.render.RenderLayers; - } - const Toast: { - new(config: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.render.Toast; - } - interface Toast extends net.minecraft.client.gui.components.toasts.Toast { - getTitle(): any | null | undefined; - setTitle(value: any | null | undefined): void; - getDescription(): any | null | undefined; - setDescription(value: any | null | undefined): void; - getBackground(): any | null | undefined; - setBackground(value: any | null | undefined): void; - getIcon(): any | null | undefined; - setIcon(value: any | null | undefined): void; - getDisplayTime(): number; - setDisplayTime(value: number): void; - show(): com.chattriggers.ctjs.api.render.Toast; - } - const Display: { - Background: typeof com.chattriggers.ctjs.api.render.Display$Background; - Order: typeof com.chattriggers.ctjs.api.render.Display$Order; - new(): com.chattriggers.ctjs.api.render.Display; - new(config: org.mozilla.javascript.NativeObject | null | undefined): com.chattriggers.ctjs.api.render.Display; - } - interface Display { - getTextColor(): number; - /** - * Sets the color of the texts - * - * Overrides the color of the individual texts - */ - setTextColor(textColor: number): com.chattriggers.ctjs.api.render.Display; - getAlign(): com.chattriggers.ctjs.api.render.Text$Align; - /** - * Set the alignment of the texts in the display - * - * Overrides alignment of the individual texts - */ - setAlign(align: any): com.chattriggers.ctjs.api.render.Display; - getOrder(): com.chattriggers.ctjs.api.render.Display$Order; - setOrder(order: any): com.chattriggers.ctjs.api.render.Display; - getBackground(): com.chattriggers.ctjs.api.render.Display$Background; - setBackground(background: any): com.chattriggers.ctjs.api.render.Display; - getBackgroundColor(): number; - setBackgroundColor(backgroundColor: number): com.chattriggers.ctjs.api.render.Display; - setLine(index: number, line: any): com.chattriggers.ctjs.api.render.Display; - getLine(index: number): com.chattriggers.ctjs.api.render.Text; - getLines(): Array; - setLines(lines: Array): com.chattriggers.ctjs.api.render.Display; - addLine(line: any): com.chattriggers.ctjs.api.render.Display; - addLines(lines: any): com.chattriggers.ctjs.api.render.Display; - removeLine(index: number): com.chattriggers.ctjs.api.render.Display; - clearLines(): com.chattriggers.ctjs.api.render.Display; - getX(): number; - setX(x: number): com.chattriggers.ctjs.api.render.Display; - getY(): number; - setY(y: number): com.chattriggers.ctjs.api.render.Display; - getWidth(): number; - getHeight(): number; - getMinWidth(): number; - setMinWidth(minWidth: number): com.chattriggers.ctjs.api.render.Display; - draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor): void; - } - const Text$Align: { - LEFT: com.chattriggers.ctjs.api.render.Text$Align; - CENTER: com.chattriggers.ctjs.api.render.Text$Align; - RIGHT: com.chattriggers.ctjs.api.render.Text$Align; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.render.Text$Align; - } - interface Text$Align extends kotlin.Enum { - } - const Display$Order: { - REVERSED: com.chattriggers.ctjs.api.render.Display$Order; - NORMAL: com.chattriggers.ctjs.api.render.Display$Order; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.render.Display$Order; - } - interface Display$Order extends kotlin.Enum { - } - const Display$Background: { - NONE: com.chattriggers.ctjs.api.render.Display$Background; - FULL: com.chattriggers.ctjs.api.render.Display$Background; - PER_LINE: com.chattriggers.ctjs.api.render.Display$Background; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.render.Display$Background; - } - interface Display$Background extends kotlin.Enum { - } - const Text: { - Align: typeof com.chattriggers.ctjs.api.render.Text$Align; - new(string: string): com.chattriggers.ctjs.api.render.Text; - new(string: string, x: number): com.chattriggers.ctjs.api.render.Text; - new(string: string, x: number, y: number): com.chattriggers.ctjs.api.render.Text; - new(string: string, config: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.render.Text; - } - interface Text { - getString(): string; - setString(string: string): com.chattriggers.ctjs.api.render.Text; - getColor(): number; - setColor(color: number): com.chattriggers.ctjs.api.render.Text; - getFormatted(): boolean; - setFormatted(formatted: boolean): com.chattriggers.ctjs.api.render.Text; - getShadow(): boolean; - setShadow(shadow: boolean): com.chattriggers.ctjs.api.render.Text; - getAlign(): com.chattriggers.ctjs.api.render.Text$Align; - setAlign(align: any): com.chattriggers.ctjs.api.render.Text; - getBackground(): boolean; - /** - * Set the background - * - * true: Background is enabled - * false: Background is disabled - */ - setBackground(background: boolean): com.chattriggers.ctjs.api.render.Text; - getBackgroundColor(): number; - setBackgroundColor(backgroundColor: number): com.chattriggers.ctjs.api.render.Text; - getX(): number; - setX(x: number): com.chattriggers.ctjs.api.render.Text; - getY(): number; - setY(y: number): com.chattriggers.ctjs.api.render.Text; - /** - * Gets the width of the text - * This is automatically updated when the text is drawn. - * - * @return the width of the text - */ - getWidth(): number; - getLines(): Array; - getMaxLines(): number; - setMaxLines(maxLines: number): com.chattriggers.ctjs.api.render.Text; - getScale(): number; - setScale(scale: number): com.chattriggers.ctjs.api.render.Text; - /** - * Sets the maximum width of the text, splitting it into multiple lines if necessary. - * - * @param maxWidth the maximum width of the text - * @return the Text object for method chaining - */ - setMaxWidth(maxWidth: number): com.chattriggers.ctjs.api.render.Text; - getMaxWidth(): number; - getHeight(): number; - exceedsMaxLines(): boolean; - draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor): com.chattriggers.ctjs.api.render.Text; - draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor, x: number | null | undefined): com.chattriggers.ctjs.api.render.Text; - draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor, x: number | null | undefined, y: number | null | undefined): com.chattriggers.ctjs.api.render.Text; - } - const Renderer: { - DrawMode: typeof com.chattriggers.ctjs.api.render.Renderer$DrawMode; - VertexFormat: typeof com.chattriggers.ctjs.api.render.Renderer$VertexFormat; - RenderSnippet: typeof com.chattriggers.ctjs.api.render.Renderer$RenderSnippet; - ScreenWrapper: typeof com.chattriggers.ctjs.api.render.Renderer$ScreenWrapper; - screen: com.chattriggers.ctjs.api.render.Renderer$ScreenWrapper; - getPartialTicks(): number; - BLACK: number; - DARK_BLUE: number; - DARK_GREEN: number; - DARK_AQUA: number; - DARK_RED: number; - DARK_PURPLE: number; - GOLD: number; - GRAY: number; - DARK_GRAY: number; - BLUE: number; - GREEN: number; - AQUA: number; - RED: number; - LIGHT_PURPLE: number; - YELLOW: number; - WHITE: number; - color(color: number): number; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param color the color value, can use [getColor] to get this - * @return [Renderer] to allow for method chaining - */ - color(color: number): com.chattriggers.ctjs.api.render.Renderer; - getFontRenderer(): net.minecraft.client.gui.Font; - getRenderManager(): net.minecraft.client.renderer.LevelRenderer; - getStringWidth(text: string): number; - getColor(red: number, green: number, blue: number): number; - getColor(red: number, green: number, blue: number, alpha: number): number; - getRainbow(step: number): number; - getRainbow(step: number, speed: number): number; - getRainbowColors(step: number): Array; - getRainbowColors(step: number, speed: number): Array; - disableCull(): com.chattriggers.ctjs.api.render.Renderer; - enableCull(): com.chattriggers.ctjs.api.render.Renderer; - disableLighting(): com.chattriggers.ctjs.api.render.Renderer; - enableLighting(): com.chattriggers.ctjs.api.render.Renderer; - disableDepth(): com.chattriggers.ctjs.api.render.Renderer; - enableDepth(): com.chattriggers.ctjs.api.render.Renderer; - disableBlend(): com.chattriggers.ctjs.api.render.Renderer; - enableBlend(): com.chattriggers.ctjs.api.render.Renderer; - bindTexture(texture: com.chattriggers.ctjs.api.render.Image): com.chattriggers.ctjs.api.render.Renderer; - bindTexture(texture: com.chattriggers.ctjs.api.render.Image, textureIndex: number): com.chattriggers.ctjs.api.render.Renderer; - deleteTexture(texture: com.chattriggers.ctjs.api.render.Image): com.chattriggers.ctjs.api.render.Renderer; - pushMatrix(): com.chattriggers.ctjs.api.render.Renderer; - pushMatrix(stack: gg.essential.universal.UMatrixStack): com.chattriggers.ctjs.api.render.Renderer; - popMatrix(): com.chattriggers.ctjs.api.render.Renderer; - translate(x: number, y: number): com.chattriggers.ctjs.api.render.Renderer; - translate(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - scale(scaleX: number): com.chattriggers.ctjs.api.render.Renderer; - scale(scaleX: number, scaleY: number): com.chattriggers.ctjs.api.render.Renderer; - scale(scaleX: number, scaleY: number, scaleZ: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number, x: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number, x: number, y: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number, x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - multiply(quaternion: org.joml.Quaternionf): com.chattriggers.ctjs.api.render.Renderer; - fixAlpha(color: number): number; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(): com.chattriggers.ctjs.api.render.Renderer; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode): com.chattriggers.ctjs.api.render.Renderer; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat): com.chattriggers.ctjs.api.render.Renderer; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat, snippet: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer] to allow for method chaining - */ - pos(x: number, y: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer] to allow for method chaining - */ - pos(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the texture location on the last defined vertex. - * - * @param u the u position in the texture - * @param v the v position in the texture - * @return [Renderer] to allow for method chaining - */ - tex(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the normal of the vertex. This is mostly used with [VertexFormat.LINES] - * - * @param x the x position of the normal vector - * @param y the y position of the normal vector - * @param z the z position of the normal vector - * @return [Renderer] to allow for method chaining - */ - normal(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the overlay location on the last defined vertex. - * - * @param u the u position in the overlay - * @param v the v position in the overlay - * @return [Renderer] to allow for method chaining - */ - overlay(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the light location on the last defined vertex. - * - * @param u the u position in the light - * @param v the v position in the light - * @return [Renderer] to allow for method chaining - */ - light(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Finalizes vertices and draws the world renderer. - */ - draw(): void; - /** - * Gets a fixed render position from x, y, and z inputs adjusted with partial ticks - * @param x the X coordinate - * @param y the Y coordinate - * @param z the Z coordinate - * @return the Vec3f position to render at - */ - getRenderPos(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; - drawRect(color: number, x: number, y: number, width: number, height: number): com.chattriggers.ctjs.api.render.Renderer; - drawLine(color: number, x1: number, y1: number, x2: number, y2: number, thickness: number): void; - drawCircle(color: number, x: number, y: number, radius: number, steps: number): void; - drawString(text: string, x: number, y: number): void; - drawString(text: string, x: number, y: number, color: number): void; - drawString(text: string, x: number, y: number, color: number, shadow: boolean): void; - drawStringWithShadow(text: string, x: number, y: number): void; - drawStringWithShadow(text: string, x: number, y: number, color: number): void; - drawImage(image: com.chattriggers.ctjs.api.render.Image, x: number, y: number, width: number, height: number): void; - /** - * Draws a player entity to the screen, similar to the one displayed in the inventory screen. - * - * Takes a parameter with the following options: - * - player: The player entity to draw. Can be a [PlayerMP] or [AbstractClientPlayerEntity]. - * Defaults to Player.toMC() - * - x: The x position on the screen to render the player - * - y: The y position on the screen to render the player - * - size: The size of the rendered player - * - rotate: Whether the player should look at the mouse cursor, similar to the inventory screen - * - pitch: THe pitch the rendered player will face, if rotate is false - * - yaw: The yaw the rendered player will face, if rotate is false - * - showNametag: Whether the nametag of the player should be rendered - * - showArmor: Whether the armor of the player should be rendered - * - showCape: Whether the cape of the player should be rendered - * - showHeldItem: Whether the held item of the player should be rendered - * - showArrows: Whether any arrows stuck in the player's model should be rendered - * - showElytra: Whether the player's Elytra should be rendered - * - showParrot: Whether a perched parrot should be rendered - * - showBeeStinger: Whether any stuck bee stingers should be rendered - * - * @param obj An options bag - */ - drawPlayer(obj: org.mozilla.javascript.NativeObject): void; - new(): com.chattriggers.ctjs.api.render.Renderer; - } - interface Renderer { - screen: com.chattriggers.ctjs.api.render.Renderer$ScreenWrapper; - getPartialTicks(): number; - BLACK: number; - DARK_BLUE: number; - DARK_GREEN: number; - DARK_AQUA: number; - DARK_RED: number; - DARK_PURPLE: number; - GOLD: number; - GRAY: number; - DARK_GRAY: number; - BLUE: number; - GREEN: number; - AQUA: number; - RED: number; - LIGHT_PURPLE: number; - YELLOW: number; - WHITE: number; - color(color: number): number; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the color for the last defined vertex. - * - * @param color the color value, can use [getColor] to get this - * @return [Renderer] to allow for method chaining - */ - color(color: number): com.chattriggers.ctjs.api.render.Renderer; - getFontRenderer(): net.minecraft.client.gui.Font; - getRenderManager(): net.minecraft.client.renderer.LevelRenderer; - getStringWidth(text: string): number; - getColor(red: number, green: number, blue: number): number; - getColor(red: number, green: number, blue: number, alpha: number): number; - getRainbow(step: number): number; - getRainbow(step: number, speed: number): number; - getRainbowColors(step: number): Array; - getRainbowColors(step: number, speed: number): Array; - disableCull(): com.chattriggers.ctjs.api.render.Renderer; - enableCull(): com.chattriggers.ctjs.api.render.Renderer; - disableLighting(): com.chattriggers.ctjs.api.render.Renderer; - enableLighting(): com.chattriggers.ctjs.api.render.Renderer; - disableDepth(): com.chattriggers.ctjs.api.render.Renderer; - enableDepth(): com.chattriggers.ctjs.api.render.Renderer; - disableBlend(): com.chattriggers.ctjs.api.render.Renderer; - enableBlend(): com.chattriggers.ctjs.api.render.Renderer; - bindTexture(texture: com.chattriggers.ctjs.api.render.Image): com.chattriggers.ctjs.api.render.Renderer; - bindTexture(texture: com.chattriggers.ctjs.api.render.Image, textureIndex: number): com.chattriggers.ctjs.api.render.Renderer; - deleteTexture(texture: com.chattriggers.ctjs.api.render.Image): com.chattriggers.ctjs.api.render.Renderer; - pushMatrix(): com.chattriggers.ctjs.api.render.Renderer; - pushMatrix(stack: gg.essential.universal.UMatrixStack): com.chattriggers.ctjs.api.render.Renderer; - popMatrix(): com.chattriggers.ctjs.api.render.Renderer; - translate(x: number, y: number): com.chattriggers.ctjs.api.render.Renderer; - translate(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - scale(scaleX: number): com.chattriggers.ctjs.api.render.Renderer; - scale(scaleX: number, scaleY: number): com.chattriggers.ctjs.api.render.Renderer; - scale(scaleX: number, scaleY: number, scaleZ: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number, x: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number, x: number, y: number): com.chattriggers.ctjs.api.render.Renderer; - rotate(angle: number, x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - multiply(quaternion: org.joml.Quaternionf): com.chattriggers.ctjs.api.render.Renderer; - fixAlpha(color: number): number; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(): com.chattriggers.ctjs.api.render.Renderer; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode): com.chattriggers.ctjs.api.render.Renderer; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat): com.chattriggers.ctjs.api.render.Renderer; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer] to allow for method chaining - * @see DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat, snippet: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer] to allow for method chaining - */ - pos(x: number, y: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer] to allow for method chaining - */ - pos(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the texture location on the last defined vertex. - * - * @param u the u position in the texture - * @param v the v position in the texture - * @return [Renderer] to allow for method chaining - */ - tex(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the normal of the vertex. This is mostly used with [VertexFormat.LINES] - * - * @param x the x position of the normal vector - * @param y the y position of the normal vector - * @param z the z position of the normal vector - * @return [Renderer] to allow for method chaining - */ - normal(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the overlay location on the last defined vertex. - * - * @param u the u position in the overlay - * @param v the v position in the overlay - * @return [Renderer] to allow for method chaining - */ - overlay(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Sets the light location on the last defined vertex. - * - * @param u the u position in the light - * @param v the v position in the light - * @return [Renderer] to allow for method chaining - */ - light(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer; - /** - * Finalizes vertices and draws the world renderer. - */ - draw(): void; - /** - * Gets a fixed render position from x, y, and z inputs adjusted with partial ticks - * @param x the X coordinate - * @param y the Y coordinate - * @param z the Z coordinate - * @return the Vec3f position to render at - */ - getRenderPos(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; - drawRect(color: number, x: number, y: number, width: number, height: number): com.chattriggers.ctjs.api.render.Renderer; - drawLine(color: number, x1: number, y1: number, x2: number, y2: number, thickness: number): void; - drawCircle(color: number, x: number, y: number, radius: number, steps: number): void; - drawString(text: string, x: number, y: number): void; - drawString(text: string, x: number, y: number, color: number): void; - drawString(text: string, x: number, y: number, color: number, shadow: boolean): void; - drawStringWithShadow(text: string, x: number, y: number): void; - drawStringWithShadow(text: string, x: number, y: number, color: number): void; - drawImage(image: com.chattriggers.ctjs.api.render.Image, x: number, y: number, width: number, height: number): void; - /** - * Draws a player entity to the screen, similar to the one displayed in the inventory screen. - * - * Takes a parameter with the following options: - * - player: The player entity to draw. Can be a [PlayerMP] or [AbstractClientPlayerEntity]. - * Defaults to Player.toMC() - * - x: The x position on the screen to render the player - * - y: The y position on the screen to render the player - * - size: The size of the rendered player - * - rotate: Whether the player should look at the mouse cursor, similar to the inventory screen - * - pitch: THe pitch the rendered player will face, if rotate is false - * - yaw: The yaw the rendered player will face, if rotate is false - * - showNametag: Whether the nametag of the player should be rendered - * - showArmor: Whether the armor of the player should be rendered - * - showCape: Whether the cape of the player should be rendered - * - showHeldItem: Whether the held item of the player should be rendered - * - showArrows: Whether any arrows stuck in the player's model should be rendered - * - showElytra: Whether the player's Elytra should be rendered - * - showParrot: Whether a perched parrot should be rendered - * - showBeeStinger: Whether any stuck bee stingers should be rendered - * - * @param obj An options bag - */ - drawPlayer(obj: org.mozilla.javascript.NativeObject): void; - new(): com.chattriggers.ctjs.api.render.Renderer; - } - const Renderer$ScreenWrapper: { - new(): com.chattriggers.ctjs.api.render.Renderer$ScreenWrapper; - } - interface Renderer$ScreenWrapper { - getWidth(): number; - getHeight(): number; - getScale(): number; - } - const Image: { - new(image: java.awt.image.BufferedImage | null | undefined): com.chattriggers.ctjs.api.render.Image; - } - interface Image { - getImage(): java.awt.image.BufferedImage | null | undefined; - setImage(value: java.awt.image.BufferedImage | null | undefined): void; - getTextureWidth(): number; - getTextureHeight(): number; - getTexture(): net.minecraft.client.renderer.texture.DynamicTexture | null | undefined; - /** - * Clears the image from GPU memory and removes its references CT side - * that way it can be garbage collected if not referenced in js code. - */ - destroy(): void; - draw(x: number, y: number): com.chattriggers.ctjs.api.render.Image; - draw(x: number, y: number, width: number | null | undefined): com.chattriggers.ctjs.api.render.Image; - draw(x: number, y: number, width: number | null | undefined, height: number | null | undefined): com.chattriggers.ctjs.api.render.Image; - } - const Image$Companion: { - /** - * Create an image object from a java.io.File object. Throws an exception - * if the file cannot be found. - */ - fromFile(file: java.io.File): com.chattriggers.ctjs.api.render.Image; - /** - * Create an image object from a file path. Throws an exception - * if the file cannot be found. - */ - fromFile(file: string): com.chattriggers.ctjs.api.render.Image; - /** - * Create an image object from a file path, relative to the assets directory. - * Throws an exception if the file cannot be found. - */ - fromAsset(name: string): com.chattriggers.ctjs.api.render.Image; - /** - * Creates an image object from a URL. Throws an exception if an image - * cannot be created from the URL. Will cache the image in the assets - */ - fromUrl(url: string): com.chattriggers.ctjs.api.render.Image; - /** - * Creates an image object from a URL. Throws an exception if an image - * cannot be created from the URL. Will cache the image in the assets - */ - fromUrl(url: string, cachedImageName: string | null | undefined): com.chattriggers.ctjs.api.render.Image; - new(): com.chattriggers.ctjs.api.render.Image$Companion; - } - interface Image$Companion { - /** - * Create an image object from a java.io.File object. Throws an exception - * if the file cannot be found. - */ - fromFile(file: java.io.File): com.chattriggers.ctjs.api.render.Image; - /** - * Create an image object from a file path. Throws an exception - * if the file cannot be found. - */ - fromFile(file: string): com.chattriggers.ctjs.api.render.Image; - /** - * Create an image object from a file path, relative to the assets directory. - * Throws an exception if the file cannot be found. - */ - fromAsset(name: string): com.chattriggers.ctjs.api.render.Image; - /** - * Creates an image object from a URL. Throws an exception if an image - * cannot be created from the URL. Will cache the image in the assets - */ - fromUrl(url: string): com.chattriggers.ctjs.api.render.Image; - /** - * Creates an image object from a URL. Throws an exception if an image - * cannot be created from the URL. Will cache the image in the assets - */ - fromUrl(url: string, cachedImageName: string | null | undefined): com.chattriggers.ctjs.api.render.Image; - new(): com.chattriggers.ctjs.api.render.Image$Companion; - } - const Rectangle: { - new(color: number, x: number, y: number, width: number, height: number): com.chattriggers.ctjs.api.render.Rectangle; - } - interface Rectangle { - getColor(): number; - setColor(color: number): com.chattriggers.ctjs.api.render.Rectangle; - getX(): number; - setX(x: number): com.chattriggers.ctjs.api.render.Rectangle; - getY(): number; - setY(y: number): com.chattriggers.ctjs.api.render.Rectangle; - getWidth(): number; - setWidth(width: number): com.chattriggers.ctjs.api.render.Rectangle; - getHeight(): number; - setHeight(height: number): com.chattriggers.ctjs.api.render.Rectangle; - isShadow(): boolean; - setShadow(shadow: boolean): com.chattriggers.ctjs.api.render.Rectangle; - setShadow(color: number, x: number, y: number): com.chattriggers.ctjs.api.render.Rectangle; - getShadowOffset(): com.chattriggers.ctjs.api.vec.Vec2f; - getShadowOffsetX(): number; - getShadowOffsetY(): number; - setShadowOffset(x: number, y: number): com.chattriggers.ctjs.api.render.Rectangle; - setShadowOffsetX(x: number): com.chattriggers.ctjs.api.render.Rectangle; - setShadowOffsetY(y: number): com.chattriggers.ctjs.api.render.Rectangle; - getShadowColor(): number; - setShadowColor(color: number): com.chattriggers.ctjs.api.render.Rectangle; - getOutline(): boolean; - setOutline(outline: boolean): com.chattriggers.ctjs.api.render.Rectangle; - setOutline(color: number, thickness: number): com.chattriggers.ctjs.api.render.Rectangle; - getOutlineColor(): number; - setOutlineColor(color: number): com.chattriggers.ctjs.api.render.Rectangle; - getThickness(): number; - setThickness(thickness: number): com.chattriggers.ctjs.api.render.Rectangle; - draw(): com.chattriggers.ctjs.api.render.Rectangle; - } - const Gui: { - new(): com.chattriggers.ctjs.api.render.Gui; - new(title: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Gui; - } - interface Gui extends gg.essential.universal.UScreen { - open(): void; - isOpen(): boolean; - /** - * Registers a method to be run while gui is open. - * Registered method runs on draw. - * Arguments passed through to method: - * - int mouseX - * - int mouseY - * - float partialTicks - * - * @param method the method to run - * @return the trigger - */ - registerDraw(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run while gui is open. - * Registered method runs on mouse click. - * Arguments passed through to method: - * - int mouseX - * - int mouseY - * - int button - * - * @param method the method to run - * @return the trigger - */ - registerClicked(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run while the gui is open. - * Registered method runs on mouse scroll. - * Arguments passed through to method: - * - int mouseX - * - int mouseY - * - int scroll direction - */ - registerScrolled(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run while gui is open. - * Registered method runs on key input. - * Arguments passed through to method: - * - char typed character - * - int key code - * - * @param method the method to run - * @return the trigger - */ - registerKeyTyped(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run while gui is open. - * Registered method runs on key input. - * Arguments passed through to method: - * - int mouseX - * - int mouseY - * - int clickedMouseButton - * - long timeSinceLastClick - * - * @param method the method to run - * @return the trigger - */ - registerMouseDragged(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run while gui is open. - * Registered method runs on mouse release. - * Arguments passed through to method: - * - int mouseX - * - int mouseY - * - int button - * - * @param method the method to run - * @return the trigger - */ - registerMouseReleased(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run while gui is open. - * Registered method runs when an action is performed (clicking a button) - * Arguments passed through to method: - * - the button that is clicked - * - * @param method the method to run - * @return the trigger - */ - registerActionPerformed(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run when the gui is opened. - * Arguments passed through to method: - * - the gui that is opened - * - * @param method the method to run - * @return the trigger - */ - registerOpened(method: any): com.chattriggers.ctjs.api.render.Gui; - /** - * Registers a method to be run when the gui is closed. - * Arguments passed through to method: - * - the gui that is closed - * - * @param method the method to run - * @return the trigger - */ - registerClosed(method: any): com.chattriggers.ctjs.api.render.Gui; - unregisterDraw(): com.chattriggers.ctjs.api.render.Gui; - unregisterClicked(): com.chattriggers.ctjs.api.render.Gui; - unregisterScrolled(): com.chattriggers.ctjs.api.render.Gui; - unregisterKeyTyped(): com.chattriggers.ctjs.api.render.Gui; - unregisterMouseDragged(): com.chattriggers.ctjs.api.render.Gui; - unregisterMouseReleased(): com.chattriggers.ctjs.api.render.Gui; - unregisterActionPerformed(): com.chattriggers.ctjs.api.render.Gui; - unregisterOpened(): com.chattriggers.ctjs.api.render.Gui; - unregisterClosed(): com.chattriggers.ctjs.api.render.Gui; - setDoesPauseGame(doesPauseGame: boolean): com.chattriggers.ctjs.api.render.Gui; - /** - * Add a base Minecraft button to the gui - * - * @param button the button to add - * @return the button ID for use in actionPerformed - */ - addButton(button: net.minecraft.client.gui.components.Button): number; - /** - * Add a base Minecraft button to the gui - * - * @param x the x position of the button - * @param y the y position of the button - * @param width the width of the button - * @param height the height of the button - * @param buttonText the label of the button - * @return the button ID for use in actionPerformed - */ - addButton(x: number, y: number, buttonText: com.chattriggers.ctjs.api.message.TextComponent): number; - /** - * Add a base Minecraft button to the gui - * - * @param x the x position of the button - * @param y the y position of the button - * @param width the width of the button - * @param height the height of the button - * @param buttonText the label of the button - * @return the button ID for use in actionPerformed - */ - addButton(x: number, y: number, width: number, buttonText: com.chattriggers.ctjs.api.message.TextComponent): number; - /** - * Add a base Minecraft button to the gui - * - * @param x the x position of the button - * @param y the y position of the button - * @param width the width of the button - * @param height the height of the button - * @param buttonText the label of the button - * @return the button ID for use in actionPerformed - */ - addButton(x: number, y: number, width: number, height: number, buttonText: com.chattriggers.ctjs.api.message.TextComponent): number; - addButton(x: number, y: number, width: number, height: number, buttonText: string): number; - /** - * Removes a button from the gui with the given id - * - * @param buttonId the id of the button to remove - * @return the Gui for method chaining - */ - removeButton(buttonId: number): com.chattriggers.ctjs.api.render.Gui; - clearButtons(): com.chattriggers.ctjs.api.render.Gui; - getButtonVisibility(buttonId: number): boolean; - /** - * Sets the visibility of a button - * - * @param buttonId the id of the button to change - * @param visible the new visibility of the button - * @return the Gui for method chaining - */ - setButtonVisibility(buttonId: number, visible: boolean): com.chattriggers.ctjs.api.render.Gui; - getButtonEnabled(buttonId: number): boolean; - /** - * Sets the enabled state of a button - * - * @param buttonId the id of the button to set - * @param enabled the enabled state of the button - * @return the Gui for method chaining - */ - setButtonEnabled(buttonId: number, enabled: boolean): com.chattriggers.ctjs.api.render.Gui; - getButtonWidth(buttonId: number): number; - /** - * Sets the button's width. Button textures break if the width is greater than 200 - * - * @param buttonId id of the button - * @param width the new width - * @return the Gui for method chaining - */ - setButtonWidth(buttonId: number, width: number): com.chattriggers.ctjs.api.render.Gui; - getButtonHeight(buttonId: number): number; - /** - * Sets the button's height. Button textures break if the height is not 20 - * - * @param buttonId id of the button - * @param height the new height - * @return the Gui for method chaining - */ - setButtonHeight(buttonId: number, height: number): com.chattriggers.ctjs.api.render.Gui; - getButtonX(buttonId: number): number; - /** - * Sets the button's x position - * - * @param buttonId id of the button - * @param x the new x position - * @return the Gui for method chaining - */ - setButtonX(buttonId: number, x: number): com.chattriggers.ctjs.api.render.Gui; - getButtonY(buttonId: number): number; - /** - * Sets the button's y position - * - * @param buttonId id of the button - * @param y the new y position - * @return the Gui for method chaining - */ - setButtonY(buttonId: number, y: number): com.chattriggers.ctjs.api.render.Gui; - /** - * Sets the button's position - * - * @param buttonId id of the button - * @param x the new x position - * @param y the new y position - * @return the Gui for method chaining - */ - setButtonLoc(buttonId: number, x: number, y: number): com.chattriggers.ctjs.api.render.Gui; - /** - * Sets the button's text - * - * @param buttonId id of the button - * @param text the new text - */ - setButtonText(buttonId: number, text: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Gui; - /** - * Sets the button's text - * - * @param buttonId id of the button - * @param text the new text - */ - setButtonText(buttonId: number, text: string): com.chattriggers.ctjs.api.render.Gui; - /** - * Sets the gui's tooltip, this will be visible on top of the cursor - * when the gui is open. - * - * @param text the contents of the tooltip - */ - setTooltip(text: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Gui; - /** - * Sets the gui's tooltip, this will be visible on top of the cursor - * when the gui is open. - * - * @param text the contents of the tooltip - */ - setTooltip(text: string): com.chattriggers.ctjs.api.render.Gui; - } - const Renderer3d: { - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat, snippet: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer3d] to allow for method chaining - */ - pos(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the texture location on the last defined vertex. - * - * @param u the u position in the texture - * @param v the v position in the texture - * @return [Renderer3d] to allow for method chaining - */ - tex(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param color the color value, can use [Renderer.getColor] to get this - * @return [Renderer3d] to allow for method chaining - */ - color(color: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the normal of the vertex. This is mostly used with [Renderer.VertexFormat.LINES] - * - * @param x the x position of the normal vector - * @param y the y position of the normal vector - * @param z the z position of the normal vector - * @return [Renderer3d] to allow for method chaining - */ - normal(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the overlay location on the last defined vertex. - * - * @param u the u position in the overlay - * @param v the v position in the overlay - * @return [Renderer3d] to allow for method chaining - */ - overlay(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the light location on the last defined vertex. - * - * @param u the u position in the light - * @param v the v position in the light - * @return [Renderer3d] to allow for method chaining - */ - light(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Finalizes vertices and draws the world renderer. - */ - draw(): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number, increase: boolean): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number, increase: boolean, centered: boolean): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number, increase: boolean, centered: boolean, renderThroughBlocks: boolean): void; - /** - * A variant of drawString that takes an object instead of positional parameters - */ - drawString(obj: org.mozilla.javascript.NativeObject): void; - /** - * Draws a line in the world from (x1, y1, z1) to (x2, y2, z2) - * - * @param color the color of the line - * @param x1 the starting x coordinate - * @param y1 the starting y coordinate - * @param z1 the starting z coordinate - * @param x2 the ending x coordinate - * @param y2 the ending y coordinate - * @param z2 the ending z coordinate - */ - drawLine(color: number, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): void; - new(): com.chattriggers.ctjs.api.render.Renderer3d; - } - interface Renderer3d { - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Begin drawing with the world renderer - * - * @param drawMode the GL draw mode - * @param vertexFormat The [VertexFormat] to use for drawing - * @return [Renderer3d] to allow for method chaining - * @see Renderer.DrawMode - */ - begin(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode, vertexFormat: com.chattriggers.ctjs.api.render.Renderer$VertexFormat, snippet: com.chattriggers.ctjs.api.render.Renderer$RenderSnippet): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets a new vertex in the world renderer. - * - * @param x the x position - * @param y the y position - * @param z the z position - * @return [Renderer3d] to allow for method chaining - */ - pos(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the texture location on the last defined vertex. - * - * @param u the u position in the texture - * @param v the v position in the texture - * @return [Renderer3d] to allow for method chaining - */ - tex(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 1 - * @param g the green value of the color, between 0 and 1 - * @param b the blue value of the color, between 0 and 1 - * @param a the alpha value of the color, between 0 and 1 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param r the red value of the color, between 0 and 255 - * @param g the green value of the color, between 0 and 255 - * @param b the blue value of the color, between 0 and 255 - * @param a the alpha value of the color, between 0 and 255 - * @return [Renderer3d] to allow for method chaining - */ - color(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the color for the last defined vertex. - * - * @param color the color value, can use [Renderer.getColor] to get this - * @return [Renderer3d] to allow for method chaining - */ - color(color: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the normal of the vertex. This is mostly used with [Renderer.VertexFormat.LINES] - * - * @param x the x position of the normal vector - * @param y the y position of the normal vector - * @param z the z position of the normal vector - * @return [Renderer3d] to allow for method chaining - */ - normal(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the overlay location on the last defined vertex. - * - * @param u the u position in the overlay - * @param v the v position in the overlay - * @return [Renderer3d] to allow for method chaining - */ - overlay(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Sets the light location on the last defined vertex. - * - * @param u the u position in the light - * @param v the v position in the light - * @return [Renderer3d] to allow for method chaining - */ - light(u: number, v: number): com.chattriggers.ctjs.api.render.Renderer3d; - /** - * Finalizes vertices and draws the world renderer. - */ - draw(): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number, increase: boolean): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number, increase: boolean, centered: boolean): void; - /** - * Renders floating lines of text in the 3D world at a specific position. - * This should be placed inside a `preRenderWorld` trigger. - * - * @param text The string array of text to render - * @param x X coordinate in the game world - * @param y Y coordinate in the game world - * @param z Z coordinate in the game world - * @param color the color of the text - * @param renderBlackBox render a pretty black border behind the text - * @param scale the scale of the text - * @param increase whether to scale the text up as the player moves away - * @param centered whether to center each line based on the longest line (this has no effect if there are no newline characters) - * @param renderThroughBlocks whether to render the text through blocks - */ - drawString(text: string, x: number, y: number, z: number, color: number, renderBlackBox: boolean, scale: number, increase: boolean, centered: boolean, renderThroughBlocks: boolean): void; - /** - * A variant of drawString that takes an object instead of positional parameters - */ - drawString(obj: org.mozilla.javascript.NativeObject): void; - /** - * Draws a line in the world from (x1, y1, z1) to (x2, y2, z2) - * - * @param color the color of the line - * @param x1 the starting x coordinate - * @param y1 the starting y coordinate - * @param z1 the starting z coordinate - * @param x2 the ending x coordinate - * @param y2 the ending y coordinate - * @param z2 the ending z coordinate - */ - drawLine(color: number, x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): void; - new(): com.chattriggers.ctjs.api.render.Renderer3d; - } - const RenderUtils: { - Color: typeof com.chattriggers.ctjs.api.render.RenderUtils$Color; - drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, depth: boolean): void; - drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, depth: boolean): void; - drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.RenderUtils$Color, color2: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.RenderUtils$Color, color2: com.chattriggers.ctjs.api.render.RenderUtils$Color, wireThickness: number): void; - drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.RenderUtils$Color, color2: com.chattriggers.ctjs.api.render.RenderUtils$Color, wireThickness: number, depth: boolean): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, filled: boolean): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, filled: boolean, thickness: number): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, filled: boolean, thickness: number, depth: boolean): void; - drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean, translate: boolean): void; - new(): com.chattriggers.ctjs.api.render.RenderUtils; - } - interface RenderUtils { - drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, depth: boolean): void; - drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, depth: boolean): void; - drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.RenderUtils$Color, color2: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.RenderUtils$Color, color2: com.chattriggers.ctjs.api.render.RenderUtils$Color, wireThickness: number): void; - drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.RenderUtils$Color, color2: com.chattriggers.ctjs.api.render.RenderUtils$Color, wireThickness: number, depth: boolean): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, filled: boolean): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, filled: boolean, thickness: number): void; - drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, filled: boolean, thickness: number, depth: boolean): void; - drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color): void; - drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number): void; - drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.RenderUtils$Color, thickness: number, depth: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean): void; - drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean, translate: boolean): void; - new(): com.chattriggers.ctjs.api.render.RenderUtils; - } - const RenderUtils$Color: { - new(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.RenderUtils$Color; - } - interface RenderUtils$Color { - getR(): number; - getG(): number; - getB(): number; - getA(): number; - getRf(): number; - getGf(): number; - getBf(): number; - getAf(): number; - getPacked(): number; - component1(): number; - component2(): number; - component3(): number; - component4(): number; - copy(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.RenderUtils$Color; - } - const DrawContextHolder: { - getCurrentContext(): net.minecraft.client.gui.GuiGraphicsExtractor | null | undefined; - setCurrentContext(value: net.minecraft.client.gui.GuiGraphicsExtractor | null | undefined): void; - new(): com.chattriggers.ctjs.api.render.DrawContextHolder; - } - interface DrawContextHolder { - getCurrentContext(): net.minecraft.client.gui.GuiGraphicsExtractor | null | undefined; - setCurrentContext(value: net.minecraft.client.gui.GuiGraphicsExtractor | null | undefined): void; - new(): com.chattriggers.ctjs.api.render.DrawContextHolder; - withContext(context: net.minecraft.client.gui.GuiGraphicsExtractor, block: kotlin.Function0): T; - } - const Book: { - new(): com.chattriggers.ctjs.api.render.Book; - } - interface Book { - /** - * Add a page to the book. - * - * @param contents the entire message for what the page should be - * @return the current book to allow method chaining - */ - addPage(contents: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Book; - /** - * Overloaded method for adding a simple page to the book. - * - * @param message a simple string to make the page - * @return the current book to allow method chaining - */ - addPage(message: string): com.chattriggers.ctjs.api.render.Book; - /** - * Inserts a page at the specified index of the book - * - * @param pageIndex the index of the page to set - * @param message the message to set the page to - * @return the current book to allow method chaining - */ - insertPage(pageIndex: number, message: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Book; - insertPage(pageIndex: number, message: string): com.chattriggers.ctjs.api.render.Book; - /** - * Sets a page of the book to the specified message. - * - * @param pageIndex the index of the page to set - * @param message the message to set the page to - * @return the current book to allow method chaining - */ - setPage(pageIndex: number, message: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Book; - setPage(pageIndex: number, message: string): com.chattriggers.ctjs.api.render.Book; - display(): void; - display(pageIndex: number): void; - isOpen(): boolean; - getCurrentPage(): number; - } - const Shape: { - new(color: number): com.chattriggers.ctjs.api.render.Shape; - } - interface Shape { - copy(): com.chattriggers.ctjs.api.render.Shape; - getColor(): number; - setColor(color: number): com.chattriggers.ctjs.api.render.Shape; - getDrawMode(): com.chattriggers.ctjs.api.render.Renderer$DrawMode; - /** - * Sets the GL draw mode of the shape - */ - setDrawMode(drawMode: com.chattriggers.ctjs.api.render.Renderer$DrawMode): com.chattriggers.ctjs.api.render.Shape; - getVertexes(): Array; - addVertex(x: number, y: number): com.chattriggers.ctjs.api.render.Shape; - insertVertex(index: number, x: number, y: number): com.chattriggers.ctjs.api.render.Shape; - removeVertex(index: number): com.chattriggers.ctjs.api.render.Shape; - clearVertices(): com.chattriggers.ctjs.api.render.Shape; - /** - * Sets the shape as a line pointing from [x1, y1] to [x2, y2] with a thickness - */ - setLine(x1: number, y1: number, x2: number, y2: number, thickness: number): com.chattriggers.ctjs.api.render.Shape; - /** - * Sets the shape as a circle with a center at [x, y] - * with radius and number of steps around the circle - */ - setCircle(x: number, y: number, radius: number, steps: number): com.chattriggers.ctjs.api.render.Shape; - draw(): com.chattriggers.ctjs.api.render.Shape; - } - const NVGRenderer: { - GifData: typeof com.chattriggers.ctjs.api.render.NVGRenderer$GifData; - vg: number; - registerV5Render(runnable: java.lang.Runnable): void; - unregisterV5Render(runnable: java.lang.Runnable): void; - registerV5PreRender(runnable: java.lang.Runnable): void; - unregisterV5PreRender(runnable: java.lang.Runnable): void; - runPreDrawables(): void; - runDrawables(): void; - beginFrame(width: number, height: number): void; - endFrame(): void; - drawCheckerboard(x: number, y: number, w: number, h: number, radius: number): void; - drawCheckerboard(x: number, y: number, w: number, h: number, radius: number, size: number): void; - drawHueBar(x: number, y: number, w: number, h: number, radius: number): void; - drawGradientRect(x: number, y: number, w: number, h: number, color1: number, color2: number, direction: any): void; - drawGradientRect(x: number, y: number, w: number, h: number, color1: number, color2: number, direction: any, radius: number): void; - drawHollowGradientRect(x: number, y: number, w: number, h: number, thickness: number, color1: number, color2: number, direction: any): void; - drawHollowGradientRect(x: number, y: number, w: number, h: number, thickness: number, color1: number, color2: number, direction: any, radius: number): void; - linearGradient(sx: number, sy: number, ex: number, ey: number, color1: number, color2: number): void; - setGlobalCompositeOperation(op: number): void; - save(): void; - restore(): void; - translate(x: number, y: number): void; - rotate(angle: number): void; - scale(x: number, y: number): void; - globalAlpha(alpha: number): void; - drawRect(x: number, y: number, w: number, h: number, color: number): void; - drawRoundedRect(x: number, y: number, w: number, h: number, radius: number, color: number): void; - drawRoundedRectVaried(x: number, y: number, w: number, h: number, color: number, tl: number, tr: number, br: number, bl: number): void; - drawCircle(x: number, y: number, radius: number, color: number): void; - drawDropShadow(x: number, y: number, w: number, h: number, radius: number, blur: number, spread: number, color: number): void; - drawHollowRect(x: number, y: number, w: number, h: number, thickness: number, color: number): void; - drawHollowRect(x: number, y: number, w: number, h: number, thickness: number, color: number, radius: number): void; - drawLine(x1: number, y1: number, x2: number, y2: number, thickness: number, color: number): void; - loadImage(path: string): string; - unloadImage(path: string): void; - isImageLoaded(path: string): boolean; - loadGif(path: string): com.chattriggers.ctjs.api.render.NVGRenderer$GifData | null | undefined; - unloadGif(path: string): void; - drawGif(path: string, x: number, y: number, w: number, h: number, frameIndex: number): void; - drawGif(path: string, x: number, y: number, w: number, h: number, frameIndex: number, radius: number): void; - drawGif(path: string, x: number, y: number, w: number, h: number, frameIndex: number, radius: number, alpha: number): void; - drawImage(path: string, x: number, y: number, w: number, h: number): void; - drawImage(path: string, x: number, y: number, w: number, h: number, radius: number): void; - drawImage(path: string, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - drawImageFromUrl(url: string, x: number, y: number, w: number, h: number): void; - drawImageFromUrl(url: string, x: number, y: number, w: number, h: number, radius: number): void; - drawImageFromUrl(url: string, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - drawGLTexture(glTextureId: number, texW: number, texH: number, x: number, y: number, w: number, h: number): void; - drawGLTexture(glTextureId: number, texW: number, texH: number, x: number, y: number, w: number, h: number, radius: number): void; - drawGLTexture(glTextureId: number, texW: number, texH: number, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - drawGLTextureRegion(glTextureId: number, textureWidth: number, textureHeight: number, subX: number, subY: number, subW: number, subH: number, x: number, y: number, w: number, h: number): void; - drawGLTextureRegion(glTextureId: number, textureWidth: number, textureHeight: number, subX: number, subY: number, subW: number, subH: number, x: number, y: number, w: number, h: number, radius: number): void; - drawGLTextureRegion(glTextureId: number, textureWidth: number, textureHeight: number, subX: number, subY: number, subW: number, subH: number, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - invalidateGLTexture(glTextureId: number): void; - clearImageCache(): void; - getCacheStats(): string; - scissor(x: number, y: number, w: number, h: number): void; - pushScissor(x: number, y: number, w: number, h: number): void; - popScissor(): void; - resetScissor(): void; - text(text: string, x: number, y: number, size: number, color: number, align: number): void; - text(text: string, x: number, y: number, size: number, color: number, font: com.chattriggers.ctjs.api.render.Font | null | undefined, align: number): void; - textWidth(text: string, size: number): number; - textWidth(text: string, size: number, font: com.chattriggers.ctjs.api.render.Font | null | undefined): number; - destroy(): void; - new(): com.chattriggers.ctjs.api.render.NVGRenderer; - } - interface NVGRenderer { - vg: number; - registerV5Render(runnable: java.lang.Runnable): void; - unregisterV5Render(runnable: java.lang.Runnable): void; - registerV5PreRender(runnable: java.lang.Runnable): void; - unregisterV5PreRender(runnable: java.lang.Runnable): void; - runPreDrawables(): void; - runDrawables(): void; - beginFrame(width: number, height: number): void; - endFrame(): void; - drawCheckerboard(x: number, y: number, w: number, h: number, radius: number): void; - drawCheckerboard(x: number, y: number, w: number, h: number, radius: number, size: number): void; - drawHueBar(x: number, y: number, w: number, h: number, radius: number): void; - drawGradientRect(x: number, y: number, w: number, h: number, color1: number, color2: number, direction: any): void; - drawGradientRect(x: number, y: number, w: number, h: number, color1: number, color2: number, direction: any, radius: number): void; - drawHollowGradientRect(x: number, y: number, w: number, h: number, thickness: number, color1: number, color2: number, direction: any): void; - drawHollowGradientRect(x: number, y: number, w: number, h: number, thickness: number, color1: number, color2: number, direction: any, radius: number): void; - linearGradient(sx: number, sy: number, ex: number, ey: number, color1: number, color2: number): void; - setGlobalCompositeOperation(op: number): void; - save(): void; - restore(): void; - translate(x: number, y: number): void; - rotate(angle: number): void; - scale(x: number, y: number): void; - globalAlpha(alpha: number): void; - drawRect(x: number, y: number, w: number, h: number, color: number): void; - drawRoundedRect(x: number, y: number, w: number, h: number, radius: number, color: number): void; - drawRoundedRectVaried(x: number, y: number, w: number, h: number, color: number, tl: number, tr: number, br: number, bl: number): void; - drawCircle(x: number, y: number, radius: number, color: number): void; - drawDropShadow(x: number, y: number, w: number, h: number, radius: number, blur: number, spread: number, color: number): void; - drawHollowRect(x: number, y: number, w: number, h: number, thickness: number, color: number): void; - drawHollowRect(x: number, y: number, w: number, h: number, thickness: number, color: number, radius: number): void; - drawLine(x1: number, y1: number, x2: number, y2: number, thickness: number, color: number): void; - loadImage(path: string): string; - unloadImage(path: string): void; - isImageLoaded(path: string): boolean; - loadGif(path: string): com.chattriggers.ctjs.api.render.NVGRenderer$GifData | null | undefined; - unloadGif(path: string): void; - drawGif(path: string, x: number, y: number, w: number, h: number, frameIndex: number): void; - drawGif(path: string, x: number, y: number, w: number, h: number, frameIndex: number, radius: number): void; - drawGif(path: string, x: number, y: number, w: number, h: number, frameIndex: number, radius: number, alpha: number): void; - drawImage(path: string, x: number, y: number, w: number, h: number): void; - drawImage(path: string, x: number, y: number, w: number, h: number, radius: number): void; - drawImage(path: string, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - drawImageFromUrl(url: string, x: number, y: number, w: number, h: number): void; - drawImageFromUrl(url: string, x: number, y: number, w: number, h: number, radius: number): void; - drawImageFromUrl(url: string, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - drawGLTexture(glTextureId: number, texW: number, texH: number, x: number, y: number, w: number, h: number): void; - drawGLTexture(glTextureId: number, texW: number, texH: number, x: number, y: number, w: number, h: number, radius: number): void; - drawGLTexture(glTextureId: number, texW: number, texH: number, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - drawGLTextureRegion(glTextureId: number, textureWidth: number, textureHeight: number, subX: number, subY: number, subW: number, subH: number, x: number, y: number, w: number, h: number): void; - drawGLTextureRegion(glTextureId: number, textureWidth: number, textureHeight: number, subX: number, subY: number, subW: number, subH: number, x: number, y: number, w: number, h: number, radius: number): void; - drawGLTextureRegion(glTextureId: number, textureWidth: number, textureHeight: number, subX: number, subY: number, subW: number, subH: number, x: number, y: number, w: number, h: number, radius: number, alpha: number): void; - invalidateGLTexture(glTextureId: number): void; - clearImageCache(): void; - getCacheStats(): string; - scissor(x: number, y: number, w: number, h: number): void; - pushScissor(x: number, y: number, w: number, h: number): void; - popScissor(): void; - resetScissor(): void; - text(text: string, x: number, y: number, size: number, color: number, align: number): void; - text(text: string, x: number, y: number, size: number, color: number, font: com.chattriggers.ctjs.api.render.Font | null | undefined, align: number): void; - textWidth(text: string, size: number): number; - textWidth(text: string, size: number, font: com.chattriggers.ctjs.api.render.Font | null | undefined): number; - destroy(): void; - new(): com.chattriggers.ctjs.api.render.NVGRenderer; - getDefaultFont(): com.chattriggers.ctjs.api.render.Font | null | undefined; - clearCallbacks(): void; - } - const NVGRenderer$GifData: { - new(width: number, height: number, frameCount: number, delays: Array): com.chattriggers.ctjs.api.render.NVGRenderer$GifData; - } - interface NVGRenderer$GifData { - getWidth(): number; - getHeight(): number; - getFrameCount(): number; - getDelays(): Array; - component1(): number; - component2(): number; - component3(): number; - component4(): Array; - copy(width: number, height: number, frameCount: number, delays: Array): com.chattriggers.ctjs.api.render.NVGRenderer$GifData; - } - } - namespace triggers { - interface ITriggerType { - getName(): string; - triggerAll(): void; - triggerAll(arg0: any | null | undefined): void; - triggerAll(arg0: any | null | undefined, arg1: any | null | undefined): void; - triggerAll(arg0: any | null | undefined, arg1: any | null | undefined, arg2: any | null | undefined): void; - triggerAll(arg0: any | null | undefined, arg1: any | null | undefined, arg2: any | null | undefined, arg3: any | null | undefined): void; - triggerAll(arg0: any | null | undefined, arg1: any | null | undefined, arg2: any | null | undefined, arg3: any | null | undefined, arg4: any | null | undefined): void; - triggerAll(args: any | null | undefined): void; - } - const TriggerType: { - CHAT: com.chattriggers.ctjs.api.triggers.TriggerType; - ACTION_BAR: com.chattriggers.ctjs.api.triggers.TriggerType; - TICK: com.chattriggers.ctjs.api.triggers.TriggerType; - STEP: com.chattriggers.ctjs.api.triggers.TriggerType; - GAME_UNLOAD: com.chattriggers.ctjs.api.triggers.TriggerType; - GAME_LOAD: com.chattriggers.ctjs.api.triggers.TriggerType; - CLICKED: com.chattriggers.ctjs.api.triggers.TriggerType; - SCROLLED: com.chattriggers.ctjs.api.triggers.TriggerType; - DRAGGED: com.chattriggers.ctjs.api.triggers.TriggerType; - GUI_OPENED: com.chattriggers.ctjs.api.triggers.TriggerType; - MESSAGE_SENT: com.chattriggers.ctjs.api.triggers.TriggerType; - ITEM_TOOLTIP: com.chattriggers.ctjs.api.triggers.TriggerType; - PLAYER_INTERACT: com.chattriggers.ctjs.api.triggers.TriggerType; - GUI_KEY: com.chattriggers.ctjs.api.triggers.TriggerType; - GUI_MOUSE_CLICK: com.chattriggers.ctjs.api.triggers.TriggerType; - GUI_MOUSE_DRAG: com.chattriggers.ctjs.api.triggers.TriggerType; - PACKET_SENT: com.chattriggers.ctjs.api.triggers.TriggerType; - PACKET_RECEIVED: com.chattriggers.ctjs.api.triggers.TriggerType; - SERVER_CONNECT: com.chattriggers.ctjs.api.triggers.TriggerType; - SERVER_DISCONNECT: com.chattriggers.ctjs.api.triggers.TriggerType; - GUI_CLOSED: com.chattriggers.ctjs.api.triggers.TriggerType; - DROP_ITEM: com.chattriggers.ctjs.api.triggers.TriggerType; - PRE_RENDER_WORLD: com.chattriggers.ctjs.api.triggers.TriggerType; - POST_RENDER_WORLD: com.chattriggers.ctjs.api.triggers.TriggerType; - BLOCK_HIGHLIGHT: com.chattriggers.ctjs.api.triggers.TriggerType; - RENDER_OVERLAY: com.chattriggers.ctjs.api.triggers.TriggerType; - RENDER_PLAYER_LIST: com.chattriggers.ctjs.api.triggers.TriggerType; - RENDER_ENTITY: com.chattriggers.ctjs.api.triggers.TriggerType; - RENDER_BLOCK_ENTITY: com.chattriggers.ctjs.api.triggers.TriggerType; - GUI_RENDER: com.chattriggers.ctjs.api.triggers.TriggerType; - POST_GUI_RENDER: com.chattriggers.ctjs.api.triggers.TriggerType; - SOUND_PLAY: com.chattriggers.ctjs.api.triggers.TriggerType; - WORLD_LOAD: com.chattriggers.ctjs.api.triggers.TriggerType; - WORLD_UNLOAD: com.chattriggers.ctjs.api.triggers.TriggerType; - SPAWN_PARTICLE: com.chattriggers.ctjs.api.triggers.TriggerType; - ENTITY_DEATH: com.chattriggers.ctjs.api.triggers.TriggerType; - ENTITY_DAMAGE: com.chattriggers.ctjs.api.triggers.TriggerType; - COMMAND: com.chattriggers.ctjs.api.triggers.TriggerType; - OTHER: com.chattriggers.ctjs.api.triggers.TriggerType; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.triggers.TriggerType; - } - interface TriggerType extends kotlin.Enum, com.chattriggers.ctjs.api.triggers.ITriggerType { - } - const CustomTriggerType: { - new(name: string): com.chattriggers.ctjs.api.triggers.CustomTriggerType; - } - interface CustomTriggerType extends com.chattriggers.ctjs.api.triggers.ITriggerType { - component1(): string; - copy(name: string): com.chattriggers.ctjs.api.triggers.CustomTriggerType; - } - const RegularTrigger: { - new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.RegularTrigger; - } - interface RegularTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { - } - const Trigger: { - Priority: typeof com.chattriggers.ctjs.api.triggers.Trigger$Priority; - } - interface Trigger extends kotlin.Comparable { - getMethod(): any; - setMethod(value: any): void; - getType(): com.chattriggers.ctjs.api.triggers.ITriggerType; - setType(value: com.chattriggers.ctjs.api.triggers.ITriggerType): void; - isRegistered(): boolean; - /** - * Sets a trigger's priority using [Priority]. - * Highest runs first. - * @param priority the priority of the trigger - * @return the trigger for method chaining - */ - setPriority(priority: com.chattriggers.ctjs.api.triggers.Trigger$Priority): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a trigger based on its type. - * This is done automatically with TriggerRegister. - * @return the trigger for method chaining - */ - register(): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Unregisters a trigger. - * @return the trigger for method chaining - */ - unregister(): com.chattriggers.ctjs.api.triggers.Trigger; - } - const Trigger$Priority: { - HIGHEST: com.chattriggers.ctjs.api.triggers.Trigger$Priority; - HIGH: com.chattriggers.ctjs.api.triggers.Trigger$Priority; - NORMAL: com.chattriggers.ctjs.api.triggers.Trigger$Priority; - LOW: com.chattriggers.ctjs.api.triggers.Trigger$Priority; - LOWEST: com.chattriggers.ctjs.api.triggers.Trigger$Priority; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.api.triggers.Trigger$Priority; - } - interface Trigger$Priority extends kotlin.Enum { - } - const ChatTrigger: { - Event: typeof com.chattriggers.ctjs.api.triggers.ChatTrigger$Event; - new(method: any, type: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.ChatTrigger; - } - interface ChatTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { - /** - * Sets if the chat trigger should run if the chat event has already been canceled. - * True by default. - * @param bool Boolean to set - * @return the trigger object for method chaining - */ - triggerIfCanceled(bool: boolean): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Sets the chat criteria for [matchesChatCriteria]. - * Arguments for the trigger's method can be passed in using ${variable}. - * Example: `setChatCriteria("<${name}> ${message}");` - * Use ${*} to match a chat message but ignore the pass through. - * @param chatCriteria the chat criteria to set - * @return the trigger object for method chaining - */ - setChatCriteria(chatCriteria: any): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Alias for [setChatCriteria]. - * @param chatCriteria the chat criteria to set - * @return the trigger object for method chaining - */ - setCriteria(chatCriteria: any): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Sets the chat parameter for [Parameter]. - * Clears current parameter list. - * @param parameter the chat parameter to set - * @return the trigger object for method chaining - */ - setParameter(parameter: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Sets multiple chat parameters for [Parameter]. - * Clears current parameter list. - * @param parameters the chat parameters to set - * @return the trigger object for method chaining - */ - setParameters(parameters: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Adds chat parameter for [Parameter]. - * @param parameter the chat parameter to add - * @return the trigger object for method chaining - */ - addParameter(parameter: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Adds multiple chat parameters for [Parameter]. - * @param parameters the chat parameters to add - * @return the trigger object for method chaining - */ - addParameters(parameters: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Adds the "start" parameter - * @return the trigger object for method chaining - */ - setStart(): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Adds the "contains" parameter - * @return the trigger object for method chaining - */ - setContains(): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Adds the "end" parameter - * @return the trigger object for method chaining - */ - setEnd(): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Forces this trigger to be formatted or unformatted. If no argument is - * provided, it will be set to formatted. This method overrides the - * behavior of inferring the formatted status from the criteria. - */ - setFormatted(): void; - /** - * Forces this trigger to be formatted or unformatted. If no argument is - * provided, it will be set to formatted. This method overrides the - * behavior of inferring the formatted status from the criteria. - */ - setFormatted(formatted: boolean): void; - /** - * Makes the trigger match the entire chat message - * @return the trigger object for method chaining - */ - setExact(): com.chattriggers.ctjs.api.triggers.ChatTrigger; - /** - * Makes the chat criteria case insensitive - * @return the trigger object for method chaining - */ - setCaseInsensitive(): com.chattriggers.ctjs.api.triggers.ChatTrigger; - } - const ChatTrigger$Event: { - message: com.chattriggers.ctjs.api.message.TextComponent; - new(message: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.triggers.ChatTrigger$Event; - } - interface ChatTrigger$Event extends com.chattriggers.ctjs.api.triggers.CancellableEvent { - } - const CancellableEvent: { - new(): com.chattriggers.ctjs.api.triggers.CancellableEvent; - } - interface CancellableEvent { - setCanceled(): void; - setCanceled(newVal: boolean): void; - setCancelled(): void; - setCancelled(newVal: boolean): void; - isCancelable(): boolean; - isCancellable(): boolean; - isCancelled(): boolean; - isCanceled(): boolean; - } - const StepTrigger: { - new(method: any): com.chattriggers.ctjs.api.triggers.StepTrigger; - } - interface StepTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { - /** - * Sets the frames per second that the trigger activates. - * This has a maximum one step per second. - * @param fps the frames per second to set - * @return the trigger for method chaining - */ - setFps(fps: number): com.chattriggers.ctjs.api.triggers.StepTrigger; - /** - * Sets the delay in seconds between the trigger activation. - * This has a minimum of one step every second. This will override [setFps]. - * @param delay The delay in seconds - * @return the trigger for method chaining - */ - setDelay(delay: number): com.chattriggers.ctjs.api.triggers.StepTrigger; - } - const StepTrigger$Companion: { - new(): com.chattriggers.ctjs.api.triggers.StepTrigger$Companion; - } - interface StepTrigger$Companion { - new(): com.chattriggers.ctjs.api.triggers.StepTrigger$Companion; - } - const CommandTrigger: { - new(method: any): com.chattriggers.ctjs.api.triggers.CommandTrigger; - } - interface CommandTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { - /** - * Sets the tab completion options for the command. - * This method must be used before setting the command name, otherwise, the tab completions will not be set. - * - * @param args all the tab completion options. - */ - setTabCompletions(args: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; - /** - * This sets the possible tab completions for the command. - * This method must be used before setting the command name, otherwise, the tab completions will not be set. - * - * @param callback the callback that returns the tab completion options. - * - * For example: - * ```js - * register("command", () => { - * - * }).setTabCompletions((args) => { - * return ["option1", "option2"]; - * }).setName("test"); - * ``` - * The `args` parameter of the callback are the arguments currently passed to the command. - * For instance, if you want to not show the options after the user tabs the first time, just add a check - * for the length of the arguments and return an empty array. - * - * The return value of the callback **must be an array of strings**, and in this case will always return the 2 - * options in the array. - */ - setTabCompletions(callback: kotlin.Function1, Array>): com.chattriggers.ctjs.api.triggers.CommandTrigger; - /** - * Sets the aliases for the command. - * - * @param args all the aliases. - */ - setAliases(args: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; - /** - * Sets the command name. - * Example: - * setCommandName("test") - * would result in the command being /test - * - * @param commandName The command name - * @param overrideExisting Whether existing commands with the same name should be overridden - * @return the trigger for additional modification - */ - setCommandName(commandName: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; - /** - * Sets the command name. - * Example: - * setCommandName("test") - * would result in the command being /test - * - * @param commandName The command name - * @param overrideExisting Whether existing commands with the same name should be overridden - * @return the trigger for additional modification - */ - setCommandName(commandName: string, overrideExisting: boolean): com.chattriggers.ctjs.api.triggers.CommandTrigger; - /** - * Alias for [setCommandName] - * - * @param commandName The command name - * @param overrideExisting Whether existing commands with the same name should be overridden - * @return the trigger for additional modification - */ - setName(commandName: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; - /** - * Alias for [setCommandName] - * - * @param commandName The command name - * @param overrideExisting Whether existing commands with the same name should be overridden - * @return the trigger for additional modification - */ - setName(commandName: string, overrideExisting: boolean): com.chattriggers.ctjs.api.triggers.CommandTrigger; - } - const PacketEvent: { - RECEIVE: net.fabricmc.fabric.api.event.Event; - new(): com.chattriggers.ctjs.api.triggers.PacketEvent; - } - interface PacketEvent { - RECEIVE: net.fabricmc.fabric.api.event.Event; - new(): com.chattriggers.ctjs.api.triggers.PacketEvent; - } - interface PacketEvent$ReceiveEvent { - trigger(packet: net.minecraft.network.protocol.Packet): void; - } - const SoundPlayTrigger: { - new(method: any): com.chattriggers.ctjs.api.triggers.SoundPlayTrigger; - } - interface SoundPlayTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { - /** - * Sets the sound name criteria. - * - * @param soundNameCriteria the sound name - * @return the trigger for method chaining - */ - setCriteria(soundNameCriteria: string): com.chattriggers.ctjs.api.triggers.SoundPlayTrigger; - } - const EventTrigger: { - new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.EventTrigger; - } - interface EventTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { - /** - * Sets if this trigger should run if the event has already been canceled. - * True by default. - * - * @param bool Boolean to set - * @return the trigger object for method chaining - */ - triggerIfCanceled(bool: boolean): com.chattriggers.ctjs.api.triggers.EventTrigger; - } - const ClassFilterTrigger: { - new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType, wrappedClass: java.lang.Class): com.chattriggers.ctjs.api.triggers.ClassFilterTrigger; - } - interface ClassFilterTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { - /** - * Alias for `setFilteredClasses([A.class])` - * - * @param clazz The class for which this trigger should run for - */ - setFilteredClass(clazz: java.lang.Class): com.chattriggers.ctjs.api.triggers.ClassFilterTrigger; - /** - * Sets which classes this trigger should run for. If the list is empty, it runs - * for every class. - * - * @param classes The classes for which this trigger should run for - * @return This trigger object for chaining - */ - setFilteredClasses(classes: Array>): com.chattriggers.ctjs.api.triggers.ClassFilterTrigger; - } - const RenderEntityTrigger: { - new(method: any): com.chattriggers.ctjs.api.triggers.RenderEntityTrigger; - } - interface RenderEntityTrigger extends com.chattriggers.ctjs.api.triggers.ClassFilterTrigger { - } - const RenderBlockEntityTrigger: { - new(method: any): com.chattriggers.ctjs.api.triggers.RenderBlockEntityTrigger; - } - interface RenderBlockEntityTrigger extends com.chattriggers.ctjs.api.triggers.ClassFilterTrigger { - } - const PacketTrigger: { - new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.PacketTrigger; - } - interface PacketTrigger extends com.chattriggers.ctjs.api.triggers.ClassFilterTrigger, net.minecraft.network.protocol.Packet> { - } - } - interface CTWrapper { - getMcValue(): MCClass; - toMC(): MCClass; - } - const V5Auth: { - getJwtToken(): string | null | undefined; - getFreshJwtToken(): string | null | undefined; - setJwtToken(token: string | null | undefined): void; - shutDownHard(): java.lang.Void; - new(): com.chattriggers.ctjs.api.V5Auth; - } - interface V5Auth { - getJwtToken(): string | null | undefined; - getFreshJwtToken(): string | null | undefined; - setJwtToken(token: string | null | undefined): void; - shutDownHard(): java.lang.Void; - new(): com.chattriggers.ctjs.api.V5Auth; + interface WrappedThread$Companion { + sleep(millis: number): void; + sleep(millis: number, nanos: number): void; + currentThread(): java.lang.Thread; + new(): com.chattriggers.ctjs.engine.WrappedThread$Companion; } - const Mappings: { + const Register: { + /** + * Helper method register a trigger. + * + * Called by taking the original name of the method, i.e. `registerChat`, + * removing the word register, and comparing it case-insensitively with + * the methods below. + * + * @param triggerType the type of trigger + * @param method The name of the method or the actual method to callback when the event is fired + * @return The trigger for additional modification + */ + register(triggerType: string, method: any): com.chattriggers.ctjs.api.triggers.Trigger; + createCustomTrigger(name: string): any; + /** + * Registers a new trigger that runs before a chat message is received. + * + * Passes through multiple arguments: + * - Any number of chat criteria variables + * - The chat event, which can be cancelled + * + * Available modifications: + * - [ChatTrigger.triggerIfCanceled] Sets if triggered if event is already cancelled + * - [ChatTrigger.setChatCriteria] Sets the chat criteria + * - [ChatTrigger.setParameter] Sets the chat parameter + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerChat(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before an action bar message is received. + * + * Passes through multiple arguments: + * - Any number of chat criteria variables + * - The chat event, which can be cancelled + * + * Available modifications: + * - [ChatTrigger.triggerIfCanceled] Sets if triggered if event is already cancelled + * - [ChatTrigger.setChatCriteria] Sets the chat criteria + * - [ChatTrigger.setParameter] Sets the chat parameter + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerActionBar(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a trigger that runs before the world loads. + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerWorldLoad(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before the world unloads. + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerWorldUnload(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before a mouse button is being pressed or released. + * + * Passes through four arguments: + * - The mouse x position + * - The mouse y position + * - The mouse button + * - The mouse button state (true if button is pressed, false otherwise) + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerClicked(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before the mouse is scrolled. + * + * Passes through three arguments: + * - The mouse x position + * - The mouse y position + * - The scroll amount + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerScrolled(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs while a mouse button is being held down. + * + * Passes through five arguments: + * - The mouse delta x position (relative to last frame) + * - The mouse delta y position (relative to last frame) + * - The mouse x position + * - The mouse y position + * - The mouse button + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerDragged(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before a sound is played. + * + * Passes through six arguments: + * - The sound event's position + * - The sound event's name + * - The sound event's volume + * - The sound event's pitch + * - The sound event's category's name + * - The sound event, which can be cancelled + * + * Available modifications: + * - [SoundPlayTrigger.setCriteria] Sets the sound name criteria + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerSoundPlay(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before every game tick. + * + * Passes through one argument: + * - Ticks elapsed + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerTick(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs in predictable intervals. (60 per second by default) + * + * Passes through one argument: + * - Steps elapsed + * + * Available modifications: + * - [StepTrigger.setFps] Sets the fps, i.e. how many times this trigger will fire + * per second + * - [StepTrigger.setDelay] Sets the delay in seconds, i.e. how many seconds it takes + * to fire. Overrides [StepTrigger.setFps]. + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerStep(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + registerRenderWorld(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before the world is drawn. + * + * Passes through one argument: + * - Partial ticks elapsed + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerPreRenderWorld(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs after the world is drawn. + * + * Passes through one argument: + * - Partial ticks elapsed + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerPostRenderWorld(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before the overlay is drawn. + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerRenderOverlay(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before the player list is being drawn. + * + * Passes through one argument: + * - The render event, which can be cancelled + * + * Available modifications: + * - [EventTrigger.triggerIfCanceled] Sets if triggered if event is already cancelled + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerRenderPlayerList(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before the block highlight box is drawn. + * + * Passes through two arguments: + * - The draw block highlight event's position + * - The draw block highlight event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerDrawBlockHighlight(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs after the game loads. + * + * This runs after the initial loading of the game directly after scripts are + * loaded and after "/ct load" happens. + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerGameLoad(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs before the game unloads. + * + * This runs before shutdown of the JVM and before "/ct load" happens. + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerGameUnload(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new command that will run the method provided. + * + * Passes through multiple arguments: + * - The arguments supplied to the command by the user + * + * Available modifications: + * - [CommandTrigger.setCommandName] Sets the command name + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerCommand(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Gets a classes unmapped class name, or throws an error if it is not mapped + * Registers a new trigger that runs when a new gui is first opened. + * + * Passes through one argument: + * - The [net.minecraft.client.gui.screen.Screen] that was opened + * - The gui opened event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - unmapClass(clazz: java.lang.Class): string | null | undefined; + registerGuiOpened(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Gets an unmapped class name from a mapped class name, or returns null if - * it either does not exist or is not mapped. + * Registers a new trigger that runs when a gui is closed. + * + * Passes through one argument: + * - The gui that was closed + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - unmapClassName(className: string): string | null | undefined; + registerGuiClosed(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Gets the mapped class name from an unmapped class name or null if the class - * name does not exist. Note that this is not required to use mapped classes, - * as Rhino performs this mapping automatically during runtime. + * Registers a new trigger that runs before an item is dropped. + * + * Passes through two arguments: + * - The [com.chattriggers.ctjs.api.inventory.Item] that was dropped + * - Whether the entire stack (true), or just 1 item (false) will be dropped + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - mapClassName(className: string): string | null | undefined; + registerDropItem(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Allows runtime inspection of mappings + * Registers a new trigger that runs before a message is sent in chat. + * + * Passes through two arguments: + * - The message + * - The message event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - new(): com.chattriggers.ctjs.api.Mappings; - } - interface Mappings { + registerMessageSent(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Gets a classes unmapped class name, or throws an error if it is not mapped + * Registers a new trigger that runs when a tooltip is being rendered. + * This allows for the user to modify what text is in the tooltip, and even the + * ability to cancel rendering completely. Note that you must call + * [com.chattriggers.ctjs.api.inventory.Item.setLore] with the modified lore for + * the changes to take effect. + * + * Passes through three arguments: + * - A list of [com.chattriggers.ctjs.api.message.TextComponent] objects to modify. + * - The [com.chattriggers.ctjs.api.inventory.Item] that this lore is attached to. + * - The cancellable event. + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - unmapClass(clazz: java.lang.Class): string | null | undefined; + registerItemTooltip(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Gets an unmapped class name from a mapped class name, or returns null if - * it either does not exist or is not mapped. + * Registers a new trigger that runs before the player interacts. + * + * Passes through three arguments: + * - The [com.chattriggers.ctjs.api.entity.PlayerInteraction] + * - The object of interaction, depending on the interaction type. Either a + * [com.chattriggers.ctjs.api.entity.Entity], + * [com.chattriggers.ctjs.api.world.block.Block], or + * [com.chattriggers.ctjs.api.inventory.Item], + * - The event, which can be cancelled if the interaction is not BreakBlock + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - unmapClassName(className: string): string | null | undefined; + registerPlayerInteract(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Gets the mapped class name from an unmapped class name or null if the class - * name does not exist. Note that this is not required to use mapped classes, - * as Rhino performs this mapping automatically during runtime. + * Registers a new trigger that runs when an entity is damaged by the player + * + * Passes through one argument: + * - The target Entity that is damaged + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - mapClassName(className: string): string | null | undefined; + registerEntityDamage(method: any): com.chattriggers.ctjs.api.triggers.Trigger; /** - * Allows runtime inspection of mappings + * Registers a new trigger that runs when an entity dies + * + * Passes through one argument: + * - The Entity that died + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification */ - new(): com.chattriggers.ctjs.api.Mappings; - } - const Config: { - ConsoleSettings: typeof com.chattriggers.ctjs.api.Config$ConsoleSettings; - getModuleImportHelp(): boolean; - setModuleImportHelp(value: boolean): void; - getModuleChangelog(): boolean; - setModuleChangelog(value: boolean): void; - getShowUpdatesInChat(): boolean; - setShowUpdatesInChat(value: boolean): void; - getAutoUpdateModules(): boolean; - setAutoUpdateModules(value: boolean): void; - getSendStatistics(): boolean; - setSendStatistics(value: boolean): void; - getClearConsoleOnLoad(): boolean; - setClearConsoleOnLoad(value: boolean): void; - getOpenConsoleOnError(): boolean; - setOpenConsoleOnError(value: boolean): void; - getConsoleFiraCodeFont(): boolean; - setConsoleFiraCodeFont(value: boolean): void; - getConsoleFontSize(): number; - setConsoleFontSize(value: number): void; - getCustomTheme(): boolean; - setCustomTheme(value: boolean): void; - getConsoleTheme(): number; - setConsoleTheme(value: number): void; - getConsoleTextColor(): java.awt.Color; - setConsoleTextColor(value: java.awt.Color): void; - getConsoleBackgroundColor(): java.awt.Color; - setConsoleBackgroundColor(value: java.awt.Color): void; - getConsoleErrorColor(): java.awt.Color; - setConsoleErrorColor(value: java.awt.Color): void; - getConsoleWarningColor(): java.awt.Color; - setConsoleWarningColor(value: java.awt.Color): void; - wasWelcomeShown(): boolean; - markWelcomeShown(): void; - new(): com.chattriggers.ctjs.api.Config; - } - interface Config extends gg.essential.vigilance.Vigilant { - getModuleImportHelp(): boolean; - setModuleImportHelp(value: boolean): void; - getModuleChangelog(): boolean; - setModuleChangelog(value: boolean): void; - getShowUpdatesInChat(): boolean; - setShowUpdatesInChat(value: boolean): void; - getAutoUpdateModules(): boolean; - setAutoUpdateModules(value: boolean): void; - getSendStatistics(): boolean; - setSendStatistics(value: boolean): void; - getClearConsoleOnLoad(): boolean; - setClearConsoleOnLoad(value: boolean): void; - getOpenConsoleOnError(): boolean; - setOpenConsoleOnError(value: boolean): void; - getConsoleFiraCodeFont(): boolean; - setConsoleFiraCodeFont(value: boolean): void; - getConsoleFontSize(): number; - setConsoleFontSize(value: number): void; - getCustomTheme(): boolean; - setCustomTheme(value: boolean): void; - getConsoleTheme(): number; - setConsoleTheme(value: number): void; - getConsoleTextColor(): java.awt.Color; - setConsoleTextColor(value: java.awt.Color): void; - getConsoleBackgroundColor(): java.awt.Color; - setConsoleBackgroundColor(value: java.awt.Color): void; - getConsoleErrorColor(): java.awt.Color; - setConsoleErrorColor(value: java.awt.Color): void; - getConsoleWarningColor(): java.awt.Color; - setConsoleWarningColor(value: java.awt.Color): void; - wasWelcomeShown(): boolean; - markWelcomeShown(): void; - new(): com.chattriggers.ctjs.api.Config; - } - const Config$ConsoleSettings: { - new(clearConsoleOnLoad: boolean, openConsoleOnError: boolean, consoleFiraCodeFont: boolean, consoleFontSize: number, customTheme: boolean, consoleTheme: number, consoleTextColor: java.awt.Color, consoleBackgroundColor: java.awt.Color, consoleErrorColor: java.awt.Color, consoleWarningColor: java.awt.Color): com.chattriggers.ctjs.api.Config$ConsoleSettings; - } - interface Config$ConsoleSettings { - getClearConsoleOnLoad(): boolean; - setClearConsoleOnLoad(value: boolean): void; - getOpenConsoleOnError(): boolean; - setOpenConsoleOnError(value: boolean): void; - getConsoleFiraCodeFont(): boolean; - setConsoleFiraCodeFont(value: boolean): void; - getConsoleFontSize(): number; - setConsoleFontSize(value: number): void; - getCustomTheme(): boolean; - setCustomTheme(value: boolean): void; - getConsoleTheme(): number; - setConsoleTheme(value: number): void; - getConsoleTextColor(): java.awt.Color; - setConsoleTextColor(value: java.awt.Color): void; - getConsoleBackgroundColor(): java.awt.Color; - setConsoleBackgroundColor(value: java.awt.Color): void; - getConsoleErrorColor(): java.awt.Color; - setConsoleErrorColor(value: java.awt.Color): void; - getConsoleWarningColor(): java.awt.Color; - setConsoleWarningColor(value: java.awt.Color): void; - component1(): boolean; - component2(): boolean; - component3(): boolean; - component4(): number; - component5(): boolean; - component6(): number; - component7(): java.awt.Color; - component8(): java.awt.Color; - component9(): java.awt.Color; - component10(): java.awt.Color; - copy(clearConsoleOnLoad: boolean, openConsoleOnError: boolean, consoleFiraCodeFont: boolean, consoleFontSize: number, customTheme: boolean, consoleTheme: number, consoleTextColor: java.awt.Color, consoleBackgroundColor: java.awt.Color, consoleErrorColor: java.awt.Color, consoleWarningColor: java.awt.Color): com.chattriggers.ctjs.api.Config$ConsoleSettings; - } - const Config$ConsoleSettings$Companion: { - new(): unknown; - } - interface Config$ConsoleSettings$Companion { - new(): unknown; - make(): com.chattriggers.ctjs.api.Config$ConsoleSettings; - } - } - namespace internal { - namespace commands { - const CommandCollection: { - new(): com.chattriggers.ctjs.internal.commands.CommandCollection; - } - interface CommandCollection { - register(command: com.chattriggers.ctjs.internal.commands.Command): void; - unregister(command: com.chattriggers.ctjs.internal.commands.Command): void; - unregisterAll(): void; - onExecute(block: kotlin.Function1, void>): T; - } - interface Command { - getOverrideExisting(): boolean; - getName(): string; - registerImpl(dispatcher: com.mojang.brigadier.CommandDispatcher): void; - unregisterImpl(dispatcher: com.mojang.brigadier.CommandDispatcher): void; - } - } - namespace launch { - interface IInjector { - } - } - } - namespace engine { - const WrappedThread: { - new(task: java.lang.Runnable): com.chattriggers.ctjs.engine.WrappedThread; - } - interface WrappedThread { - start(): void; - run(): void; - stop(): void; - interrupt(): void; - isInterrupted(): boolean; - destroy(): void; - isAlive(): boolean; - suspend(): void; - resume(): void; - setDaemon(on: boolean): void; - getId(): number; - } - const WrappedThread$Companion: { - sleep(millis: number): void; - sleep(millis: number, nanos: number): void; - currentThread(): java.lang.Thread; - new(): com.chattriggers.ctjs.engine.WrappedThread$Companion; - } - interface WrappedThread$Companion { - sleep(millis: number): void; - sleep(millis: number, nanos: number): void; - currentThread(): java.lang.Thread; - new(): com.chattriggers.ctjs.engine.WrappedThread$Companion; - } - const MixinCallback: { - new(id: number, injector: com.chattriggers.ctjs.internal.launch.IInjector): com.chattriggers.ctjs.engine.MixinCallback; - } - interface MixinCallback { - attach(method: any): void; - component1(): number; - component2(): com.chattriggers.ctjs.internal.launch.IInjector; - copy(id: number, injector: com.chattriggers.ctjs.internal.launch.IInjector): com.chattriggers.ctjs.engine.MixinCallback; - } - const Console: { - new(): com.chattriggers.ctjs.engine.Console; - } - interface Console { - new(): com.chattriggers.ctjs.engine.Console; - clear(): void; - println(obj: any, logType: com.chattriggers.ctjs.engine.LogType, end: string, customColor: java.awt.Color | null | undefined): void; - println(obj: any, logType: com.chattriggers.ctjs.engine.LogType, end: string): void; - println(obj: any, logType: com.chattriggers.ctjs.engine.LogType): void; - println(obj: any): void; - printStackTrace(error: kotlin.Throwable): void; - show(): void; - close(): void; - onConsoleSettingsChanged(settings: com.chattriggers.ctjs.api.Config$ConsoleSettings): void; - } - const LogType: { - INFO: com.chattriggers.ctjs.engine.LogType; - WARN: com.chattriggers.ctjs.engine.LogType; - ERROR: com.chattriggers.ctjs.engine.LogType; - getEntries(): kotlin.enums.EnumEntries; - values(): Array; - valueOf(value: string): com.chattriggers.ctjs.engine.LogType; - } - interface LogType extends kotlin.Enum { + registerEntityDeath(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs as a gui is rendered + * + * Passes through three arguments: + * - The mouse x position + * - The mouse y position + * - The gui + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerGuiRender(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever a key is typed with a gui open + * + * Passes through four arguments: + * - The character pressed (e.g. 'd') + * - The key code pressed (e.g. 41) + * - The gui + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerGuiKey(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever the mouse is clicked with a + * gui open + * + * Passes through five arguments: + * - The mouse x position + * - The mouse y position + * - The mouse button + * - The mouse button state (true if button is pressed, false otherwise) + * - The gui + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerGuiMouseClick(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever a mouse button held and dragged + * with a gui open + * + * Passes through seven arguments: + * - The mouse delta x position (relative to last frame) + * - The mouse delta y position (relative to last frame) + * - The mouse x position + * - The mouse y position + * - The mouse button + * - The gui + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerGuiMouseDrag(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever a packet is sent from the client to the server + * + * Passes through two arguments: + * - The packet + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * - [ClassFilterTrigger.setFilteredClasses] Sets the packet classes which this trigger + * gets fired for + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerPacketSent(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever a packet is sent to the client from the server + * + * Passes through two arguments: + * - The packet + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * - [ClassFilterTrigger.setFilteredClasses] Sets the packet classes which this trigger + * gets fired for + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerPacketReceived(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever the player connects to a server + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerServerConnect(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever the player disconnects from a server + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerServerDisconnect(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever an entity is rendered + * + * Passes through three arguments: + * - The [com.chattriggers.ctjs.api.entity.Entity] + * - The partial ticks + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * - [ClassFilterTrigger.setFilteredClasses] Sets the entity classes which this trigger + * gets fired for + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerRenderEntity(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever a block entity is rendered + * + * Passes through three arguments: + * - The [com.chattriggers.ctjs.api.entity.BlockEntity] + * - The partial ticks + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * - [ClassFilterTrigger.setFilteredClasses] Sets the tile entity classes which this trigger + * gets fired for + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerRenderBlockEntity(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs after the current screen is rendered + * + * Passes through three arguments: + * - The mouseX + * - The mouseY + * - The GuiScreen + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerPostGuiRender(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a new trigger that runs whenever a particle is spawned + * + * Passes through two arguments: + * - The [com.chattriggers.ctjs.api.entity.Particle] + * - The event, which can be cancelled + * + * Available modifications: + * - [Trigger.setPriority] Sets the priority + * + * @param method The method to call when the event is fired + * @return The trigger for additional modification + */ + registerSpawnParticle(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + new(): com.chattriggers.ctjs.engine.Register; } - const Register: { + interface Register { /** * Helper method register a trigger. * @@ -52420,574 +44738,7461 @@ declare global { registerSpawnParticle(method: any): com.chattriggers.ctjs.api.triggers.Trigger; new(): com.chattriggers.ctjs.engine.Register; } - interface Register { - /** - * Helper method register a trigger. - * - * Called by taking the original name of the method, i.e. `registerChat`, - * removing the word register, and comparing it case-insensitively with - * the methods below. - * - * @param triggerType the type of trigger - * @param method The name of the method or the actual method to callback when the event is fired - * @return The trigger for additional modification - */ - register(triggerType: string, method: any): com.chattriggers.ctjs.api.triggers.Trigger; - createCustomTrigger(name: string): any; - /** - * Registers a new trigger that runs before a chat message is received. - * - * Passes through multiple arguments: - * - Any number of chat criteria variables - * - The chat event, which can be cancelled - * - * Available modifications: - * - [ChatTrigger.triggerIfCanceled] Sets if triggered if event is already cancelled - * - [ChatTrigger.setChatCriteria] Sets the chat criteria - * - [ChatTrigger.setParameter] Sets the chat parameter - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerChat(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before an action bar message is received. - * - * Passes through multiple arguments: - * - Any number of chat criteria variables - * - The chat event, which can be cancelled - * - * Available modifications: - * - [ChatTrigger.triggerIfCanceled] Sets if triggered if event is already cancelled - * - [ChatTrigger.setChatCriteria] Sets the chat criteria - * - [ChatTrigger.setParameter] Sets the chat parameter - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerActionBar(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a trigger that runs before the world loads. - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerWorldLoad(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the world unloads. - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerWorldUnload(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before a mouse button is being pressed or released. - * - * Passes through four arguments: - * - The mouse x position - * - The mouse y position - * - The mouse button - * - The mouse button state (true if button is pressed, false otherwise) - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerClicked(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the mouse is scrolled. - * - * Passes through three arguments: - * - The mouse x position - * - The mouse y position - * - The scroll amount - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerScrolled(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs while a mouse button is being held down. - * - * Passes through five arguments: - * - The mouse delta x position (relative to last frame) - * - The mouse delta y position (relative to last frame) - * - The mouse x position - * - The mouse y position - * - The mouse button - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerDragged(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before a sound is played. - * - * Passes through six arguments: - * - The sound event's position - * - The sound event's name - * - The sound event's volume - * - The sound event's pitch - * - The sound event's category's name - * - The sound event, which can be cancelled - * - * Available modifications: - * - [SoundPlayTrigger.setCriteria] Sets the sound name criteria - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerSoundPlay(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before every game tick. - * - * Passes through one argument: - * - Ticks elapsed - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerTick(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs in predictable intervals. (60 per second by default) - * - * Passes through one argument: - * - Steps elapsed - * - * Available modifications: - * - [StepTrigger.setFps] Sets the fps, i.e. how many times this trigger will fire - * per second - * - [StepTrigger.setDelay] Sets the delay in seconds, i.e. how many seconds it takes - * to fire. Overrides [StepTrigger.setFps]. - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerStep(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - registerRenderWorld(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the world is drawn. - * - * Passes through one argument: - * - Partial ticks elapsed - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerPreRenderWorld(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs after the world is drawn. - * - * Passes through one argument: - * - Partial ticks elapsed - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerPostRenderWorld(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the overlay is drawn. - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerRenderOverlay(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the player list is being drawn. - * - * Passes through one argument: - * - The render event, which can be cancelled - * - * Available modifications: - * - [EventTrigger.triggerIfCanceled] Sets if triggered if event is already cancelled - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerRenderPlayerList(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the block highlight box is drawn. - * - * Passes through two arguments: - * - The draw block highlight event's position - * - The draw block highlight event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerDrawBlockHighlight(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs after the game loads. - * - * This runs after the initial loading of the game directly after scripts are - * loaded and after "/ct load" happens. - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGameLoad(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the game unloads. - * - * This runs before shutdown of the JVM and before "/ct load" happens. - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGameUnload(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new command that will run the method provided. - * - * Passes through multiple arguments: - * - The arguments supplied to the command by the user - * - * Available modifications: - * - [CommandTrigger.setCommandName] Sets the command name - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerCommand(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs when a new gui is first opened. - * - * Passes through one argument: - * - The [net.minecraft.client.gui.screen.Screen] that was opened - * - The gui opened event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGuiOpened(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs when a gui is closed. - * - * Passes through one argument: - * - The gui that was closed - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGuiClosed(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before an item is dropped. - * - * Passes through two arguments: - * - The [com.chattriggers.ctjs.api.inventory.Item] that was dropped - * - Whether the entire stack (true), or just 1 item (false) will be dropped - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerDropItem(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before a message is sent in chat. - * - * Passes through two arguments: - * - The message - * - The message event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerMessageSent(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs when a tooltip is being rendered. - * This allows for the user to modify what text is in the tooltip, and even the - * ability to cancel rendering completely. Note that you must call - * [com.chattriggers.ctjs.api.inventory.Item.setLore] with the modified lore for - * the changes to take effect. - * - * Passes through three arguments: - * - A list of [com.chattriggers.ctjs.api.message.TextComponent] objects to modify. - * - The [com.chattriggers.ctjs.api.inventory.Item] that this lore is attached to. - * - The cancellable event. - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerItemTooltip(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs before the player interacts. - * - * Passes through three arguments: - * - The [com.chattriggers.ctjs.api.entity.PlayerInteraction] - * - The object of interaction, depending on the interaction type. Either a - * [com.chattriggers.ctjs.api.entity.Entity], - * [com.chattriggers.ctjs.api.world.block.Block], or - * [com.chattriggers.ctjs.api.inventory.Item], - * - The event, which can be cancelled if the interaction is not BreakBlock - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerPlayerInteract(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs when an entity is damaged by the player - * - * Passes through one argument: - * - The target Entity that is damaged - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerEntityDamage(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs when an entity dies - * - * Passes through one argument: - * - The Entity that died - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerEntityDeath(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs as a gui is rendered - * - * Passes through three arguments: - * - The mouse x position - * - The mouse y position - * - The gui - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGuiRender(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs whenever a key is typed with a gui open - * - * Passes through four arguments: - * - The character pressed (e.g. 'd') - * - The key code pressed (e.g. 41) - * - The gui - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGuiKey(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs whenever the mouse is clicked with a - * gui open - * - * Passes through five arguments: - * - The mouse x position - * - The mouse y position - * - The mouse button - * - The mouse button state (true if button is pressed, false otherwise) - * - The gui - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGuiMouseClick(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - /** - * Registers a new trigger that runs whenever a mouse button held and dragged - * with a gui open - * - * Passes through seven arguments: - * - The mouse delta x position (relative to last frame) - * - The mouse delta y position (relative to last frame) - * - The mouse x position - * - The mouse y position - * - The mouse button - * - The gui - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification - */ - registerGuiMouseDrag(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + const MixinCallback: { + new(id: number, injector: com.chattriggers.ctjs.internal.launch.IInjector): com.chattriggers.ctjs.engine.MixinCallback; + } + interface MixinCallback { + attach(method: any): void; + component1(): number; + component2(): com.chattriggers.ctjs.internal.launch.IInjector; + copy(id: number, injector: com.chattriggers.ctjs.internal.launch.IInjector): com.chattriggers.ctjs.engine.MixinCallback; + } + const Console: { + new(): com.chattriggers.ctjs.engine.Console; + } + interface Console { + new(): com.chattriggers.ctjs.engine.Console; + clear(): void; + println(obj: any, logType: com.chattriggers.ctjs.engine.LogType, end: string, customColor: java.awt.Color | null | undefined): void; + println(obj: any, logType: com.chattriggers.ctjs.engine.LogType, end: string): void; + println(obj: any, logType: com.chattriggers.ctjs.engine.LogType): void; + println(obj: any): void; + printStackTrace(error: kotlin.Throwable): void; + show(): void; + close(): void; + onConsoleSettingsChanged(settings: com.chattriggers.ctjs.api.Config$ConsoleSettings): void; + } + const LogType: { + INFO: com.chattriggers.ctjs.engine.LogType; + WARN: com.chattriggers.ctjs.engine.LogType; + ERROR: com.chattriggers.ctjs.engine.LogType; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.engine.LogType; + } + interface LogType extends kotlin.Enum { + } + } + namespace api { + namespace triggers { + const Trigger: { + Priority: typeof com.chattriggers.ctjs.api.triggers.Trigger$Priority; + } + interface Trigger extends kotlin.Comparable { + getMethod(): any; + setMethod(value: any): void; + getType(): com.chattriggers.ctjs.api.triggers.ITriggerType; + setType(value: com.chattriggers.ctjs.api.triggers.ITriggerType): void; + isRegistered(): boolean; + /** + * Sets a trigger's priority using [Priority]. + * Highest runs first. + * @param priority the priority of the trigger + * @return the trigger for method chaining + */ + setPriority(priority: com.chattriggers.ctjs.api.triggers.Trigger$Priority): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Registers a trigger based on its type. + * This is done automatically with TriggerRegister. + * @return the trigger for method chaining + */ + register(): com.chattriggers.ctjs.api.triggers.Trigger; + /** + * Unregisters a trigger. + * @return the trigger for method chaining + */ + unregister(): com.chattriggers.ctjs.api.triggers.Trigger; + } + interface ITriggerType { + getName(): string; + triggerAll(): void; + triggerAll(arg0: any | null | undefined): void; + triggerAll(arg0: any | null | undefined, arg1: any | null | undefined): void; + triggerAll(arg0: any | null | undefined, arg1: any | null | undefined, arg2: any | null | undefined): void; + triggerAll(arg0: any | null | undefined, arg1: any | null | undefined, arg2: any | null | undefined, arg3: any | null | undefined): void; + triggerAll(arg0: any | null | undefined, arg1: any | null | undefined, arg2: any | null | undefined, arg3: any | null | undefined, arg4: any | null | undefined): void; + triggerAll(args: any | null | undefined): void; + } + const Trigger$Priority: { + HIGHEST: com.chattriggers.ctjs.api.triggers.Trigger$Priority; + HIGH: com.chattriggers.ctjs.api.triggers.Trigger$Priority; + NORMAL: com.chattriggers.ctjs.api.triggers.Trigger$Priority; + LOW: com.chattriggers.ctjs.api.triggers.Trigger$Priority; + LOWEST: com.chattriggers.ctjs.api.triggers.Trigger$Priority; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.triggers.Trigger$Priority; + } + interface Trigger$Priority extends kotlin.Enum { + } + const ChatTrigger: { + Event: typeof com.chattriggers.ctjs.api.triggers.ChatTrigger$Event; + new(method: any, type: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.ChatTrigger; + } + interface ChatTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { + /** + * Sets if the chat trigger should run if the chat event has already been canceled. + * True by default. + * @param bool Boolean to set + * @return the trigger object for method chaining + */ + triggerIfCanceled(bool: boolean): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Sets the chat criteria for [matchesChatCriteria]. + * Arguments for the trigger's method can be passed in using ${variable}. + * Example: `setChatCriteria("<${name}> ${message}");` + * Use ${*} to match a chat message but ignore the pass through. + * @param chatCriteria the chat criteria to set + * @return the trigger object for method chaining + */ + setChatCriteria(chatCriteria: any): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Alias for [setChatCriteria]. + * @param chatCriteria the chat criteria to set + * @return the trigger object for method chaining + */ + setCriteria(chatCriteria: any): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Sets the chat parameter for [Parameter]. + * Clears current parameter list. + * @param parameter the chat parameter to set + * @return the trigger object for method chaining + */ + setParameter(parameter: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Sets multiple chat parameters for [Parameter]. + * Clears current parameter list. + * @param parameters the chat parameters to set + * @return the trigger object for method chaining + */ + setParameters(parameters: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Adds chat parameter for [Parameter]. + * @param parameter the chat parameter to add + * @return the trigger object for method chaining + */ + addParameter(parameter: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Adds multiple chat parameters for [Parameter]. + * @param parameters the chat parameters to add + * @return the trigger object for method chaining + */ + addParameters(parameters: string): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Adds the "start" parameter + * @return the trigger object for method chaining + */ + setStart(): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Adds the "contains" parameter + * @return the trigger object for method chaining + */ + setContains(): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Adds the "end" parameter + * @return the trigger object for method chaining + */ + setEnd(): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Forces this trigger to be formatted or unformatted. If no argument is + * provided, it will be set to formatted. This method overrides the + * behavior of inferring the formatted status from the criteria. + */ + setFormatted(): void; + /** + * Forces this trigger to be formatted or unformatted. If no argument is + * provided, it will be set to formatted. This method overrides the + * behavior of inferring the formatted status from the criteria. + */ + setFormatted(formatted: boolean): void; + /** + * Makes the trigger match the entire chat message + * @return the trigger object for method chaining + */ + setExact(): com.chattriggers.ctjs.api.triggers.ChatTrigger; + /** + * Makes the chat criteria case insensitive + * @return the trigger object for method chaining + */ + setCaseInsensitive(): com.chattriggers.ctjs.api.triggers.ChatTrigger; + } + const ChatTrigger$Event: { + message: com.chattriggers.ctjs.api.message.TextComponent; + new(message: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.triggers.ChatTrigger$Event; + } + interface ChatTrigger$Event extends com.chattriggers.ctjs.api.triggers.CancellableEvent { + } + const CancellableEvent: { + new(): com.chattriggers.ctjs.api.triggers.CancellableEvent; + } + interface CancellableEvent { + setCanceled(): void; + setCanceled(newVal: boolean): void; + setCancelled(): void; + setCancelled(newVal: boolean): void; + isCancelable(): boolean; + isCancellable(): boolean; + isCancelled(): boolean; + isCanceled(): boolean; + } + const ClassFilterTrigger: { + new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType, wrappedClass: java.lang.Class): com.chattriggers.ctjs.api.triggers.ClassFilterTrigger; + } + interface ClassFilterTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { + /** + * Alias for `setFilteredClasses([A.class])` + * + * @param clazz The class for which this trigger should run for + */ + setFilteredClass(clazz: java.lang.Class): com.chattriggers.ctjs.api.triggers.ClassFilterTrigger; + /** + * Sets which classes this trigger should run for. If the list is empty, it runs + * for every class. + * + * @param classes The classes for which this trigger should run for + * @return This trigger object for chaining + */ + setFilteredClasses(classes: Array>): com.chattriggers.ctjs.api.triggers.ClassFilterTrigger; + } + const RenderEntityTrigger: { + new(method: any): com.chattriggers.ctjs.api.triggers.RenderEntityTrigger; + } + interface RenderEntityTrigger extends com.chattriggers.ctjs.api.triggers.ClassFilterTrigger { + } + const RenderBlockEntityTrigger: { + new(method: any): com.chattriggers.ctjs.api.triggers.RenderBlockEntityTrigger; + } + interface RenderBlockEntityTrigger extends com.chattriggers.ctjs.api.triggers.ClassFilterTrigger { + } + const PacketTrigger: { + new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.PacketTrigger; + } + interface PacketTrigger extends com.chattriggers.ctjs.api.triggers.ClassFilterTrigger, net.minecraft.network.protocol.Packet> { + } + const SoundPlayTrigger: { + new(method: any): com.chattriggers.ctjs.api.triggers.SoundPlayTrigger; + } + interface SoundPlayTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { + /** + * Sets the sound name criteria. + * + * @param soundNameCriteria the sound name + * @return the trigger for method chaining + */ + setCriteria(soundNameCriteria: string): com.chattriggers.ctjs.api.triggers.SoundPlayTrigger; + } + const TriggerType: { + CHAT: com.chattriggers.ctjs.api.triggers.TriggerType; + ACTION_BAR: com.chattriggers.ctjs.api.triggers.TriggerType; + TICK: com.chattriggers.ctjs.api.triggers.TriggerType; + STEP: com.chattriggers.ctjs.api.triggers.TriggerType; + GAME_UNLOAD: com.chattriggers.ctjs.api.triggers.TriggerType; + GAME_LOAD: com.chattriggers.ctjs.api.triggers.TriggerType; + CLICKED: com.chattriggers.ctjs.api.triggers.TriggerType; + SCROLLED: com.chattriggers.ctjs.api.triggers.TriggerType; + DRAGGED: com.chattriggers.ctjs.api.triggers.TriggerType; + GUI_OPENED: com.chattriggers.ctjs.api.triggers.TriggerType; + MESSAGE_SENT: com.chattriggers.ctjs.api.triggers.TriggerType; + ITEM_TOOLTIP: com.chattriggers.ctjs.api.triggers.TriggerType; + PLAYER_INTERACT: com.chattriggers.ctjs.api.triggers.TriggerType; + GUI_KEY: com.chattriggers.ctjs.api.triggers.TriggerType; + GUI_MOUSE_CLICK: com.chattriggers.ctjs.api.triggers.TriggerType; + GUI_MOUSE_DRAG: com.chattriggers.ctjs.api.triggers.TriggerType; + PACKET_SENT: com.chattriggers.ctjs.api.triggers.TriggerType; + PACKET_RECEIVED: com.chattriggers.ctjs.api.triggers.TriggerType; + SERVER_CONNECT: com.chattriggers.ctjs.api.triggers.TriggerType; + SERVER_DISCONNECT: com.chattriggers.ctjs.api.triggers.TriggerType; + GUI_CLOSED: com.chattriggers.ctjs.api.triggers.TriggerType; + DROP_ITEM: com.chattriggers.ctjs.api.triggers.TriggerType; + PRE_RENDER_WORLD: com.chattriggers.ctjs.api.triggers.TriggerType; + POST_RENDER_WORLD: com.chattriggers.ctjs.api.triggers.TriggerType; + BLOCK_HIGHLIGHT: com.chattriggers.ctjs.api.triggers.TriggerType; + RENDER_OVERLAY: com.chattriggers.ctjs.api.triggers.TriggerType; + RENDER_PLAYER_LIST: com.chattriggers.ctjs.api.triggers.TriggerType; + RENDER_ENTITY: com.chattriggers.ctjs.api.triggers.TriggerType; + RENDER_BLOCK_ENTITY: com.chattriggers.ctjs.api.triggers.TriggerType; + GUI_RENDER: com.chattriggers.ctjs.api.triggers.TriggerType; + POST_GUI_RENDER: com.chattriggers.ctjs.api.triggers.TriggerType; + SOUND_PLAY: com.chattriggers.ctjs.api.triggers.TriggerType; + WORLD_LOAD: com.chattriggers.ctjs.api.triggers.TriggerType; + WORLD_UNLOAD: com.chattriggers.ctjs.api.triggers.TriggerType; + SPAWN_PARTICLE: com.chattriggers.ctjs.api.triggers.TriggerType; + ENTITY_DEATH: com.chattriggers.ctjs.api.triggers.TriggerType; + ENTITY_DAMAGE: com.chattriggers.ctjs.api.triggers.TriggerType; + COMMAND: com.chattriggers.ctjs.api.triggers.TriggerType; + OTHER: com.chattriggers.ctjs.api.triggers.TriggerType; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.triggers.TriggerType; + } + interface TriggerType extends kotlin.Enum, com.chattriggers.ctjs.api.triggers.ITriggerType { + } + const CustomTriggerType: { + new(name: string): com.chattriggers.ctjs.api.triggers.CustomTriggerType; + } + interface CustomTriggerType extends com.chattriggers.ctjs.api.triggers.ITriggerType { + component1(): string; + copy(name: string): com.chattriggers.ctjs.api.triggers.CustomTriggerType; + } + const EventTrigger: { + new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.EventTrigger; + } + interface EventTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { + /** + * Sets if this trigger should run if the event has already been canceled. + * True by default. + * + * @param bool Boolean to set + * @return the trigger object for method chaining + */ + triggerIfCanceled(bool: boolean): com.chattriggers.ctjs.api.triggers.EventTrigger; + } + const CommandTrigger: { + new(method: any): com.chattriggers.ctjs.api.triggers.CommandTrigger; + } + interface CommandTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { + /** + * Sets the tab completion options for the command. + * This method must be used before setting the command name, otherwise, the tab completions will not be set. + * + * @param args all the tab completion options. + */ + setTabCompletions(args: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; + /** + * This sets the possible tab completions for the command. + * This method must be used before setting the command name, otherwise, the tab completions will not be set. + * + * @param callback the callback that returns the tab completion options. + * + * For example: + * ```js + * register("command", () => { + * + * }).setTabCompletions((args) => { + * return ["option1", "option2"]; + * }).setName("test"); + * ``` + * The `args` parameter of the callback are the arguments currently passed to the command. + * For instance, if you want to not show the options after the user tabs the first time, just add a check + * for the length of the arguments and return an empty array. + * + * The return value of the callback **must be an array of strings**, and in this case will always return the 2 + * options in the array. + */ + setTabCompletions(callback: kotlin.Function1, Array>): com.chattriggers.ctjs.api.triggers.CommandTrigger; + /** + * Sets the aliases for the command. + * + * @param args all the aliases. + */ + setAliases(args: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; + /** + * Sets the command name. + * Example: + * setCommandName("test") + * would result in the command being /test + * + * @param commandName The command name + * @param overrideExisting Whether existing commands with the same name should be overridden + * @return the trigger for additional modification + */ + setCommandName(commandName: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; + /** + * Sets the command name. + * Example: + * setCommandName("test") + * would result in the command being /test + * + * @param commandName The command name + * @param overrideExisting Whether existing commands with the same name should be overridden + * @return the trigger for additional modification + */ + setCommandName(commandName: string, overrideExisting: boolean): com.chattriggers.ctjs.api.triggers.CommandTrigger; + /** + * Alias for [setCommandName] + * + * @param commandName The command name + * @param overrideExisting Whether existing commands with the same name should be overridden + * @return the trigger for additional modification + */ + setName(commandName: string): com.chattriggers.ctjs.api.triggers.CommandTrigger; + /** + * Alias for [setCommandName] + * + * @param commandName The command name + * @param overrideExisting Whether existing commands with the same name should be overridden + * @return the trigger for additional modification + */ + setName(commandName: string, overrideExisting: boolean): com.chattriggers.ctjs.api.triggers.CommandTrigger; + } + const RegularTrigger: { + new(method: any, triggerType: com.chattriggers.ctjs.api.triggers.ITriggerType): com.chattriggers.ctjs.api.triggers.RegularTrigger; + } + interface RegularTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { + } + const StepTrigger: { + new(method: any): com.chattriggers.ctjs.api.triggers.StepTrigger; + } + interface StepTrigger extends com.chattriggers.ctjs.api.triggers.Trigger { + /** + * Sets the frames per second that the trigger activates. + * This has a maximum one step per second. + * @param fps the frames per second to set + * @return the trigger for method chaining + */ + setFps(fps: number): com.chattriggers.ctjs.api.triggers.StepTrigger; + /** + * Sets the delay in seconds between the trigger activation. + * This has a minimum of one step every second. This will override [setFps]. + * @param delay The delay in seconds + * @return the trigger for method chaining + */ + setDelay(delay: number): com.chattriggers.ctjs.api.triggers.StepTrigger; + } + const StepTrigger$Companion: { + new(): com.chattriggers.ctjs.api.triggers.StepTrigger$Companion; + } + interface StepTrigger$Companion { + new(): com.chattriggers.ctjs.api.triggers.StepTrigger$Companion; + } + const PacketEvent: { + RECEIVE: net.fabricmc.fabric.api.event.Event; + new(): com.chattriggers.ctjs.api.triggers.PacketEvent; + } + interface PacketEvent { + RECEIVE: net.fabricmc.fabric.api.event.Event; + new(): com.chattriggers.ctjs.api.triggers.PacketEvent; + } + interface PacketEvent$ReceiveEvent { + trigger(packet: net.minecraft.network.protocol.Packet): void; + } + } + namespace inventory { + namespace action { + const ClickAction: { + ClickType: typeof com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; + new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.ClickAction; + } + interface ClickAction extends com.chattriggers.ctjs.api.inventory.action.Action { + getClickType(): com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; + /** + * The type of click (REQUIRED) + * + * @param clickType the new click type + */ + setClickType(clickType: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType): com.chattriggers.ctjs.api.inventory.action.ClickAction; + getHoldingShift(): boolean; + /** + * Whether the click should act as if shift is being held (defaults to false) + * + * @param holdingShift to hold shift or not + */ + setHoldingShift(holdingShift: boolean): com.chattriggers.ctjs.api.inventory.action.ClickAction; + getItemInHand(): boolean; + /** + * Whether the click should act as if an item is being held + * (defaults to whether there actually is an item in the hand) + * + * @param itemInHand to be holding an item or not + */ + setItemInHand(itemInHand: boolean): com.chattriggers.ctjs.api.inventory.action.ClickAction; + getPickupAll(): boolean; + /** + * Whether the click should try to pick up all items of said type in the inventory (essentially double clicking) + * (defaults to whether there actually is an item in the hand) + * + * @param pickupAll to pick up all items of the same type + */ + setPickupAll(pickupAll: boolean): com.chattriggers.ctjs.api.inventory.action.ClickAction; + /** + * Sets the type of click. + * Possible values are: LEFT, RIGHT, MIDDLE + * + * @param clickType the click type + * @return the current Action for method chaining + */ + setClickString(clickType: string): com.chattriggers.ctjs.api.inventory.action.ClickAction; + } + const Action: { + Type: typeof com.chattriggers.ctjs.api.inventory.action.Action$Type; + new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.Action; + } + interface Action { + getSlot(): number; + setSlot(value: number): void; + getWindowId(): number; + setWindowId(value: number): void; + setSlot(slot: number): com.chattriggers.ctjs.api.inventory.action.Action; + setWindowId(windowId: number): com.chattriggers.ctjs.api.inventory.action.Action; + } + const Action$Companion: { + /** + * Creates a new action. + * The Inventory must be a container, see [Inventory.isContainer]. + * The slot can be -999 for outside of the gui + * + * @param inventory the inventory to complete the action on + * @param slot the slot to complete the action on + * @param typeString the type of action to do (CLICK, DRAG, DROP, KEY) + * @return the new action + */ + of(inventory: com.chattriggers.ctjs.api.inventory.Inventory, slot: number, typeString: string): com.chattriggers.ctjs.api.inventory.action.Action; + new(): com.chattriggers.ctjs.api.inventory.action.Action$Companion; + } + interface Action$Companion { + /** + * Creates a new action. + * The Inventory must be a container, see [Inventory.isContainer]. + * The slot can be -999 for outside of the gui + * + * @param inventory the inventory to complete the action on + * @param slot the slot to complete the action on + * @param typeString the type of action to do (CLICK, DRAG, DROP, KEY) + * @return the new action + */ + of(inventory: com.chattriggers.ctjs.api.inventory.Inventory, slot: number, typeString: string): com.chattriggers.ctjs.api.inventory.action.Action; + new(): com.chattriggers.ctjs.api.inventory.action.Action$Companion; + } + const Action$Type: { + CLICK: com.chattriggers.ctjs.api.inventory.action.Action$Type; + DRAG: com.chattriggers.ctjs.api.inventory.action.Action$Type; + KEY: com.chattriggers.ctjs.api.inventory.action.Action$Type; + DROP: com.chattriggers.ctjs.api.inventory.action.Action$Type; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.Action$Type; + } + interface Action$Type extends kotlin.Enum { + } + const ClickAction$ClickType: { + LEFT: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; + RIGHT: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; + MIDDLE: com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.ClickAction$ClickType; + } + interface ClickAction$ClickType extends kotlin.Enum { + getButton(): number; + } + const DragAction: { + ClickType: typeof com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; + Stage: typeof com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; + new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.DragAction; + } + interface DragAction extends com.chattriggers.ctjs.api.inventory.action.Action { + getClickType(): com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; + /** + * The type of click (REQUIRED) + * + * @param clickType the new click type + */ + setClickType(clickType: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType): com.chattriggers.ctjs.api.inventory.action.DragAction; + getStage(): com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; + /** + * The stage of this drag (REQUIRED) + * BEGIN is when beginning the drag + * SLOT is for each slot being dragged into + * END is for ending the drag + * + * @param stage the stage + */ + setStage(stage: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage): com.chattriggers.ctjs.api.inventory.action.DragAction; + /** + * Sets the type of click. + * Possible values are: LEFT, RIGHT, MIDDLE + * + * @param clickType the click type + * @return the current Action for method chaining + */ + setClickString(clickType: string): com.chattriggers.ctjs.api.inventory.action.DragAction; + /** + * Sets the stage of this drag. + * Possible values are: BEGIN, SLOT, END [stage] + * + * @param stage the stage + * @return the current Action for method chaining + */ + setStageString(stage: string): com.chattriggers.ctjs.api.inventory.action.DragAction; + } + const DragAction$ClickType: { + LEFT: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; + RIGHT: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; + MIDDLE: com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.DragAction$ClickType; + } + interface DragAction$ClickType extends kotlin.Enum { + getButton(): number; + } + const DragAction$Stage: { + BEGIN: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; + SLOT: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; + END: com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.inventory.action.DragAction$Stage; + } + interface DragAction$Stage extends kotlin.Enum { + getStage(): number; + } + const DropAction: { + new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.DropAction; + } + interface DropAction extends com.chattriggers.ctjs.api.inventory.action.Action { + getHoldingCtrl(): boolean; + /** + * Whether the click should act as if control is being held (defaults to false) + * + * @param holdingCtrl to hold ctrl or not + */ + setHoldingCtrl(holdingCtrl: boolean): com.chattriggers.ctjs.api.inventory.action.DropAction; + } + const KeyAction: { + new(slot: number, windowId: number): com.chattriggers.ctjs.api.inventory.action.KeyAction; + } + interface KeyAction extends com.chattriggers.ctjs.api.inventory.action.Action { + getKey(): number; + /** + * Which key to act as if has been clicked (REQUIRED). + * Options currently are 0-8, representing the hotbar keys + * + * @param key which key to "click" + */ + setKey(key: number): com.chattriggers.ctjs.api.inventory.action.KeyAction; + } + } + namespace nbt { + const NBTBase: { + new(mcValue: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + } + interface NBTBase extends com.chattriggers.ctjs.api.CTWrapper { + /** + * Gets the type byte for the tag. + */ + getId(): number; + /** + * Creates a clone of the tag. + */ + copy(): net.minecraft.nbt.Tag; + /** + * Return whether this compound has no tags. + */ + hasNoTags(): boolean; + hasTags(): boolean; + } + const NBTBase$Companion: { + fromMC(nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + new(): com.chattriggers.ctjs.api.inventory.nbt.NBTBase$Companion; + } + interface NBTBase$Companion { + fromMC(nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + new(): com.chattriggers.ctjs.api.inventory.nbt.NBTBase$Companion; + toObject(): any | null | undefined; + toObject(): org.mozilla.javascript.NativeObject; + toObject(): org.mozilla.javascript.NativeArray; + } + const NBTTagCompound: { + NBTDataType: typeof com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + new(mcValue: net.minecraft.nbt.CompoundTag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + } + interface NBTTagCompound extends com.chattriggers.ctjs.api.inventory.nbt.NBTBase { + getTagMap(): Map; + getKeySet(): Set; + getTag(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTBase | null | undefined; + getTagId(key: string): number | null | undefined; + getByte(key: string): java.util.Optional; + getShort(key: string): java.util.Optional; + getInteger(key: string): java.util.Optional; + getLong(key: string): java.util.Optional; + getFloat(key: string): java.util.Optional; + getDouble(key: string): java.util.Optional; + getString(key: string): java.util.Optional; + getByteArray(key: string): java.util.Optional>; + getIntArray(key: string): java.util.Optional>; + getBoolean(key: string): java.util.Optional; + getCompoundTag(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + getTagList(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + get(key: string, type: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType, tagType: number | null | undefined): any | null | undefined; + get(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTBase | null | undefined; + setNBTBase(key: string, value: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setNBTBase(key: string, value: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setBoolean(key: string, value: boolean): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setByte(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setShort(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setInteger(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setLong(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setFloat(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setDouble(key: string, value: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setString(key: string, value: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setByteArray(key: string, value: Array): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + setIntArray(key: string, value: Array): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + putLongArray(key: string, value: Array): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + set(key: string, value: any): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + removeTag(key: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + toObject(): org.mozilla.javascript.NativeObject; + } + const NBTTagList: { + new(mcValue: net.minecraft.nbt.ListTag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + } + interface NBTTagList extends com.chattriggers.ctjs.api.inventory.nbt.NBTBase { + getTagCount(): number; + appendTag(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + appendTag(nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + set(id: number, nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + set(id: number, nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + insertTag(index: number, nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + insertTag(index: number, nbt: net.minecraft.nbt.Tag): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + removeTag(index: number): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + getShortAt(index: number): java.util.Optional; + getIntAt(index: number): java.util.Optional; + getFloatAt(index: number): java.util.Optional; + getDoubleAt(index: number): java.util.Optional; + getStringTagAt(index: number): string; + getListAt(index: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagList; + getCompoundTagAt(index: number): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound; + getIntArrayAt(index: number): Array; + getLongArrayAt(index: number): Array; + get(index: number): net.minecraft.nbt.Tag; + get(index: number, type: number): any; + toArray(): org.mozilla.javascript.NativeArray; + } + const NBTTagCompound$NBTDataType: { + BYTE: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + SHORT: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + INTEGER: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + LONG: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + FLOAT: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + DOUBLE: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + STRING: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + BYTE_ARRAY: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + INT_ARRAY: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + LONG_ARRAY: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + BOOLEAN: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + COMPOUND_TAG: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + TAG_LIST: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound$NBTDataType; + } + interface NBTTagCompound$NBTDataType extends kotlin.Enum { + } + const NBT: { + /** + * Creates a new [NBTBase] from the given [nbt] + * + * @param nbt the value to convert to NBT + * @param options optional argument to allow refinement of the NBT data. + * Possible options include: + * - coerceNumericStrings: Boolean, default false. + * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, + * "50l" as a long + * - preferArraysOverLists: Boolean, default false + * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or + * NBTTagIntArray accordingly + * + * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] + * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. + */ + parse(nbt: any): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + /** + * Creates a new [NBTBase] from the given [nbt] + * + * @param nbt the value to convert to NBT + * @param options optional argument to allow refinement of the NBT data. + * Possible options include: + * - coerceNumericStrings: Boolean, default false. + * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, + * "50l" as a long + * - preferArraysOverLists: Boolean, default false + * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or + * NBTTagIntArray accordingly + * + * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] + * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. + */ + parse(nbt: any, options: org.mozilla.javascript.NativeObject | null | undefined): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + toObject(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound): org.mozilla.javascript.NativeObject; + toArray(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagList): org.mozilla.javascript.NativeArray; + new(): com.chattriggers.ctjs.api.inventory.nbt.NBT; + } + interface NBT { + /** + * Creates a new [NBTBase] from the given [nbt] + * + * @param nbt the value to convert to NBT + * @param options optional argument to allow refinement of the NBT data. + * Possible options include: + * - coerceNumericStrings: Boolean, default false. + * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, + * "50l" as a long + * - preferArraysOverLists: Boolean, default false + * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or + * NBTTagIntArray accordingly + * + * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] + * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. + */ + parse(nbt: any): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + /** + * Creates a new [NBTBase] from the given [nbt] + * + * @param nbt the value to convert to NBT + * @param options optional argument to allow refinement of the NBT data. + * Possible options include: + * - coerceNumericStrings: Boolean, default false. + * E.g. "10b" as a byte, "20s" as a short, "30f" as a float, "40d" as a double, + * "50l" as a long + * - preferArraysOverLists: Boolean, default false + * E.g. a list with all bytes or integers will be converted to an NBTTagByteArray or + * NBTTagIntArray accordingly + * + * @return [NBTTagCompound] if [nbt] is an object, [NBTTagList] if [nbt] + * is an array and preferArraysOverLists is false, or [NBTBase] otherwise. + */ + parse(nbt: any, options: org.mozilla.javascript.NativeObject | null | undefined): com.chattriggers.ctjs.api.inventory.nbt.NBTBase; + toObject(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound): org.mozilla.javascript.NativeObject; + toArray(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTTagList): org.mozilla.javascript.NativeArray; + new(): com.chattriggers.ctjs.api.inventory.nbt.NBT; + } + } + const Slot: { + new(mcValue: net.minecraft.world.inventory.Slot): com.chattriggers.ctjs.api.inventory.Slot; + } + interface Slot extends com.chattriggers.ctjs.api.CTWrapper { + getIndex(): number; + getDisplayX(): number; + getDisplayY(): number; + getInventory(): com.chattriggers.ctjs.api.inventory.Inventory; + getItem(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + isEnabled(): boolean; + } + const Inventory: { + new(inventory: net.minecraft.world.Container): com.chattriggers.ctjs.api.inventory.Inventory; + new(container: net.minecraft.client.gui.screens.inventory.AbstractContainerScreen): com.chattriggers.ctjs.api.inventory.Inventory; + } + interface Inventory { + getInventory(): net.minecraft.world.Container; + getScreen(): net.minecraft.client.gui.screens.inventory.AbstractContainerScreen | null | undefined; + /** + * Gets the total size of the Inventory. + * The player's inventory size is 36, 27 for the main inventory, plus 9 for the hotbar. + * A single chest's size would be 63, because it also counts the player's inventory. + * + * @return the size of the Inventory + */ + getSize(): number; + /** + * Gets the item in any slot, starting from 0. + * + * @param slot the slot index + * @return the [Item] in that slot, or null if there is no item + */ + getStackInSlot(slot: number): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * Returns the window identifier number of this Inventory. + * This Inventory must be backed by a HandledScreen [isScreen] + * + * @return the window id + */ + getWindowId(): number; + /** + * Checks if an item can be shift clicked into a certain slot, i.e. coal into the bottom of a furnace. + * + * @param slot the slot index + * @param item the item for checking + * @return whether it can be shift clicked in + */ + isItemValidForSlot(slot: number, item: com.chattriggers.ctjs.api.inventory.Item): boolean; + /** + * @return a list of the [Item]s in an inventory + */ + getItems(): Array; + /** + * Checks whether the inventory contains the given item. + * + * @param item the item to check for + * @return whether the inventory contains the item + */ + contains(item: com.chattriggers.ctjs.api.inventory.Item): boolean; + /** + * Checks whether the inventory contains an item with ID. + * + * @param id the ID of the item to match + * @return whether the inventory contains an item with ID + */ + contains(id: number): boolean; + /** + * Gets the index of any item in the inventory, and returns the slot number. + * Returns -1 if the inventory does not contain the item. + * + * @param item the item to check for + * @return the index of the given item + */ + indexOf(item: com.chattriggers.ctjs.api.inventory.Item): number; + /** + * Gets the index of any item in the inventory with matching ID, and returns the slot number. + * Returns -1 if the inventory does not contain the item. + * + * @param id the item ID to check for + * @return the index of the given item with ID + */ + indexOf(id: number): number; + /** + * Returns true if this Inventory wraps a [HandledScreen] object + * rather than an [MCInventory] object + * + * @return if this is a container + */ + isScreen(): boolean; + /** + * Shorthand for [ClickAction] + * + * @param slot the slot to click on + * @param button the mouse button to use. "LEFT" by default. + * @param shift whether shift is being held. False by default + * @return this inventory for method chaining + */ + click(slot: number): com.chattriggers.ctjs.api.inventory.Inventory; + /** + * Shorthand for [ClickAction] + * + * @param slot the slot to click on + * @param button the mouse button to use. "LEFT" by default. + * @param shift whether shift is being held. False by default + * @return this inventory for method chaining + */ + click(slot: number, shift: boolean): com.chattriggers.ctjs.api.inventory.Inventory; + /** + * Shorthand for [ClickAction] + * + * @param slot the slot to click on + * @param button the mouse button to use. "LEFT" by default. + * @param shift whether shift is being held. False by default + * @return this inventory for method chaining + */ + click(slot: number, shift: boolean, button: string): com.chattriggers.ctjs.api.inventory.Inventory; + /** + * Shorthand for [DropAction] + * + * @param slot the slot to drop + * @param ctrl whether control should be held (drops whole stack) + * @return this inventory for method chaining + */ + drop(slot: number, ctrl: boolean): com.chattriggers.ctjs.api.inventory.Inventory; + /** + * Shorthand for [DragAction] + * + * @param type what click type this should be: LEFT, MIDDLE, RIGHT + * @param slots all of the slots to drag onto + * @return this inventory for method chaining + */ + drag(type: string, slots: number): com.chattriggers.ctjs.api.inventory.Inventory; + /** + * Gets the name of the inventory, simply "container" for most chest-like blocks. + * + * @return the name of the inventory + */ + getName(): com.chattriggers.ctjs.api.message.TextComponent; + getClassName(): string; + } + const Item: { + new(mcValue: net.minecraft.world.item.ItemStack): com.chattriggers.ctjs.api.inventory.Item; + new(type: com.chattriggers.ctjs.api.inventory.ItemType): com.chattriggers.ctjs.api.inventory.Item; + } + interface Item extends com.chattriggers.ctjs.api.CTWrapper { + getType(): com.chattriggers.ctjs.api.inventory.ItemType; + getStackSize(): number; + setStackSize(size: number): com.chattriggers.ctjs.api.inventory.Item; + getEnchantments(): Map | null | undefined, number>; + isEnchantable(): boolean; + isEnchanted(): boolean; + canPlaceOn(pos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; + canPlaceOn(block: com.chattriggers.ctjs.api.world.block.Block): boolean; + canHarvest(pos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; + canHarvest(block: com.chattriggers.ctjs.api.world.block.Block): boolean; + getDurability(): number; + getMaxDamage(): number; + getDamage(): number; + isDamageable(): boolean; + getName(): string; + setName(name: com.chattriggers.ctjs.api.message.TextComponent | null | undefined): com.chattriggers.ctjs.api.inventory.Item; + resetName(): void; + getLore(): Array; + getLore(advanced: boolean): Array; + setLore(lore: Array): void; + resetLore(): void; + getNBT(): net.minecraft.core.component.DataComponentMap; + draw(): void; + draw(x: number): void; + draw(x: number, y: number): void; + draw(x: number, y: number, scale: number): void; + } + const ItemType: { + new(mcValue: net.minecraft.world.item.Item): com.chattriggers.ctjs.api.inventory.ItemType; + new(itemName: string): com.chattriggers.ctjs.api.inventory.ItemType; + new(id: number): com.chattriggers.ctjs.api.inventory.ItemType; + new(blockType: com.chattriggers.ctjs.api.world.block.BlockType): com.chattriggers.ctjs.api.inventory.ItemType; + } + interface ItemType extends com.chattriggers.ctjs.api.CTWrapper { + getName(): string; + getNameComponent(): com.chattriggers.ctjs.api.message.TextComponent; + getId(): number; + getTranslationKey(): string; + getRegistryName(): string; + asItem(): com.chattriggers.ctjs.api.inventory.Item; + } + const ItemType$Companion: { + fromMC(mcValue: net.minecraft.world.item.Item): com.chattriggers.ctjs.api.inventory.ItemType | null | undefined; + new(): com.chattriggers.ctjs.api.inventory.ItemType$Companion; + } + interface ItemType$Companion { + fromMC(mcValue: net.minecraft.world.item.Item): com.chattriggers.ctjs.api.inventory.ItemType | null | undefined; + new(): com.chattriggers.ctjs.api.inventory.ItemType$Companion; + } + const Item$Companion: { + fromMC(mcValue: net.minecraft.world.item.ItemStack): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + new(): com.chattriggers.ctjs.api.inventory.Item$Companion; + } + interface Item$Companion { + fromMC(mcValue: net.minecraft.world.item.ItemStack): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + new(): com.chattriggers.ctjs.api.inventory.Item$Companion; + } + } + namespace message { + const TextComponent: { + /** + * Creates an empty [TextComponent] with a single, unstyled, empty part. + */ + new(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Creates a [TextComponent] from a variable number of objects. These + * objects can be: + * - A plain string possibly containing formatting codes. If the string has + * formatting codes, it will be split into different parts accordingly + * - A [TextComponent], whose parts will be appended in sequence to this + * [TextComponent]'s list of parts + * - A [Text] object, which acts as a single part + * - A JS object, which must contain a "text" key, and can optionally contain + * any of the [Style] keys: + * - color: a [TextColor] or string format of a [TextColor], [Formatting], or a hex value + * - bold: boolean + * - italic: boolean + * - underline: boolean + * - strikethrough: boolean + * - obfuscated: boolean + * - clickEvent: object with { action: [ClickEvent.Action] or string format of a [ClickEvent.Action], value: string or null } + * - hoverEvent: object with { action: [HoverEvent.Action], string format of a [HoverEvent.Action], or null, value: string or null } + * - insertion: string or null + * - font: string format of an [net.minecraft.util.Identifier] + * + * @see Style + */ + new(parts: any): com.chattriggers.ctjs.api.message.TextComponent; + } + interface TextComponent extends net.minecraft.network.chat.Component, kotlin.collections.Iterable { + /** + * Returns the text of all parts concatenated without formatting codes. + */ + getUnformattedText(): string; + /** + * Returns the text of all parts concatenated with formatting codes. + */ + getFormattedText(): string; + getSize(): number; + /** + * If this [TextComponent] is recursive, sending this instance (via [chat] or + * [actionBar]) may trigger other `chat` triggers as if it had been received by + * the server. [TextComponent]s are non-recursive by default. + * + * @return true if the message can trigger other triggers. + */ + isRecursive(): boolean; + /** + * Get the chat line ID of this message, if it exists. The chat line can be used + * to easily edit or delete a message later via [ChatLib.editChat] and + * [ChatLib.deleteChat]. + * + * @return the chat line ID of the message, or -1 if this [TextComponent] does + * not have an associated chat line ID. + */ + getChatLineId(): number; + /** + * @return a new [TextComponent] with the given chat line id + */ + withChatLineId(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * @return a new [TextComponent] with the given chat line id + */ + withChatLineId(id: number): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets whether the message can trigger other triggers. + * + * @param recursive true if message can trigger other triggers. + */ + withRecursive(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets whether the message can trigger other triggers. + * + * @param recursive true if message can trigger other triggers. + */ + withRecursive(recursive: boolean): com.chattriggers.ctjs.api.message.TextComponent; + /** + * @return a new [TextComponent] with the specified [value] appended to the end. + * This accepts all types of objects that the vararg constructor does. + */ + withText(value: any): com.chattriggers.ctjs.api.message.TextComponent; + /** + * @return a new [TextComponent] with the specified [value] inserted at [index]. + * This accepts all types of objects that the vararg constructor does. + */ + withTextAt(index: number, value: any): com.chattriggers.ctjs.api.message.TextComponent; + /** + * @return a new [TextComponent] without the part at [index] + */ + withoutTextAt(index: number): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Edits this text component, replacing it with the given [newText]. Note that + * this compares [TextComponent]s based on [formattedText]; if an exact match + * is needed, use [ChatLib.editChat] in conjunction with a chat line ID. + */ + edit(newText: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Edits this text component, replacing it with a new [TextComponent] from the + * given [parts]. Note that this compares [TextComponent]s based on + * [formattedText]; if an exact match is needed, use [ChatLib.editChat] in + * conjunction with a chat line ID. + */ + edit(parts: any): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sends this [TextComponent] to the players chat. + * + * Note that this is purely client-side, and will not be sent to the server. If [isRecursive], + * will trigger any matching `chat` triggers + * + * @see ChatLib.chat + * @see ChatLib.say + */ + chat(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sends this [TextComponent] to the players action bar. + * + * If [isRecursive], will trigger any matching `actionBar` triggers + * + * @see ChatLib.actionBar + */ + actionBar(): com.chattriggers.ctjs.api.message.TextComponent; + contains(element: org.mozilla.javascript.NativeObject): boolean; + containsAll(elements: Array): boolean; + get(index: number): org.mozilla.javascript.NativeObject; + indexOf(element: org.mozilla.javascript.NativeObject): number; + isEmpty(): boolean; + } + const ChatLib: { + /** + * Prints text in the chat. + * The text can be a String or a [TextComponent] + * + * @param text the text to be printed + */ + chat(text: any | null | undefined): void; + /** + * Shows text in the action bar. + * The text can be a String or a [TextComponent] + * + * @param text the text to show + */ + actionBar(text: any | null | undefined): void; + /** + * Simulates a chat message to be caught by other triggers for testing. + * The text can be a String or a [TextComponent] + * + * @param text The message to simulate + */ + simulateChat(text: any | null | undefined): void; + /** + * Replaces the easier to type '&' color codes with proper color codes in a string. + * + * @param message The string to add color codes to + * @return the formatted message + */ + addColor(message: string | null | undefined): string; + /** + * Says chat message. + * This message is actually sent to the server. + * + * @param text the message to be sent + */ + say(text: string): void; + /** + * Runs a command. + * + * @param text the command to run, without the leading slash (Ex. "help") + * @param clientSide should the command be run as a client side command + */ + command(text: string): void; + /** + * Runs a command. + * + * @param text the command to run, without the leading slash (Ex. "help") + * @param clientSide should the command be run as a client side command + */ + command(text: string, clientSide: boolean): void; + /** + * Clear all chat messages + */ + clearChat(): void; + /** + * Get a message that will be perfectly one line of chat, + * the separator repeated as many times as necessary. + * The separator defaults to "-" + * + * @param separator the message to split chat with + * @return the message that would split chat + */ + getChatBreak(): string; + /** + * Get a message that will be perfectly one line of chat, + * the separator repeated as many times as necessary. + * The separator defaults to "-" + * + * @param separator the message to split chat with + * @return the message that would split chat + */ + getChatBreak(separator: string): string; + /** + * Gets the width of Minecraft's chat + * + * @return the width of chat + */ + getChatWidth(): number; + /** + * Remove all formatting + * + * @param text the string to un-format + * @return the unformatted string + */ + removeFormatting(text: string): string; + /** + * Replaces Minecraft formatted text with normal formatted text + * + * @param text the formatted string + * @return the unformatted string + */ + replaceFormatting(text: string): string; + /** + * Get a message that will be perfectly centered in chat. + * + * @param text the text to be centered + * @return the centered message + */ + getCenteredText(text: string): string; + /** + * Copies the given String to the user's clipboard + * + * @param text the text to copy + */ + copyToClipboard(text: string): void; + /** + * Edits an already sent chat message matched by [regexp]. + * + * @param regexp the regex object to match to the message + * @param replacements the new message(s) to be put in replace of the old one + */ + editChat(regexp: org.mozilla.javascript.regexp.NativeRegExp, replacements: any): void; + /** + * Edits an already sent chat message by the text of the chat + * + * @param toReplace the unformatted text of the message to be replaced + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(toReplace: string, replacements: any): void; + /** + * Edits an already sent chat message by the [TextComponent] + * + * @param toReplace the message to be replaced + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(toReplace: com.chattriggers.ctjs.api.message.TextComponent, replacements: any): void; + /** + * Edits an already sent chat message by its chat line id + * + * @param chatLineId the chat line id of the message to be replaced + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(chatLineId: number, replacements: any): void; + /** + * Edits an already sent chat message by given a callback that receives + * [TextComponent] instances + * + * @param matcher a function that accepts a [TextComponent] and returns a boolean + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(matcher: kotlin.Function1, replacements: any): void; + /** + * Deletes an already sent chat message matching [regexp]. + * + * @param regexp the regex object to match to the message + */ + deleteChat(regexp: org.mozilla.javascript.regexp.NativeRegExp): void; + /** + * Deletes an already sent chat message by the text of the chat + * + * @param toDelete the unformatted text of the message to be deleted + */ + deleteChat(toDelete: string): void; + /** + * Deletes an already sent chat message by the [TextComponent] + * + * @param toDelete the message to be deleted + */ + deleteChat(toDelete: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Deletes an already sent chat message by its chat line id + * + * @param chatLineId the chat line id of the message to be deleted + */ + deleteChat(chatLineId: number): void; + /** + * Deletes an already sent chat message given a callback that receives + * [TextComponent] instances + * + * @param matcher a function that accepts a [TextComponent] and returns a boolean + */ + deleteChat(matcher: kotlin.Function1): void; + /** + * Gets the previous 1000 lines of chat + * + * @return A list of the last 1000 chat lines + */ + getChatLines(): Array; + /** + * Adds a message to the player's chat history. This allows the message to + * show up for the player when pressing the up/down keys while in the chat gui + * + * @param index the index to insert the message + * @param message the message to add to chat history + */ + addToSentMessageHistory(message: string): void; + /** + * Adds a message to the player's chat history. This allows the message to + * show up for the player when pressing the up/down keys while in the chat gui + * + * @param index the index to insert the message + * @param message the message to add to chat history + */ + addToSentMessageHistory(index: number, message: string): void; + new(): com.chattriggers.ctjs.api.message.ChatLib; + } + interface ChatLib { + /** + * Prints text in the chat. + * The text can be a String or a [TextComponent] + * + * @param text the text to be printed + */ + chat(text: any | null | undefined): void; + /** + * Shows text in the action bar. + * The text can be a String or a [TextComponent] + * + * @param text the text to show + */ + actionBar(text: any | null | undefined): void; + /** + * Simulates a chat message to be caught by other triggers for testing. + * The text can be a String or a [TextComponent] + * + * @param text The message to simulate + */ + simulateChat(text: any | null | undefined): void; + /** + * Replaces the easier to type '&' color codes with proper color codes in a string. + * + * @param message The string to add color codes to + * @return the formatted message + */ + addColor(message: string | null | undefined): string; + /** + * Says chat message. + * This message is actually sent to the server. + * + * @param text the message to be sent + */ + say(text: string): void; + /** + * Runs a command. + * + * @param text the command to run, without the leading slash (Ex. "help") + * @param clientSide should the command be run as a client side command + */ + command(text: string): void; + /** + * Runs a command. + * + * @param text the command to run, without the leading slash (Ex. "help") + * @param clientSide should the command be run as a client side command + */ + command(text: string, clientSide: boolean): void; + /** + * Clear all chat messages + */ + clearChat(): void; + /** + * Get a message that will be perfectly one line of chat, + * the separator repeated as many times as necessary. + * The separator defaults to "-" + * + * @param separator the message to split chat with + * @return the message that would split chat + */ + getChatBreak(): string; + /** + * Get a message that will be perfectly one line of chat, + * the separator repeated as many times as necessary. + * The separator defaults to "-" + * + * @param separator the message to split chat with + * @return the message that would split chat + */ + getChatBreak(separator: string): string; + /** + * Gets the width of Minecraft's chat + * + * @return the width of chat + */ + getChatWidth(): number; + /** + * Remove all formatting + * + * @param text the string to un-format + * @return the unformatted string + */ + removeFormatting(text: string): string; + /** + * Replaces Minecraft formatted text with normal formatted text + * + * @param text the formatted string + * @return the unformatted string + */ + replaceFormatting(text: string): string; + /** + * Get a message that will be perfectly centered in chat. + * + * @param text the text to be centered + * @return the centered message + */ + getCenteredText(text: string): string; + /** + * Copies the given String to the user's clipboard + * + * @param text the text to copy + */ + copyToClipboard(text: string): void; + /** + * Edits an already sent chat message matched by [regexp]. + * + * @param regexp the regex object to match to the message + * @param replacements the new message(s) to be put in replace of the old one + */ + editChat(regexp: org.mozilla.javascript.regexp.NativeRegExp, replacements: any): void; + /** + * Edits an already sent chat message by the text of the chat + * + * @param toReplace the unformatted text of the message to be replaced + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(toReplace: string, replacements: any): void; + /** + * Edits an already sent chat message by the [TextComponent] + * + * @param toReplace the message to be replaced + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(toReplace: com.chattriggers.ctjs.api.message.TextComponent, replacements: any): void; + /** + * Edits an already sent chat message by its chat line id + * + * @param chatLineId the chat line id of the message to be replaced + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(chatLineId: number, replacements: any): void; + /** + * Edits an already sent chat message by given a callback that receives + * [TextComponent] instances + * + * @param matcher a function that accepts a [TextComponent] and returns a boolean + * @param replacements the new message(s) to be put in place of the old one + */ + editChat(matcher: kotlin.Function1, replacements: any): void; + /** + * Deletes an already sent chat message matching [regexp]. + * + * @param regexp the regex object to match to the message + */ + deleteChat(regexp: org.mozilla.javascript.regexp.NativeRegExp): void; + /** + * Deletes an already sent chat message by the text of the chat + * + * @param toDelete the unformatted text of the message to be deleted + */ + deleteChat(toDelete: string): void; + /** + * Deletes an already sent chat message by the [TextComponent] + * + * @param toDelete the message to be deleted + */ + deleteChat(toDelete: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Deletes an already sent chat message by its chat line id + * + * @param chatLineId the chat line id of the message to be deleted + */ + deleteChat(chatLineId: number): void; + /** + * Deletes an already sent chat message given a callback that receives + * [TextComponent] instances + * + * @param matcher a function that accepts a [TextComponent] and returns a boolean + */ + deleteChat(matcher: kotlin.Function1): void; + /** + * Gets the previous 1000 lines of chat + * + * @return A list of the last 1000 chat lines + */ + getChatLines(): Array; + /** + * Adds a message to the player's chat history. This allows the message to + * show up for the player when pressing the up/down keys while in the chat gui + * + * @param index the index to insert the message + * @param message the message to add to chat history + */ + addToSentMessageHistory(message: string): void; + /** + * Adds a message to the player's chat history. This allows the message to + * show up for the player when pressing the up/down keys while in the chat gui + * + * @param index the index to insert the message + * @param message the message to add to chat history + */ + addToSentMessageHistory(index: number, message: string): void; + new(): com.chattriggers.ctjs.api.message.ChatLib; + } + const Chat: { + sendGradientMsg(prefix: string, startRgb: number, endRgb: number, messages: any): void; + new(): com.chattriggers.ctjs.api.message.Chat; + } + interface Chat { + sendGradientMsg(prefix: string, startRgb: number, endRgb: number, messages: any): void; + new(): com.chattriggers.ctjs.api.message.Chat; + } + } + namespace world { + namespace block { + const BlockType: { + new(mcValue: net.minecraft.world.level.block.Block): com.chattriggers.ctjs.api.world.block.BlockType; + new(block: com.chattriggers.ctjs.api.world.block.BlockType): com.chattriggers.ctjs.api.world.block.BlockType; + new(blockName: string): com.chattriggers.ctjs.api.world.block.BlockType; + new(blockID: number): com.chattriggers.ctjs.api.world.block.BlockType; + new(item: com.chattriggers.ctjs.api.inventory.Item): com.chattriggers.ctjs.api.world.block.BlockType; + } + interface BlockType extends com.chattriggers.ctjs.api.CTWrapper { + /** + * Returns a [Block] based on this block and the + * provided BlockPos + * + * @param blockPos the block position + * @return a [Block] object + */ + withBlockPos(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; + getID(): number; + /** + * Gets the block's registry name. + * Example: minecraft:oak_planks + * + * @return the block's registry name + */ + getRegistryName(): string; + /** + * Gets the block's translation key. + * Example: block.minecraft.oak_planks + * + * @return the block's translation key + */ + getTranslationKey(): string; + /** + * Gets the block's localized name. + * Example: Wooden Planks + * + * @return the block's localized name + */ + getName(): string; + getLightValue(): number; + getDefaultState(): net.minecraft.world.level.block.state.BlockState; + canProvidePower(): boolean; + isTranslucent(): boolean; + } + const BlockPos: { + new(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.BlockPos; + new(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.BlockPos; + new(pos: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.world.block.BlockPos; + new(pos: net.minecraft.core.BlockPos): com.chattriggers.ctjs.api.world.block.BlockPos; + new(source: com.chattriggers.ctjs.api.entity.Entity): com.chattriggers.ctjs.api.world.block.BlockPos; + } + interface BlockPos extends com.chattriggers.ctjs.api.vec.Vec3i, com.chattriggers.ctjs.api.CTWrapper { + up(): com.chattriggers.ctjs.api.world.block.BlockPos; + up(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; + down(): com.chattriggers.ctjs.api.world.block.BlockPos; + down(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; + north(): com.chattriggers.ctjs.api.world.block.BlockPos; + north(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; + south(): com.chattriggers.ctjs.api.world.block.BlockPos; + south(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; + east(): com.chattriggers.ctjs.api.world.block.BlockPos; + east(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; + west(): com.chattriggers.ctjs.api.world.block.BlockPos; + west(n: number): com.chattriggers.ctjs.api.world.block.BlockPos; + offset(facing: com.chattriggers.ctjs.api.world.block.BlockFace): com.chattriggers.ctjs.api.world.block.BlockPos; + offset(facing: com.chattriggers.ctjs.api.world.block.BlockFace, n: number): com.chattriggers.ctjs.api.world.block.BlockPos; + distanceTo(other: com.chattriggers.ctjs.api.world.block.BlockPos): number; + toVec3d(): net.minecraft.world.phys.Vec3; + } + const BlockFace: { + DOWN: com.chattriggers.ctjs.api.world.block.BlockFace; + UP: com.chattriggers.ctjs.api.world.block.BlockFace; + NORTH: com.chattriggers.ctjs.api.world.block.BlockFace; + SOUTH: com.chattriggers.ctjs.api.world.block.BlockFace; + WEST: com.chattriggers.ctjs.api.world.block.BlockFace; + EAST: com.chattriggers.ctjs.api.world.block.BlockFace; + Plane: typeof com.chattriggers.ctjs.api.world.block.BlockFace$Plane; + AxisDirection: typeof com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; + Axis: typeof com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace; + } + interface BlockFace extends kotlin.Enum, net.minecraft.util.StringRepresentable, com.chattriggers.ctjs.api.CTWrapper { + getAxisDirection(): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; + getAxis(): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + getDirectionVec(): com.chattriggers.ctjs.api.vec.Vec3i; + getOpposite(): com.chattriggers.ctjs.api.world.block.BlockFace; + getOffsetX(): number; + getOffsetY(): number; + getOffsetZ(): number; + rotateAround(axis: com.chattriggers.ctjs.api.world.block.BlockFace$Axis): com.chattriggers.ctjs.api.world.block.BlockFace; + rotateX(): com.chattriggers.ctjs.api.world.block.BlockFace; + rotateY(): com.chattriggers.ctjs.api.world.block.BlockFace; + rotateZ(): com.chattriggers.ctjs.api.world.block.BlockFace; + } + const BlockFace$AxisDirection: { + POSITIVE: com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; + NEGATIVE: com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; + } + interface BlockFace$AxisDirection extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { + getOffset(): number; + } + const BlockFace$AxisDirection$Companion: { + fromMC(axisDirection: net.minecraft.core.Direction$AxisDirection): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; + new(): unknown; + } + interface BlockFace$AxisDirection$Companion { + fromMC(axisDirection: net.minecraft.core.Direction$AxisDirection): com.chattriggers.ctjs.api.world.block.BlockFace$AxisDirection; + new(): unknown; + } + const BlockFace$Axis: { + X: com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + Y: com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + Z: com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + } + interface BlockFace$Axis extends kotlin.Enum, net.minecraft.util.StringRepresentable, com.chattriggers.ctjs.api.CTWrapper { + getPlane(): com.chattriggers.ctjs.api.world.block.BlockFace$Plane; + isHorizontal(): boolean; + isVertical(): boolean; + } + const BlockFace$Plane: { + HORIZONTAL: com.chattriggers.ctjs.api.world.block.BlockFace$Plane; + VERTICAL: com.chattriggers.ctjs.api.world.block.BlockFace$Plane; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.world.block.BlockFace$Plane; + } + interface BlockFace$Plane extends kotlin.Enum, kotlin.collections.Iterable { + facings(): Array; + } + const BlockFace$Axis$Companion: { + fromMC(axis: net.minecraft.core.Direction$Axis): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + new(): unknown; + } + interface BlockFace$Axis$Companion { + fromMC(axis: net.minecraft.core.Direction$Axis): com.chattriggers.ctjs.api.world.block.BlockFace$Axis; + new(): unknown; + } + const BlockFace$Companion: { + fromMC(facing: net.minecraft.core.Direction): com.chattriggers.ctjs.api.world.block.BlockFace; + new(): com.chattriggers.ctjs.api.world.block.BlockFace$Companion; + } + interface BlockFace$Companion { + fromMC(facing: net.minecraft.core.Direction): com.chattriggers.ctjs.api.world.block.BlockFace; + new(): com.chattriggers.ctjs.api.world.block.BlockFace$Companion; + } + const Block: { + new(type: com.chattriggers.ctjs.api.world.block.BlockType, pos: com.chattriggers.ctjs.api.world.block.BlockPos, face: com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined): com.chattriggers.ctjs.api.world.block.Block; + } + interface Block { + getType(): com.chattriggers.ctjs.api.world.block.BlockType; + getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; + getFace(): com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined; + getX(): number; + getY(): number; + getZ(): number; + withType(type: com.chattriggers.ctjs.api.world.block.BlockType): com.chattriggers.ctjs.api.world.block.Block; + withPos(pos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; + /** + * Narrows this block to reference a certain face. Used by + * [Player.lookingAt] to specify the block face + * being looked at. + */ + withFace(face: com.chattriggers.ctjs.api.world.block.BlockFace): com.chattriggers.ctjs.api.world.block.Block; + getState(): net.minecraft.world.level.block.state.BlockState | null | undefined; + isEmittingPower(): boolean; + isEmittingPower(face: com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined): boolean; + getEmittingPower(): number; + getEmittingPower(face: com.chattriggers.ctjs.api.world.block.BlockFace | null | undefined): number; + isReceivingPower(): boolean; + getReceivingPower(): number; + /** + * Checks whether the block can be mined with the tool in the player's hand + * + * @return whether the block can be mined + */ + canBeHarvested(): boolean; + canBeHarvestedWith(item: com.chattriggers.ctjs.api.inventory.Item): boolean; + } + } + namespace pathfinding { + const HypixelManager: { + new(): com.chattriggers.ctjs.api.world.pathfinding.HypixelManager; + } + interface HypixelManager { + new(): com.chattriggers.ctjs.api.world.pathfinding.HypixelManager; + init(): void; + onDisconnect(): void; + } + const NativeStateEncoder: { + flagsForStateId(stateId: number): number; + flagsForState(state: net.minecraft.world.level.block.state.BlockState): number; + flagsShortForState(state: net.minecraft.world.level.block.state.BlockState): number; + flagsShortForStateId(stateId: number): number; + new(): com.chattriggers.ctjs.api.world.pathfinding.NativeStateEncoder; + } + interface NativeStateEncoder { + flagsForStateId(stateId: number): number; + flagsForState(state: net.minecraft.world.level.block.state.BlockState): number; + flagsShortForState(state: net.minecraft.world.level.block.state.BlockState): number; + flagsShortForStateId(stateId: number): number; + new(): com.chattriggers.ctjs.api.world.pathfinding.NativeStateEncoder; + } + const NativeVoxelFlags: { + new(): com.chattriggers.ctjs.api.world.pathfinding.NativeVoxelFlags; + } + interface NativeVoxelFlags { + new(): com.chattriggers.ctjs.api.world.pathfinding.NativeVoxelFlags; + getPASSABLE(): number; + getSOLID(): number; + getPASSABLE_FLY(): number; + getBLOCKING_WALL(): number; + getFLUID(): number; + getSLAB_BOTTOM(): number; + getSLAB_TOP(): number; + getFENCE_LIKE(): number; + getSTAIRS_BOTTOM(): number; + getCARPET_LIKE(): number; + getETHER_PASSABLE(): number; + getETHER_TELEPORT_CLEAR(): number; + getETHER_FEET_BLOCKER(): number; + getETHER_FAKE_FULL_BLOCKER(): number; + } + const WorldSerializer: { + new(): com.chattriggers.ctjs.api.world.pathfinding.WorldSerializer; + } + interface WorldSerializer { + new(): com.chattriggers.ctjs.api.world.pathfinding.WorldSerializer; + save(name: string, chunks: Map): void; + load(name: string): java.util.concurrent.ConcurrentHashMap | null | undefined; + } + const CachedChunk: { + minY: number; + maxY: number; + ready: boolean; + new(minY: number, maxY: number): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk; + } + interface CachedChunk { + getFlags(localX: number, y: number, localZ: number): number; + setFlags(localX: number, y: number, localZ: number, flags: number): void; + hasSection(index: number): boolean; + copySectionFlags(index: number, dest: Array, destOffset: number): void; + setSection(sectionIndex: number, data: Array): void; + } + const CachedChunk$Companion: { + AIR_FLAGS: number; + new(): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk$Companion; + } + interface CachedChunk$Companion { + AIR_FLAGS: number; + new(): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk$Companion; + } + const EtherwarpLandingCandidatesResult: { + goals: Array; + centers: kotlin.DoubleArray; + new(goals: Array, centers: kotlin.DoubleArray): com.chattriggers.ctjs.api.world.pathfinding.EtherwarpLandingCandidatesResult; + } + interface EtherwarpLandingCandidatesResult { + } + const NativeEtherwarpResult: { + path: Array; + angles: kotlin.FloatArray; + timeMs: number; + nodesExplored: number; + nanosecondsPerNode: number; + new(path: Array, angles: kotlin.FloatArray, timeMs: number, nodesExplored: number, nanosecondsPerNode: number): com.chattriggers.ctjs.api.world.pathfinding.NativeEtherwarpResult; + } + interface NativeEtherwarpResult { + } + const NativePathfinderBridge: { + NativePathSearchRequest: typeof com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest; + NativeEtherwarpSearchRequest: typeof com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest; + isAvailable(): boolean; + getLastError(): string | null | undefined; + setWorld(worldKey: string, minY: number, maxY: number): void; + clearWorld(): void; + upsertChunk(chunkX: number, chunkZ: number, minY: number, maxY: number, sectionMask: number, sectionFlags: Array): void; + upsertChunks(metadata: Array, sectionMasks: Array, sectionFlags: Array>): void; + applyBlockUpdates(updates: Array): void; + findPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativePathResult | null | undefined; + findEtherwarpPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativeEtherwarpResult | null | undefined; + cancelSearch(): void; + new(): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge; + } + interface NativePathfinderBridge { + isAvailable(): boolean; + getLastError(): string | null | undefined; + setWorld(worldKey: string, minY: number, maxY: number): void; + clearWorld(): void; + upsertChunk(chunkX: number, chunkZ: number, minY: number, maxY: number, sectionMask: number, sectionFlags: Array): void; + upsertChunks(metadata: Array, sectionMasks: Array, sectionFlags: Array>): void; + applyBlockUpdates(updates: Array): void; + findPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativePathResult | null | undefined; + findEtherwarpPath(request: com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest): com.chattriggers.ctjs.api.world.pathfinding.NativeEtherwarpResult | null | undefined; + cancelSearch(): void; + new(): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge; + } + const NativePathfinderBridge$NativePathSearchRequest: { + new(startPoints: Array, endPoints: Array, isFly: boolean, maxIterations: number, heuristicWeight: number, nonPrimaryStartPenalty: number, moveOrderOffset: number, avoidMeta: Array, avoidPenalty: kotlin.DoubleArray): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest; + } + interface NativePathfinderBridge$NativePathSearchRequest { + getStartPoints(): Array; + getEndPoints(): Array; + isFly(): boolean; + getMaxIterations(): number; + getHeuristicWeight(): number; + getNonPrimaryStartPenalty(): number; + getMoveOrderOffset(): number; + getAvoidMeta(): Array; + getAvoidPenalty(): kotlin.DoubleArray; + component1(): Array; + component2(): Array; + component3(): boolean; + component4(): number; + component5(): number; + component6(): number; + component7(): number; + component8(): Array; + component9(): kotlin.DoubleArray; + copy(startPoints: Array, endPoints: Array, isFly: boolean, maxIterations: number, heuristicWeight: number, nonPrimaryStartPenalty: number, moveOrderOffset: number, avoidMeta: Array, avoidPenalty: kotlin.DoubleArray): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativePathSearchRequest; + } + const NativePathResult: { + path: Array; + keyPath: Array; + timeMs: number; + nodesExplored: number; + nanosecondsPerNode: number; + selectedStartIndex: number; + pathFlags: Array; + keyNodeFlags: Array; + keyNodeMetrics: Array; + pathSignature: string; + new(path: Array, keyPath: Array, timeMs: number, nodesExplored: number, nanosecondsPerNode: number, selectedStartIndex: number, pathFlags: Array, keyNodeFlags: Array, keyNodeMetrics: Array, pathSignature: string): com.chattriggers.ctjs.api.world.pathfinding.NativePathResult; + } + interface NativePathResult { + } + const NativePathfinderBridge$NativeEtherwarpSearchRequest: { + new(goalX: number, goalY: number, goalZ: number, startEyeX: number, startEyeY: number, startEyeZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest; + } + interface NativePathfinderBridge$NativeEtherwarpSearchRequest { + getGoalX(): number; + getGoalY(): number; + getGoalZ(): number; + getStartEyeX(): number; + getStartEyeY(): number; + getStartEyeZ(): number; + getMaxIterations(): number; + getThreadCount(): number; + getYawStep(): number; + getPitchStep(): number; + getNewNodeCost(): number; + getHeuristicWeight(): number; + getRayLength(): number; + getRewireEpsilon(): number; + getEyeHeight(): number; + component1(): number; + component2(): number; + component3(): number; + component4(): number; + component5(): number; + component6(): number; + component7(): number; + component8(): number; + component9(): number; + component10(): number; + component11(): number; + component12(): number; + component13(): number; + component14(): number; + component15(): number; + copy(goalX: number, goalY: number, goalZ: number, startEyeX: number, startEyeY: number, startEyeZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): com.chattriggers.ctjs.api.world.pathfinding.NativePathfinderBridge$NativeEtherwarpSearchRequest; + } + const PathManager: { + isSearching(): boolean; + findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number): boolean; + findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number): boolean; + findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number, isFly: boolean): boolean; + findPath(startPoints: Array>, endPoints: Array>): boolean; + findPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; + findPath(startPoints: Array>, endPoints: Array>, maxIterations: number, isFly: boolean): boolean; + findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array): boolean; + findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number): boolean; + findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number, isFly: boolean): boolean; + findFlyPath(startPoints: Array>, endPoints: Array>): boolean; + findFlyPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number, callback: java.lang.Runnable | null | undefined): boolean; + isFlyPositionClear(x: number, y: number, z: number): boolean; + isValidEtherwarpLanding(x: number, y: number, z: number): boolean; + getEtherwarpLandingCenter(x: number, y: number, z: number): kotlin.DoubleArray | null | undefined; + getEtherwarpLandingCandidates(anchorX: number, anchorY: number, anchorZ: number, radius: number, maxDistance: number, sortOriginX: number, sortOriginY: number, sortOriginZ: number): com.chattriggers.ctjs.api.world.pathfinding.EtherwarpLandingCandidatesResult | null | undefined; + getCurrentEtherwarpEyeHeight(): number; + getCurrentEtherwarpSneakOffset(): number; + cancelSearch(): void; + getPathArray(): Array; + getKeyNodesArray(): Array; + getEtherwarpPathArray(): Array; + getEtherwarpAnglesArray(): kotlin.FloatArray; + getPathFlagsArray(): Array; + getKeyNodeFlagsArray(): Array; + getKeyNodeMetricsArray(): Array; + getPathSignature(): string; + getPathFlagBits(): Array; + getEtherwarpVoxelFlagsAt(x: number, y: number, z: number): number; + isEtherwarpSupportSolid(flags: number): boolean; + getEtherwarpStandOffsetForFlags(flags: number): number; + isEtherwarpTeleportSpaceClearFlags(flags: number): boolean; + addTransientAvoidPoint(x: number, y: number, z: number): void; + addTransientAvoidPoint(x: number, y: number, z: number, radius: number): void; + addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number): void; + addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number, ttlSearches: number): void; + addTransientAvoidPoints(points: Array): void; + addTransientAvoidPoints(points: Array, radius: number): void; + addTransientAvoidPoints(points: Array, radius: number, penalty: number): void; + addTransientAvoidPoints(points: Array, radius: number, penalty: number, ttlSearches: number): void; + clearTransientAvoidPoints(): void; + getPathSize(): number; + getEtherwarpPathSize(): number; + getKeyNodeCount(): number; + getLastTimeMs(): number; + getEtherwarpLastTimeMs(): number; + getNodesExplored(): number; + getEtherwarpNodesExplored(): number; + getNanosecondsPerNode(): number; + getEtherwarpNanosecondsPerNode(): number; + getSelectedStartIndex(): number; + setSearchVariantSeed(seed: number): void; + getLastError(): string | null | undefined; + hasPath(): boolean; + hasEtherwarpPath(): boolean; + clear(): void; + new(): com.chattriggers.ctjs.api.world.pathfinding.PathManager; + } + interface PathManager { + isSearching(): boolean; + findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number): boolean; + findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number): boolean; + findPath(startX: number, startY: number, startZ: number, endX: number, endY: number, endZ: number, maxIterations: number, isFly: boolean): boolean; + findPath(startPoints: Array>, endPoints: Array>): boolean; + findPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; + findPath(startPoints: Array>, endPoints: Array>, maxIterations: number, isFly: boolean): boolean; + findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array): boolean; + findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number): boolean; + findPathMultipleGoals(startX: number, startY: number, startZ: number, endGoals: Array, maxIterations: number, isFly: boolean): boolean; + findFlyPath(startPoints: Array>, endPoints: Array>): boolean; + findFlyPath(startPoints: Array>, endPoints: Array>, maxIterations: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number): boolean; + findEtherwarpPath(goalX: number, goalY: number, goalZ: number, maxIterations: number, threadCount: number, yawStep: number, pitchStep: number, newNodeCost: number, heuristicWeight: number, rayLength: number, rewireEpsilon: number, eyeHeight: number, callback: java.lang.Runnable | null | undefined): boolean; + isFlyPositionClear(x: number, y: number, z: number): boolean; + isValidEtherwarpLanding(x: number, y: number, z: number): boolean; + getEtherwarpLandingCenter(x: number, y: number, z: number): kotlin.DoubleArray | null | undefined; + getEtherwarpLandingCandidates(anchorX: number, anchorY: number, anchorZ: number, radius: number, maxDistance: number, sortOriginX: number, sortOriginY: number, sortOriginZ: number): com.chattriggers.ctjs.api.world.pathfinding.EtherwarpLandingCandidatesResult | null | undefined; + getCurrentEtherwarpEyeHeight(): number; + getCurrentEtherwarpSneakOffset(): number; + cancelSearch(): void; + getPathArray(): Array; + getKeyNodesArray(): Array; + getEtherwarpPathArray(): Array; + getEtherwarpAnglesArray(): kotlin.FloatArray; + getPathFlagsArray(): Array; + getKeyNodeFlagsArray(): Array; + getKeyNodeMetricsArray(): Array; + getPathSignature(): string; + getPathFlagBits(): Array; + getEtherwarpVoxelFlagsAt(x: number, y: number, z: number): number; + isEtherwarpSupportSolid(flags: number): boolean; + getEtherwarpStandOffsetForFlags(flags: number): number; + isEtherwarpTeleportSpaceClearFlags(flags: number): boolean; + addTransientAvoidPoint(x: number, y: number, z: number): void; + addTransientAvoidPoint(x: number, y: number, z: number, radius: number): void; + addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number): void; + addTransientAvoidPoint(x: number, y: number, z: number, radius: number, penalty: number, ttlSearches: number): void; + addTransientAvoidPoints(points: Array): void; + addTransientAvoidPoints(points: Array, radius: number): void; + addTransientAvoidPoints(points: Array, radius: number, penalty: number): void; + addTransientAvoidPoints(points: Array, radius: number, penalty: number, ttlSearches: number): void; + clearTransientAvoidPoints(): void; + getPathSize(): number; + getEtherwarpPathSize(): number; + getKeyNodeCount(): number; + getLastTimeMs(): number; + getEtherwarpLastTimeMs(): number; + getNodesExplored(): number; + getEtherwarpNodesExplored(): number; + getNanosecondsPerNode(): number; + getEtherwarpNanosecondsPerNode(): number; + getSelectedStartIndex(): number; + setSearchVariantSeed(seed: number): void; + getLastError(): string | null | undefined; + hasPath(): boolean; + hasEtherwarpPath(): boolean; + clear(): void; + new(): com.chattriggers.ctjs.api.world.pathfinding.PathManager; + getFLAG_FLUID_FEET(): number; + getFLAG_FLUID_HEAD(): number; + getFLAG_LOW_HEADROOM(): number; + getFLAG_NEAR_EDGE(): number; + getFLAG_NEAR_WALL(): number; + getFLAG_STEP_UP_NEXT(): number; + getFLAG_DROP_NEXT(): number; + getFLAG_TIGHT_CORRIDOR(): number; + getETHERWARP_VOXEL_SOLID(): number; + getETHERWARP_VOXEL_FENCE_LIKE(): number; + getETHERWARP_VOXEL_TELEPORT_CLEAR(): number; + getETHERWARP_VOXEL_FEET_BLOCKER(): number; + } + const Swift: { + new(): com.chattriggers.ctjs.api.world.pathfinding.Swift; + } + interface Swift extends net.fabricmc.api.ClientModInitializer { + } + const Swift$Companion: { + executor: java.util.concurrent.ExecutorService; + new(): com.chattriggers.ctjs.api.world.pathfinding.Swift$Companion; + } + interface Swift$Companion { + executor: java.util.concurrent.ExecutorService; + new(): com.chattriggers.ctjs.api.world.pathfinding.Swift$Companion; + getCHUNKS_PER_TICK(): number; + getMAXIMUM_CACHED_CHUNKS(): number; + } + const WynncraftManager: { + new(): com.chattriggers.ctjs.api.world.pathfinding.WynncraftManager; + } + interface WynncraftManager { + new(): com.chattriggers.ctjs.api.world.pathfinding.WynncraftManager; + init(): void; + onDisconnect(): void; + } + const CachedWorld: { + getBlockFlags(x: number, y: number, z: number): number | null | undefined; + getChunk(x: number, z: number): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk | null | undefined; + new(): com.chattriggers.ctjs.api.world.pathfinding.CachedWorld; + } + interface CachedWorld { + getBlockFlags(x: number, y: number, z: number): number | null | undefined; + getChunk(x: number, z: number): com.chattriggers.ctjs.api.world.pathfinding.CachedChunk | null | undefined; + new(): com.chattriggers.ctjs.api.world.pathfinding.CachedWorld; + onPacketReceive(packet: net.minecraft.network.protocol.Packet): void; + processPendingChunks(): void; + saveAndClear(lobbyName: string): void; + load(lobbyName: string): void; + waitForLoad(): void; + clear(): void; + getCacheStats(): string; + setUnlimitedChunkCache(enabled: boolean): void; + setWorldKey(newWorldKey: string | null | undefined): void; + } + } + const Chunk: { + new(mcValue: net.minecraft.world.level.chunk.ChunkAccess): com.chattriggers.ctjs.api.world.Chunk; + } + interface Chunk extends com.chattriggers.ctjs.api.CTWrapper { + /** + * Gets the x position of the chunk + */ + getX(): number; + /** + * Gets the z position of the chunk + */ + getZ(): number; + /** + * Gets the minimum x coordinate of a block in the chunk + * + * @return the minimum x coordinate + */ + getMinBlockX(): number; + /** + * Gets the minimum z coordinate of a block in the chunk + * + * @return the minimum z coordinate + */ + getMinBlockZ(): number; + /** + * Gets every entity in this chunk + * + * @return the entity list + */ + getAllEntities(): Array; + /** + * Gets every entity in this chunk of a certain class + * + * @param clazz the class to filter for (Use `Java.type().class` to get this) + * @return the entity list + */ + getAllEntitiesOfType(clazz: java.lang.Class): Array; + /** + * Gets every block entity in this chunk + * + * @return the block entity list + */ + getAllBlockEntities(): Array; + /** + * Gets every block entity in this chunk of a certain class + * + * @param clazz the class to filter for (Use `Java.type().class` to get this) + * @return the block entity list + */ + getAllBlockEntitiesOfType(clazz: java.lang.Class): Array; + } + const PotionEffectType: { + new(type: net.minecraft.world.effect.MobEffect): com.chattriggers.ctjs.api.world.PotionEffectType; + } + interface PotionEffectType { + getType(): net.minecraft.world.effect.MobEffect; + /** + * The Int associated with this type + */ + getRawId(): number; + /** + * Whether this effect is instant (e.g. instant health) + */ + isInstant(): boolean; + /** + * The raw key used for this effect type + */ + getTranslationKey(): string; + /** + * The user-friendly name of this type as a [TextComponent] + */ + getName(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * The [net.minecraft.entity.effect.StatusEffectCategory] of this type + */ + getCategory(): net.minecraft.world.effect.MobEffectCategory; + /** + * The color of this type + */ + getColor(): java.awt.Color; + } + const PotionEffect: { + new(effect: net.minecraft.world.effect.MobEffectInstance): com.chattriggers.ctjs.api.world.PotionEffect; + } + interface PotionEffect { + getEffect(): net.minecraft.world.effect.MobEffectInstance; + /** + * The type of this potion + */ + getType(): com.chattriggers.ctjs.api.world.PotionEffectType; + /** + * Returns the translation key of the potion. + * Ex: "potion.poison" + */ + getName(): string; + /** + * Returns the localized name of the potion that + * is displayed in the player's inventory. + * Ex: "Poison" + */ + getLocalizedName(): string; + getAmplifier(): number; + getDuration(): number; + getId(): number; + getAmbient(): boolean; + isInfinite(): boolean; + getShowsParticles(): boolean; + } + const BossBars: { + BossBar: typeof com.chattriggers.ctjs.api.world.BossBars$BossBar; + Color: typeof com.chattriggers.ctjs.api.world.BossBars$Color; + Style: typeof com.chattriggers.ctjs.api.world.BossBars$Style; + toMC(): net.minecraft.client.gui.components.BossHealthOverlay; + /** + * Gets the list of currently shown [BossBar]s + * + * @return the currently displayed [BossBar]s + */ + getBossBars(): Array; + /** + * Gets all [BossBar]s with a given name + * + * @param name the name to match + * @return the [BossBar]s + */ + getBossBarsByName(name: string): Array; + /** + * Adds a new [BossBar] to be displayed + * + * Takes a parameter with the following options: + * - name: The name to appear above the BossBar. Defaults to an empty string + * - percent: The percent full the BossBar is. Defaults to 1 (full health) + * - color: The color of the BossBar. Can be any [Color], but defaults to white + * - sections: The number of notches/sections to appear on the BossBar. Can be any [Style], but + * defaults to 1 entire section + * - darkenSky: Whether the BossBar should darken the screen of the player. Defaults to false + * - dragonMusic: Whether the BossBar should play dragon music while in the End. Defaults to false + * - thickenFog: Whether the BossBar should thicken the fog around the player. Defaults to false + * + * @param obj An options bag + * + * @return the [BossBar] for further modification + */ + addBossBar(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Clears all [BossBar]s on screen + */ + clearBossBars(): void; + /** + * Removes all [BossBar]s with the given name + * + * @param name the name to match + */ + removeBossBarsByName(name: string): void; + /** + * Removes the given [BossBar] + * + * @param bossBar the BossBar to remove + */ + removeBossBar(bossBar: com.chattriggers.ctjs.api.world.BossBars$BossBar): void; + new(): com.chattriggers.ctjs.api.world.BossBars; + } + interface BossBars { + toMC(): net.minecraft.client.gui.components.BossHealthOverlay; + /** + * Gets the list of currently shown [BossBar]s + * + * @return the currently displayed [BossBar]s + */ + getBossBars(): Array; + /** + * Gets all [BossBar]s with a given name + * + * @param name the name to match + * @return the [BossBar]s + */ + getBossBarsByName(name: string): Array; + /** + * Adds a new [BossBar] to be displayed + * + * Takes a parameter with the following options: + * - name: The name to appear above the BossBar. Defaults to an empty string + * - percent: The percent full the BossBar is. Defaults to 1 (full health) + * - color: The color of the BossBar. Can be any [Color], but defaults to white + * - sections: The number of notches/sections to appear on the BossBar. Can be any [Style], but + * defaults to 1 entire section + * - darkenSky: Whether the BossBar should darken the screen of the player. Defaults to false + * - dragonMusic: Whether the BossBar should play dragon music while in the End. Defaults to false + * - thickenFog: Whether the BossBar should thicken the fog around the player. Defaults to false + * + * @param obj An options bag + * + * @return the [BossBar] for further modification + */ + addBossBar(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Clears all [BossBar]s on screen + */ + clearBossBars(): void; + /** + * Removes all [BossBar]s with the given name + * + * @param name the name to match + */ + removeBossBarsByName(name: string): void; + /** + * Removes the given [BossBar] + * + * @param bossBar the BossBar to remove + */ + removeBossBar(bossBar: com.chattriggers.ctjs.api.world.BossBars$BossBar): void; + new(): com.chattriggers.ctjs.api.world.BossBars; + } + const BossBars$BossBar: { + new(mcValue: net.minecraft.client.gui.components.LerpingBossEvent): com.chattriggers.ctjs.api.world.BossBars$BossBar; + } + interface BossBars$BossBar extends com.chattriggers.ctjs.api.CTWrapper { + /** + * Gets the UUID of this BossBar + * + * @return the uuid + */ + getUUID(): java.util.UUID; + /** + * Gets the name of this BossBar + * + * @return the name + */ + getName(): string; + /** + * Sets the name of this BossBar + * + * @param name the name to set + */ + setName(name: string): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Gets how full this BossBar is + * + * @return how full the BossBar is + */ + getPercent(): number; + /** + * Sets how full this BossBar is + * + * @param percent how full to set this BossBar. Must be between 0 and 1 + */ + setPercent(percent: number): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Gets the [Color] of this BossBar + */ + getColor(): com.chattriggers.ctjs.api.world.BossBars$Color; + /** + * Sets the [Color] of this BossBar + * + * @param color the color to set. Can be [Color], [MCBossBarColor], or a string + */ + setColor(color: any): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Gets the style of this BossBar. e.g. how many notches are displayed + */ + getStyle(): com.chattriggers.ctjs.api.world.BossBars$Style; + /** + * Sets the style of this BossBar + * + * @param style the style to set. Can be [Style], [MCBossBarStyle], a string, + * or a number of how many notches to put + */ + setStyle(style: any): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Gets whether this BossBar darkens the sky + */ + shouldDarkenSky(): boolean; + /** + * Sets whether this BossBar should darken the sky + * + * @param darken whether to darken the sky + */ + setShouldDarkenSky(darken: boolean): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Gets whether this BossBar will play dragon music. + * This will do nothing when the player is not in the end dimension + */ + hasDragonMusic(): boolean; + /** + * Sets whether this BossBar will play dragon music + * + * @param music whether to play dragon music + */ + setHasDragonMusic(music: boolean): com.chattriggers.ctjs.api.world.BossBars$BossBar; + /** + * Gets whether this BossBar should thicken the fog around the player + */ + shouldThickenFog(): boolean; + /** + * Sets whether this BossBar should thicken the fog around the player + * + * @param fog whether to thicken the fog + */ + setShouldThickenFog(fog: boolean): com.chattriggers.ctjs.api.world.BossBars$BossBar; + } + const BossBars$Color: { + PINK: com.chattriggers.ctjs.api.world.BossBars$Color; + BLUE: com.chattriggers.ctjs.api.world.BossBars$Color; + RED: com.chattriggers.ctjs.api.world.BossBars$Color; + GREEN: com.chattriggers.ctjs.api.world.BossBars$Color; + YELLOW: com.chattriggers.ctjs.api.world.BossBars$Color; + PURPLE: com.chattriggers.ctjs.api.world.BossBars$Color; + WHITE: com.chattriggers.ctjs.api.world.BossBars$Color; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.world.BossBars$Color; + } + interface BossBars$Color extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { + } + const BossBars$Color$Companion: { + fromMC(mcValue: net.minecraft.world.BossEvent$BossBarColor): com.chattriggers.ctjs.api.world.BossBars$Color; + from(value: any): com.chattriggers.ctjs.api.world.BossBars$Color; + new(): unknown; + } + interface BossBars$Color$Companion { + fromMC(mcValue: net.minecraft.world.BossEvent$BossBarColor): com.chattriggers.ctjs.api.world.BossBars$Color; + from(value: any): com.chattriggers.ctjs.api.world.BossBars$Color; + new(): unknown; + } + const BossBars$Style: { + ONE: com.chattriggers.ctjs.api.world.BossBars$Style; + SIX: com.chattriggers.ctjs.api.world.BossBars$Style; + TEN: com.chattriggers.ctjs.api.world.BossBars$Style; + TWELVE: com.chattriggers.ctjs.api.world.BossBars$Style; + TWENTY: com.chattriggers.ctjs.api.world.BossBars$Style; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.world.BossBars$Style; + } + interface BossBars$Style extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { + getSections(): number; + } + const BossBars$Style$Companion: { + fromMC(mcValue: net.minecraft.world.BossEvent$BossBarOverlay): com.chattriggers.ctjs.api.world.BossBars$Style; + from(value: any): com.chattriggers.ctjs.api.world.BossBars$Style; + new(): unknown; + } + interface BossBars$Style$Companion { + fromMC(mcValue: net.minecraft.world.BossEvent$BossBarOverlay): com.chattriggers.ctjs.api.world.BossBars$Style; + from(value: any): com.chattriggers.ctjs.api.world.BossBars$Style; + new(): unknown; + } + const Server: { + toMC(): net.minecraft.client.multiplayer.ServerData | null | undefined; + isSingleplayer(): boolean; + /** + * Gets the current server's IP, or "localhost" if the player + * is in a single-player world. + * + * @return The IP of the current server + */ + getIP(): string; + /** + * Gets the current server's name, or "SinglePlayer" if the player + * is in a single-player world. + * + * @return The name of the current server + */ + getName(): string; + /** + * Gets the current server's MOTD, or "SinglePlayer" if the player + * is in a single-player world. + * + * @return The MOTD of the current server + */ + getMOTD(): string; + /** + * Gets the ping to the current server, or 5 if the player + * is in a single-player world. Returns -1 if not in a world + * + * @return The ping to the current server + */ + getPing(): number; + new(): com.chattriggers.ctjs.api.world.Server; + } + interface Server { + toMC(): net.minecraft.client.multiplayer.ServerData | null | undefined; + isSingleplayer(): boolean; + /** + * Gets the current server's IP, or "localhost" if the player + * is in a single-player world. + * + * @return The IP of the current server + */ + getIP(): string; + /** + * Gets the current server's name, or "SinglePlayer" if the player + * is in a single-player world. + * + * @return The name of the current server + */ + getName(): string; + /** + * Gets the current server's MOTD, or "SinglePlayer" if the player + * is in a single-player world. + * + * @return The MOTD of the current server + */ + getMOTD(): string; + /** + * Gets the ping to the current server, or 5 if the player + * is in a single-player world. Returns -1 if not in a world + * + * @return The ping to the current server + */ + getPing(): number; + new(): com.chattriggers.ctjs.api.world.Server; + } + const World: { + BorderWrapper: typeof com.chattriggers.ctjs.api.world.World$BorderWrapper; + SpawnWrapper: typeof com.chattriggers.ctjs.api.world.World$SpawnWrapper; + ParticleWrapper: typeof com.chattriggers.ctjs.api.world.World$ParticleWrapper; + spawn: com.chattriggers.ctjs.api.world.World$SpawnWrapper; + particle: com.chattriggers.ctjs.api.world.World$ParticleWrapper; + border: com.chattriggers.ctjs.api.world.World$BorderWrapper; + toMC(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; + getWorld(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; + isLoaded(): boolean; + isRaining(): boolean; + getTime(): number; + /** + * Gets the [Block] at a location in the world. + * + * @param x the x position + * @param y the y position + * @param z the z position + * @return the [Block] at the location + */ + getBlockAt(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.Block; + /** + * Gets the [Block] at a location in the world. + * + * @param pos The block position + * @return the [Block] at the location + */ + getBlockAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; + getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number): Array; + getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number, types: Array): Array; + /** + * Gets the [BlockState] at a location in the world. + * + * @param pos The block position + * @return the [BlockState] at the location + */ + getBlockStateAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): net.minecraft.world.level.block.state.BlockState; + /** + * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu + * + * @param x the x coordinate + * @param y the y coordinate + * @param z the z coordinate + * @return the skylight level at the location + */ + getSkyLightLevel(x: number, y: number, z: number): number; + /** + * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu + * + * @param pos The block position + * @return the skylight level at the location + */ + getSkyLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; + /** + * Gets the block light level at the given position. This is the value seen in the debug (F3) menu + * + * @param x the x coordinate + * @param y the y coordinate + * @param z the z coordinate + * @return the block light level at the location + */ + getBlockLightLevel(x: number, y: number, z: number): number; + /** + * Gets the block light level at the given position. This is the value seen in the debug (F3) menu + * + * @param pos The block position + * @return the block light level at the location + */ + getBlockLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; + /** + * Gets all of the players in the world, and returns their wrapped versions. + * + * @return the players + */ + getAllPlayers(): Array; + /** + * Gets a player by their username, must be in the currently loaded chunks! + * + * @param name the username + * @return the player with said username, or null if they don't exist. + */ + getPlayerByName(name: string): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; + getChunk(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.Chunk; + getAllEntities(): Array; + /** + * Gets every entity loaded in the world of a certain class + * + * @param clazz the class to filter for (Use `Java.type().class` to get this) + * @return the entity list + */ + getAllEntitiesOfType(clazz: java.lang.Class): Array; + getAllBlockEntities(): Array; + getAllBlockEntitiesOfType(clazz: java.lang.Class): Array; + /** + * Returns the TPS of the current world. + * + * On modern version (1.20.3+), this is variable. On earlier versions, + * it is always 20. + */ + getTicksPerSecond(): number; + new(): com.chattriggers.ctjs.api.world.World; + } + interface World { + spawn: com.chattriggers.ctjs.api.world.World$SpawnWrapper; + particle: com.chattriggers.ctjs.api.world.World$ParticleWrapper; + border: com.chattriggers.ctjs.api.world.World$BorderWrapper; + toMC(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; + getWorld(): net.minecraft.client.multiplayer.ClientLevel | null | undefined; + isLoaded(): boolean; + isRaining(): boolean; + getTime(): number; + /** + * Gets the [Block] at a location in the world. + * + * @param x the x position + * @param y the y position + * @param z the z position + * @return the [Block] at the location + */ + getBlockAt(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.block.Block; + /** + * Gets the [Block] at a location in the world. + * + * @param pos The block position + * @return the [Block] at the location + */ + getBlockAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): com.chattriggers.ctjs.api.world.block.Block; + getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number): Array; + getBlocksInBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number, types: Array): Array; + /** + * Gets the [BlockState] at a location in the world. + * + * @param pos The block position + * @return the [BlockState] at the location + */ + getBlockStateAt(pos: com.chattriggers.ctjs.api.world.block.BlockPos): net.minecraft.world.level.block.state.BlockState; + /** + * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu + * + * @param x the x coordinate + * @param y the y coordinate + * @param z the z coordinate + * @return the skylight level at the location + */ + getSkyLightLevel(x: number, y: number, z: number): number; + /** + * Gets the skylight level at the given position. This is the value seen in the debug (F3) menu + * + * @param pos The block position + * @return the skylight level at the location + */ + getSkyLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; + /** + * Gets the block light level at the given position. This is the value seen in the debug (F3) menu + * + * @param x the x coordinate + * @param y the y coordinate + * @param z the z coordinate + * @return the block light level at the location + */ + getBlockLightLevel(x: number, y: number, z: number): number; + /** + * Gets the block light level at the given position. This is the value seen in the debug (F3) menu + * + * @param pos The block position + * @return the block light level at the location + */ + getBlockLightLevel(pos: com.chattriggers.ctjs.api.world.block.BlockPos): number; + /** + * Gets all of the players in the world, and returns their wrapped versions. + * + * @return the players + */ + getAllPlayers(): Array; + /** + * Gets a player by their username, must be in the currently loaded chunks! + * + * @param name the username + * @return the player with said username, or null if they don't exist. + */ + getPlayerByName(name: string): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; + getChunk(x: number, y: number, z: number): com.chattriggers.ctjs.api.world.Chunk; + getAllEntities(): Array; + /** + * Gets every entity loaded in the world of a certain class + * + * @param clazz the class to filter for (Use `Java.type().class` to get this) + * @return the entity list + */ + getAllEntitiesOfType(clazz: java.lang.Class): Array; + getAllBlockEntities(): Array; + getAllBlockEntitiesOfType(clazz: java.lang.Class): Array; + /** + * Returns the TPS of the current world. + * + * On modern version (1.20.3+), this is variable. On earlier versions, + * it is always 20. + */ + getTicksPerSecond(): number; + new(): com.chattriggers.ctjs.api.world.World; + } + const World$SpawnWrapper: { + /** + * World spawn object for getting spawn location. + */ + new(): com.chattriggers.ctjs.api.world.World$SpawnWrapper; + } + interface World$SpawnWrapper { + /** + * Gets the spawn x location. + * + * @return the spawn x location. + */ + getX(): number; + /** + * Gets the spawn y location. + * + * @return the spawn y location. + */ + getY(): number; + /** + * Gets the spawn z location. + * + * @return the spawn z location. + */ + getZ(): number; + } + const World$ParticleWrapper: { + new(): com.chattriggers.ctjs.api.world.World$ParticleWrapper; + } + interface World$ParticleWrapper { + /** + * Gets an array of all the different particle names you can pass + * to [spawnParticle] + * + * @return the array of name strings + */ + getParticleNames(): Array; + /** + * Spawns a particle into the world with the given attributes, + * which can be configured further with the returned [com.chattriggers.ctjs.api.entity.Particle] + * + * @param particle the name of the particle to spawn, see [getParticleNames] + * @param x the x coordinate to spawn the particle at + * @param y the y coordinate to spawn the particle at + * @param z the z coordinate to spawn the particle at + * @param xSpeed the motion the particle should have in the x direction + * @param ySpeed the motion the particle should have in the y direction + * @param zSpeed the motion the particle should have in the z direction + * @return the newly spawned particle for further configuration + */ + spawnParticle(particle: string, x: number, y: number, z: number, xSpeed: number, ySpeed: number, zSpeed: number): com.chattriggers.ctjs.api.entity.Particle | null | undefined; + spawnParticle(particle: net.minecraft.client.particle.Particle): com.chattriggers.ctjs.api.entity.Particle; + } + const World$BorderWrapper: { + /** + * World border object to get border parameters + */ + new(): com.chattriggers.ctjs.api.world.World$BorderWrapper; + } + interface World$BorderWrapper { + /** + * Gets the border center x location. + * + * @return the border center x location + */ + getCenterX(): number; + /** + * Gets the border center z location. + * + * @return the border center z location + */ + getCenterZ(): number; + /** + * Gets the border size. + * + * @return the border size + */ + getSize(): number; + } + const StructureFinder: { + submitChunkScan(chunkX: number, chunkZ: number): void; + submitBlockUpdate(blockX: number, blockY: number, blockZ: number): void; + getRenderBlocksArray(): Array; + getRenderLabelsArray(): Array; + clear(): void; + shutdown(): void; + new(): com.chattriggers.ctjs.api.world.StructureFinder; + } + interface StructureFinder { + submitChunkScan(chunkX: number, chunkZ: number): void; + submitBlockUpdate(blockX: number, blockY: number, blockZ: number): void; + getRenderBlocksArray(): Array; + getRenderLabelsArray(): Array; + clear(): void; + shutdown(): void; + new(): com.chattriggers.ctjs.api.world.StructureFinder; + } + const TabList: { + Name: typeof com.chattriggers.ctjs.api.world.TabList$Name; + toMC(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; + /** + * Gets the scoreboard objective corresponding to the tab list, or null if it doesn't exist + */ + getObjective(): net.minecraft.world.scores.Objective | null | undefined; + /** + * Gets the tab list header as a [TextComponent] + * + * @return the header + */ + getHeaderComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; + /** + * Gets the tab list header as a formatted string. + * + * @return the header + */ + getHeader(): string | null | undefined; + /** + * Sets the header text for the TabList. + * If [header] is null, it will remove the header entirely + * + * @param header the header to set, or null to clear + */ + setHeader(header: any | null | undefined): void; + clearHeader(): void; + /** + * Gets the tab list footer as a [TextComponent] + * + * @return the footer + */ + getFooterComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; + /** + * Gets the tab list footer as a string. + * Be aware that this can contain color codes. + * + * @return the footer + */ + getFooter(): string | null | undefined; + /** + * Sets the footer text for the TabList. + * If [footer] is null, it will remove the footer entirely + * + * @param footer the footer to set, or null to clear + */ + setFooter(footer: any | null | undefined): void; + clearFooter(): void; + /** + * Gets names set in scoreboard objectives + * + * @return The formatted names + */ + getNamesByObjectives(): Array; + /** + * Get all names on the tab list + * + * @return the list of names + */ + getNames(): Array; + /** + * Gets all names in tabs without formatting + * + * @return the unformatted names + */ + getUnformattedNames(): Array; + /** + * Adds a new name to the tab list + * + * @param name the formatted name to add + * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. + * If false, will use a random default skin (Steve, Alex, etc) + */ + addName(name: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Adds a new name to the tab list + * + * @param name the formatted name to add + * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. + * If false, will use a random default skin (Steve, Alex, etc) + */ + addName(name: com.chattriggers.ctjs.api.message.TextComponent, useExistingSkin: boolean): void; + addName(name: string): void; + addName(name: string, useExistingSkin: boolean): void; + /** + * Removes all names from the tab list with a certain name + * + * @param name the name of the entry to remove + */ + removeNames(name: com.chattriggers.ctjs.api.message.TextComponent): void; + removeNames(name: string): void; + new(): com.chattriggers.ctjs.api.world.TabList; + } + interface TabList { + toMC(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; + /** + * Gets the scoreboard objective corresponding to the tab list, or null if it doesn't exist + */ + getObjective(): net.minecraft.world.scores.Objective | null | undefined; + /** + * Gets the tab list header as a [TextComponent] + * + * @return the header + */ + getHeaderComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; + /** + * Gets the tab list header as a formatted string. + * + * @return the header + */ + getHeader(): string | null | undefined; + /** + * Sets the header text for the TabList. + * If [header] is null, it will remove the header entirely + * + * @param header the header to set, or null to clear + */ + setHeader(header: any | null | undefined): void; + clearHeader(): void; + /** + * Gets the tab list footer as a [TextComponent] + * + * @return the footer + */ + getFooterComponent(): com.chattriggers.ctjs.api.message.TextComponent | null | undefined; + /** + * Gets the tab list footer as a string. + * Be aware that this can contain color codes. + * + * @return the footer + */ + getFooter(): string | null | undefined; + /** + * Sets the footer text for the TabList. + * If [footer] is null, it will remove the footer entirely + * + * @param footer the footer to set, or null to clear + */ + setFooter(footer: any | null | undefined): void; + clearFooter(): void; + /** + * Gets names set in scoreboard objectives + * + * @return The formatted names + */ + getNamesByObjectives(): Array; + /** + * Get all names on the tab list + * + * @return the list of names + */ + getNames(): Array; + /** + * Gets all names in tabs without formatting + * + * @return the unformatted names + */ + getUnformattedNames(): Array; + /** + * Adds a new name to the tab list + * + * @param name the formatted name to add + * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. + * If false, will use a random default skin (Steve, Alex, etc) + */ + addName(name: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Adds a new name to the tab list + * + * @param name the formatted name to add + * @param useExistingSkin whether to use the skin of the associated Minecraft account using [name]. + * If false, will use a random default skin (Steve, Alex, etc) + */ + addName(name: com.chattriggers.ctjs.api.message.TextComponent, useExistingSkin: boolean): void; + addName(name: string): void; + addName(name: string, useExistingSkin: boolean): void; + /** + * Removes all names from the tab list with a certain name + * + * @param name the name of the entry to remove + */ + removeNames(name: com.chattriggers.ctjs.api.message.TextComponent): void; + removeNames(name: string): void; + new(): com.chattriggers.ctjs.api.world.TabList; + } + const TabList$Name: { + new(mcValue: net.minecraft.client.multiplayer.PlayerInfo): com.chattriggers.ctjs.api.world.TabList$Name; + } + interface TabList$Name extends com.chattriggers.ctjs.api.CTWrapper { + /** + * Gets the latency associated with this name + * + * @return the latency + */ + getLatency(): number; + /** + * Sets the latency associated with this name. + * - latency between 0 and 149 represents all 5 bars + * - latency between 150 and 299 represents 4 bars + * - latency between 300 and 599 represents 3 bars + * - latency between 600 and 999 represents 2 bars + * - latency between 1000 and more represents 1 bar + * + * @param latency the latency to set + * @return the name to allow for method chaining + */ + setLatency(latency: number): com.chattriggers.ctjs.api.world.TabList$Name; + /** + * Gets the team associated with this name, if it exists + * + * @return the team, or null if it does not exist + */ + getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; + /** + * Sets the team associated with this name + * + * @param team the new team to set for this name. Custom teams can be created + * using [Scoreboard.createTeam] + * @return the score to allow for method chaining + */ + setTeam(team: com.chattriggers.ctjs.api.entity.Team | null | undefined): com.chattriggers.ctjs.api.world.TabList$Name; + /** + * Gets the display text of this name + * + * @return the display name + */ + getName(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets the display name of this name + * + * @param name the new name + * @return the name to allow for method chaining + */ + setName(name: com.chattriggers.ctjs.api.message.TextComponent | null | undefined): com.chattriggers.ctjs.api.world.TabList$Name; + /** + * Removes this name from the tab list + */ + remove(): void; + } + const Scoreboard: { + Score: typeof com.chattriggers.ctjs.api.world.Scoreboard$Score; + toMC(): net.minecraft.world.scores.Scoreboard | null | undefined; + getSidebar(): net.minecraft.world.scores.Objective | null | undefined; + /** + * Gets the top-most string which is displayed on the scoreboard. (doesn't have a score on the side). + * Be aware that this can contain color codes. + * + * @return the scoreboard title + */ + getTitle(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets the scoreboard title. + * + * @param title the new title + * @return the scoreboard title + */ + setTitle(title: com.chattriggers.ctjs.api.message.TextComponent): void; + setTitle(title: string): void; + /** + * Get all currently visible strings on the scoreboard. (excluding title) + * Be aware that this can contain color codes. + * + * @return the list of lines + */ + getLines(): Array; + /** + * Get all currently visible strings on the scoreboard. (excluding title) + * Be aware that this can contain color codes. + * + * @return the list of lines + */ + getLines(descending: boolean): Array; + /** + * Gets the line at the specified index (0 based) + * Equivalent to Scoreboard.getLines().get(index) + * + * @param index the line index + * @return the score object at the index + */ + getLineByIndex(index: number): com.chattriggers.ctjs.api.world.Scoreboard$Score; + /** + * Gets a list of lines that have a certain score, + * i.e. the numbers shown on the right + * + * @param score the score to look for + * @return a list of actual score objects + */ + getLinesByScore(score: number): Array; + /** + * Sets a line in the scoreboard to the specified name and score. + * + * @param score the score value for this item + * @param line the [TextComponent] to display on said line + * @param override whether to remove old lines with the same score + */ + setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Sets a line in the scoreboard to the specified name and score. + * + * @param score the score value for this item + * @param line the [TextComponent] to display on said line + * @param override whether to remove old lines with the same score + */ + setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent, override: boolean): void; + setLine(score: number, line: string): void; + setLine(score: number, line: string, override: boolean): void; + /** + * Adds a line to the scoreboard + * + * @param score the score value for this item + * @param line the [TextComponent] to display on said line + */ + addLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; + addLine(score: number, line: string): void; + /** + * Removes all lines from the scoreboard matching with a certain score + * + * @param score the score of the lines to remove + */ + removeScores(score: number): void; + /** + * Removes the line at a certain index + * + * @param index the index of the line to remove + */ + removeIndex(index: number): void; + /** + * Removes the line at a certain index + * + * @param index the index of the line to remove + */ + removeIndex(index: number, descending: boolean): void; + setShouldRender(shouldRender: boolean): void; + getShouldRender(): boolean; + /** + * Creates or gets a [Team] with a given name + * + * @param name the name of the team + */ + createTeam(name: string): com.chattriggers.ctjs.api.entity.Team; + new(): com.chattriggers.ctjs.api.world.Scoreboard; + } + interface Scoreboard { + toMC(): net.minecraft.world.scores.Scoreboard | null | undefined; + getSidebar(): net.minecraft.world.scores.Objective | null | undefined; + /** + * Gets the top-most string which is displayed on the scoreboard. (doesn't have a score on the side). + * Be aware that this can contain color codes. + * + * @return the scoreboard title + */ + getTitle(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets the scoreboard title. + * + * @param title the new title + * @return the scoreboard title + */ + setTitle(title: com.chattriggers.ctjs.api.message.TextComponent): void; + setTitle(title: string): void; + /** + * Get all currently visible strings on the scoreboard. (excluding title) + * Be aware that this can contain color codes. + * + * @return the list of lines + */ + getLines(): Array; + /** + * Get all currently visible strings on the scoreboard. (excluding title) + * Be aware that this can contain color codes. + * + * @return the list of lines + */ + getLines(descending: boolean): Array; + /** + * Gets the line at the specified index (0 based) + * Equivalent to Scoreboard.getLines().get(index) + * + * @param index the line index + * @return the score object at the index + */ + getLineByIndex(index: number): com.chattriggers.ctjs.api.world.Scoreboard$Score; + /** + * Gets a list of lines that have a certain score, + * i.e. the numbers shown on the right + * + * @param score the score to look for + * @return a list of actual score objects + */ + getLinesByScore(score: number): Array; + /** + * Sets a line in the scoreboard to the specified name and score. + * + * @param score the score value for this item + * @param line the [TextComponent] to display on said line + * @param override whether to remove old lines with the same score + */ + setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Sets a line in the scoreboard to the specified name and score. + * + * @param score the score value for this item + * @param line the [TextComponent] to display on said line + * @param override whether to remove old lines with the same score + */ + setLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent, override: boolean): void; + setLine(score: number, line: string): void; + setLine(score: number, line: string, override: boolean): void; + /** + * Adds a line to the scoreboard + * + * @param score the score value for this item + * @param line the [TextComponent] to display on said line + */ + addLine(score: number, line: com.chattriggers.ctjs.api.message.TextComponent): void; + addLine(score: number, line: string): void; + /** + * Removes all lines from the scoreboard matching with a certain score + * + * @param score the score of the lines to remove + */ + removeScores(score: number): void; + /** + * Removes the line at a certain index + * + * @param index the index of the line to remove + */ + removeIndex(index: number): void; + /** + * Removes the line at a certain index + * + * @param index the index of the line to remove + */ + removeIndex(index: number, descending: boolean): void; + setShouldRender(shouldRender: boolean): void; + getShouldRender(): boolean; + /** + * Creates or gets a [Team] with a given name + * + * @param name the name of the team + */ + createTeam(name: string): com.chattriggers.ctjs.api.entity.Team; + new(): com.chattriggers.ctjs.api.world.Scoreboard; + } + const Scoreboard$Score: { + new(mcValue: net.minecraft.world.scores.ScoreAccess): com.chattriggers.ctjs.api.world.Scoreboard$Score; + } + interface Scoreboard$Score extends com.chattriggers.ctjs.api.CTWrapper { + /** + * Gets the team associated with this score, if it exists + * + * @return the team, or null if it does not exist + */ + getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; + /** + * Sets the team associated with this score + * + * @param team the new team to set for this line. Custom teams can be created using [createTeam] + * @return the score to allow for method chaining + */ + setTeam(team: com.chattriggers.ctjs.api.entity.Team | null | undefined): com.chattriggers.ctjs.api.world.Scoreboard$Score; + /** + * Gets the score value for this score, + * i.e. the number on the right of the board + * + * @return the actual point value + */ + getScore(): number; + /** + * Sets the score value for this score + * + * @param score the new point value + * @return the score to allow for method chaining + */ + setScore(score: number): com.chattriggers.ctjs.api.world.Scoreboard$Score; + /** + * Gets the display text of this score + * + * @return the display name + */ + getName(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets the name of this score + * + * @param name the new name + * @return the score to allow for method chaining + */ + setName(name: com.chattriggers.ctjs.api.message.TextComponent | null | undefined): com.chattriggers.ctjs.api.world.Scoreboard$Score; + /** + * Gets the number format of this score + * + * @return the number format + */ + getNumberFormat(): net.minecraft.network.chat.numbers.NumberFormat | null | undefined; + /** + * Sets the number format of this score + * + * @param format either a formatting string, i.e. "&6", style in the form of an object, see [TextComponent], a + * [NumberFormat], or hex value + * @return the score to allow for method chaining + * + * @see [TextComponent] + */ + setNumberFormat(format: any | null | undefined): com.chattriggers.ctjs.api.world.Scoreboard$Score; + /** + * Removes this score from the scoreboard + */ + remove(): void; + } + } + namespace vec { + const Vec3i: { + new(): com.chattriggers.ctjs.api.vec.Vec3i; + new(x: number): com.chattriggers.ctjs.api.vec.Vec3i; + new(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec3i; + new(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3i; + } + interface Vec3i { + getX(): number; + getY(): number; + getZ(): number; + magnitudeSquared(): number; + magnitude(): number; + translated(dx: number, dy: number, dz: number): com.chattriggers.ctjs.api.vec.Vec3i; + scaled(scale: number): com.chattriggers.ctjs.api.vec.Vec3i; + scaled(xScale: number, yScale: number, zScale: number): com.chattriggers.ctjs.api.vec.Vec3i; + crossProduct(other: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.vec.Vec3i; + dotProduct(other: com.chattriggers.ctjs.api.vec.Vec3i): number; + angleTo(other: com.chattriggers.ctjs.api.vec.Vec3i): number; + normalized(): com.chattriggers.ctjs.api.vec.Vec3f; + unaryMinus(): com.chattriggers.ctjs.api.vec.Vec3i; + plus(other: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.vec.Vec3i; + minus(other: com.chattriggers.ctjs.api.vec.Vec3i): com.chattriggers.ctjs.api.vec.Vec3i; + } + const Vec3f: { + new(): com.chattriggers.ctjs.api.vec.Vec3f; + new(x: number): com.chattriggers.ctjs.api.vec.Vec3f; + new(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec3f; + new(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; + } + interface Vec3f { + getX(): number; + getY(): number; + getZ(): number; + magnitudeSquared(): number; + magnitude(): number; + translated(dx: number, dy: number, dz: number): com.chattriggers.ctjs.api.vec.Vec3f; + scaled(scale: number): com.chattriggers.ctjs.api.vec.Vec3f; + scaled(xScale: number, yScale: number, zScale: number): com.chattriggers.ctjs.api.vec.Vec3f; + crossProduct(other: com.chattriggers.ctjs.api.vec.Vec3f): com.chattriggers.ctjs.api.vec.Vec3f; + dotProduct(other: com.chattriggers.ctjs.api.vec.Vec3f): number; + angleTo(other: com.chattriggers.ctjs.api.vec.Vec3f): number; + normalized(): com.chattriggers.ctjs.api.vec.Vec3f; + unaryMinus(): com.chattriggers.ctjs.api.vec.Vec3f; + plus(other: com.chattriggers.ctjs.api.vec.Vec3f): com.chattriggers.ctjs.api.vec.Vec3f; + minus(other: com.chattriggers.ctjs.api.vec.Vec3f): com.chattriggers.ctjs.api.vec.Vec3f; + component1(): number; + component2(): number; + component3(): number; + copy(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; + } + const Vec2f: { + new(): com.chattriggers.ctjs.api.vec.Vec2f; + new(x: number): com.chattriggers.ctjs.api.vec.Vec2f; + new(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec2f; + } + interface Vec2f { + getX(): number; + getY(): number; + magnitudeSquared(): number; + magnitude(): number; + translated(dx: number, dy: number): com.chattriggers.ctjs.api.vec.Vec2f; + scaled(scale: number): com.chattriggers.ctjs.api.vec.Vec2f; + scaled(xScale: number, yScale: number): com.chattriggers.ctjs.api.vec.Vec2f; + dotProduct(other: com.chattriggers.ctjs.api.vec.Vec2f): number; + angleTo(other: com.chattriggers.ctjs.api.vec.Vec2f): number; + normalized(): com.chattriggers.ctjs.api.vec.Vec2f; + unaryMinus(): com.chattriggers.ctjs.api.vec.Vec2f; + plus(other: com.chattriggers.ctjs.api.vec.Vec2f): com.chattriggers.ctjs.api.vec.Vec2f; + minus(other: com.chattriggers.ctjs.api.vec.Vec2f): com.chattriggers.ctjs.api.vec.Vec2f; + component1(): number; + component2(): number; + copy(x: number, y: number): com.chattriggers.ctjs.api.vec.Vec2f; + } + } + namespace entity { + const Entity: { + DimensionType: typeof com.chattriggers.ctjs.api.entity.Entity$DimensionType; + new(mcValue: net.minecraft.world.entity.Entity): com.chattriggers.ctjs.api.entity.Entity; + } + interface Entity extends com.chattriggers.ctjs.api.CTWrapper { + getX(): number; + getY(): number; + getZ(): number; + getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; + getRotation(): net.minecraft.world.phys.Vec2; + getLastX(): number; + getLastY(): number; + getLastZ(): number; + getRenderX(): number; + getRenderY(): number; + getRenderZ(): number; + /** + * Gets the pitch, the horizontal direction the entity is facing towards. + * This has a range of -180 to 180. + * + * @return the entity's pitch + */ + getPitch(): number; + /** + * Gets the yaw, the vertical direction the entity is facing towards. + * This has a range of -180 to 180. + * + * @return the entity's yaw + */ + getYaw(): number; + /** + * Gets the entity's x motion. + * This is the amount the entity will move in the x direction next tick. + * + * @return the entity's x motion + */ + getMotionX(): number; + /** + * Gets the entity's y motion. + * This is the amount the entity will move in the y direction next tick. + * + * @return the entity's y motion + */ + getMotionY(): number; + /** + * Gets the entity's z motion. + * This is the amount the entity will move in the z direction next tick. + * + * @return the entity's z motion + */ + getMotionZ(): number; + /** + * Returns the entity this entity is riding, if one exists + * + * @return an Entity or null + */ + getRiding(): com.chattriggers.ctjs.api.entity.Entity | null | undefined; + /** + * Returns a list of all entity riding this entity + * + * @return List of entities, empty if there are no riders + */ + getRiders(): Array; + /** + * Checks whether the entity is dead. + * This is a fairly loose term, dead for a particle could mean it has faded, + * while dead for an entity means it has no health. + * + * @return whether an entity is dead + */ + isDead(): boolean; + /** + * Gets the entire width of the entity's hitbox + * + * @return the entity's width + */ + getWidth(): number; + /** + * Gets the entire height of the entity's hitbox + * + * @return the entity's height + */ + getHeight(): number; + /** + * Gets the height of the eyes on the entity, + * can be added to its Y coordinate to get the actual Y location of the eyes. + * This value defaults to 85% of an entity's height, however is different for some entities. + * + * @return the height of the entity's eyes + */ + getEyeHeight(): number; + /** + * Gets the name of the entity, could be "Villager", + * or, if the entity has a custom name, it returns that. + * + * @return the (custom) name of the entity as a String + */ + getName(): string; + /** + * Gets the name of the entity, could be "Villager", + * or, if the entity has a custom name, it returns that. + * + * @return the (custom) name of the entity as a [TextComponent] + */ + getNameComponent(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Gets the Java class name of the entity, for example "EntityVillager" + * + * @return the entity's class name + */ + getClassName(): string; + /** + * Gets the Java UUID object of this entity. + * Use of [UUID.toString] in conjunction is recommended. + * + * @return the entity's uuid + */ + getUUID(): java.util.UUID; + /** + * Gets the entity's air level. + * + * The returned value will be an integer. If the player is not taking damage, it + * will be between 300 (not in water) and 0. If the player is taking damage, it + * will be between -20 and 0, getting reset to 0 every time the player takes damage. + * + * @return the entity's air level + */ + getAir(): number; + distanceTo(other: com.chattriggers.ctjs.api.entity.Entity): number; + distanceTo(other: net.minecraft.world.entity.Entity): number; + distanceTo(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): number; + distanceTo(x: number, y: number, z: number): number; + isOnGround(): boolean; + isCollided(): boolean; + getDistanceWalked(): number; + getStepHeight(): number; + hasNoClip(): boolean; + getTicksExisted(): number; + getFireResistance(): number; + isImmuneToFire(): boolean; + isInWater(): boolean; + isWet(): boolean; + getDimension(): com.chattriggers.ctjs.api.entity.Entity$DimensionType; + getMaxInPortalTime(): number; + isSilent(): boolean; + isInLava(): boolean; + getLookVector(): net.minecraft.world.phys.Vec3; + getLookVector(partialTicks: number): net.minecraft.world.phys.Vec3; + getEyePosition(): net.minecraft.world.phys.Vec3; + getEyePosition(partialTicks: number): net.minecraft.world.phys.Vec3; + canBeCollidedWith(): boolean; + canBePushed(): boolean; + isSneaking(): boolean; + isSprinting(): boolean; + isInvisible(): boolean; + isOutsideBorder(): boolean; + isBurning(): boolean; + getWorld(): net.minecraft.world.level.Level; + getChunk(): com.chattriggers.ctjs.api.world.Chunk; + } + const Entity$DimensionType: { + OVERWORLD: com.chattriggers.ctjs.api.entity.Entity$DimensionType; + NETHER: com.chattriggers.ctjs.api.entity.Entity$DimensionType; + END: com.chattriggers.ctjs.api.entity.Entity$DimensionType; + OVERWORLD_CAVES: com.chattriggers.ctjs.api.entity.Entity$DimensionType; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.entity.Entity$DimensionType; + } + interface Entity$DimensionType extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper> { + } + const Entity$Companion: { + fromMC(entity: net.minecraft.world.entity.Entity): com.chattriggers.ctjs.api.entity.Entity; + new(): com.chattriggers.ctjs.api.entity.Entity$Companion; + } + interface Entity$Companion { + fromMC(entity: net.minecraft.world.entity.Entity): com.chattriggers.ctjs.api.entity.Entity; + new(): com.chattriggers.ctjs.api.entity.Entity$Companion; + } + const PlayerInteraction: { + UseBlock: typeof com.chattriggers.ctjs.api.entity.PlayerInteraction$UseBlock; + UseEntity: typeof com.chattriggers.ctjs.api.entity.PlayerInteraction$UseEntity; + UseItem: typeof com.chattriggers.ctjs.api.entity.PlayerInteraction$UseItem; + new(name: string, mainHand: boolean): com.chattriggers.ctjs.api.entity.PlayerInteraction; + } + interface PlayerInteraction { + getName(): string; + getMainHand(): boolean; + } + const PlayerInteraction$AttackBlock: { + new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackBlock; + } + interface PlayerInteraction$AttackBlock extends com.chattriggers.ctjs.api.entity.PlayerInteraction { + new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackBlock; + } + const PlayerInteraction$AttackEntity: { + new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackEntity; + } + interface PlayerInteraction$AttackEntity extends com.chattriggers.ctjs.api.entity.PlayerInteraction { + new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$AttackEntity; + } + const PlayerInteraction$BreakBlock: { + new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$BreakBlock; + } + interface PlayerInteraction$BreakBlock extends com.chattriggers.ctjs.api.entity.PlayerInteraction { + new(): com.chattriggers.ctjs.api.entity.PlayerInteraction$BreakBlock; + } + const PlayerInteraction$UseBlock: { + new(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.entity.PlayerInteraction$UseBlock; + } + interface PlayerInteraction$UseBlock extends com.chattriggers.ctjs.api.entity.PlayerInteraction { + } + const PlayerInteraction$UseEntity: { + new(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.entity.PlayerInteraction$UseEntity; + } + interface PlayerInteraction$UseEntity extends com.chattriggers.ctjs.api.entity.PlayerInteraction { + } + const PlayerInteraction$UseItem: { + new(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.entity.PlayerInteraction$UseItem; + } + interface PlayerInteraction$UseItem extends com.chattriggers.ctjs.api.entity.PlayerInteraction { + } + const LivingEntity: { + new(mcValue: net.minecraft.world.entity.LivingEntity): com.chattriggers.ctjs.api.entity.LivingEntity; + } + interface LivingEntity extends com.chattriggers.ctjs.api.entity.Entity { + getActivePotionEffects(): Array; + canSeeEntity(other: net.minecraft.world.entity.Entity): boolean; + canSeeEntity(other: com.chattriggers.ctjs.api.entity.Entity): boolean; + /** + * Gets the item currently in the entity's specified inventory slot. + * 0 for main hand, 1 for offhand, 2-5 for armor + * + * @param slot the slot to access + * @return the item in said slot + */ + getStackInSlot(slot: number): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + getHP(): number; + getMaxHP(): number; + getAbsorption(): number; + getAge(): number; + getArmorValue(): number; + isPotionActive(id: number): boolean; + isPotionActive(type: com.chattriggers.ctjs.api.world.PotionEffectType): boolean; + isPotionActive(effect: com.chattriggers.ctjs.api.world.PotionEffect): boolean; + } + const BlockEntity: { + new(mcValue: net.minecraft.world.level.block.entity.BlockEntity): com.chattriggers.ctjs.api.entity.BlockEntity; + } + interface BlockEntity extends com.chattriggers.ctjs.api.CTWrapper { + getX(): number; + getY(): number; + getZ(): number; + getBlockType(): com.chattriggers.ctjs.api.world.block.BlockType; + getBlockPos(): com.chattriggers.ctjs.api.world.block.BlockPos; + getBlock(): com.chattriggers.ctjs.api.world.block.Block; + } + const Particle: { + new(mcValue: net.minecraft.client.particle.Particle): com.chattriggers.ctjs.api.entity.Particle; + } + interface Particle extends com.chattriggers.ctjs.api.CTWrapper { + getX(): number; + setX(value: number): void; + getY(): number; + setY(value: number): void; + getZ(): number; + setZ(value: number): void; + getLastX(): number; + setLastX(value: number): void; + getLastY(): number; + setLastY(value: number): void; + getLastZ(): number; + setLastZ(value: number): void; + getRenderX(): number; + getRenderY(): number; + getRenderZ(): number; + getMotionX(): number; + setMotionX(value: number): void; + getMotionY(): number; + setMotionY(value: number): void; + getMotionZ(): number; + setMotionZ(value: number): void; + getAge(): number; + setAge(value: number): void; + getDead(): boolean; + setDead(value: boolean): void; + scale(scale: number): com.chattriggers.ctjs.api.entity.Particle; + /** + * Sets the amount of ticks this particle will live for + * + * @param maxAge the particle's max age (in ticks) + */ + setMaxAge(maxAge: number): com.chattriggers.ctjs.api.entity.Particle; + remove(): com.chattriggers.ctjs.api.entity.Particle; + } + const PlayerMP: { + new(mcValue: net.minecraft.world.entity.player.Player): com.chattriggers.ctjs.api.entity.PlayerMP; + } + interface PlayerMP extends com.chattriggers.ctjs.api.entity.LivingEntity { + isSpectator(): boolean; + getPing(): number; + getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; + /** + * Gets the display name for this player, + * i.e. the name shown in tab list and in the player's nametag. + * @return the display name + */ + getDisplayName(): com.chattriggers.ctjs.api.message.TextComponent; + setTabDisplayName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Sets the name for this player shown above their head, + * in their name tag + * + * @param textComponent the new name to display + */ + setNametagName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Draws the player in the GUI. Takes the same parameters as [Render2D.drawPlayer] + * minus `player`. + * + * @see Render2D.drawPlayer + */ + draw(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.entity.PlayerMP; + } + const Team: { + Visibility: typeof com.chattriggers.ctjs.api.entity.Team$Visibility; + new(mcValue: net.minecraft.world.scores.PlayerTeam): com.chattriggers.ctjs.api.entity.Team; + } + interface Team extends com.chattriggers.ctjs.api.CTWrapper { + /** + * Gets the registered name of the team + */ + getRegisteredName(): string; + /** + * Gets the display name of the team + */ + getName(): string; + /** + * Sets the display name of the team + * @param name the new display name + * @return the team for method chaining + */ + setName(name: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.entity.Team; + /** + * Sets the display name of the team + * @param name the new display name + * @return the team for method chaining + */ + setName(name: string): com.chattriggers.ctjs.api.entity.Team; + /** + * Gets the list of names on the team + */ + getMembers(): Array; + /** + * Gets the team prefix + */ + getPrefix(): string; + /** + * Sets the team prefix + * @param prefix the prefix to set + * @return the team for method chaining + */ + setPrefix(prefix: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.entity.Team; + /** + * Sets the team prefix + * @param prefix the prefix to set + * @return the team for method chaining + */ + setPrefix(prefix: string): com.chattriggers.ctjs.api.entity.Team; + /** + * Gets the team suffix + */ + getSuffix(): string; + /** + * Sets the team suffix + * @param suffix the suffix to set + * @return the team for method chaining + */ + setSuffix(suffix: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.entity.Team; + /** + * Sets the team suffix + * @param suffix the suffix to set + * @return the team for method chaining + */ + setSuffix(suffix: string): com.chattriggers.ctjs.api.entity.Team; + getColor(): string; + /** + * Sets the team color using the legacy ChatFormatting name or numeric id. + */ + setColor(color: any | null | undefined): com.chattriggers.ctjs.api.entity.Team; + /** + * Gets the team's friendly fire setting + */ + getFriendlyFire(): boolean; + /** + * Gets whether the team can see invisible players on the same team + */ + canSeeInvisibleTeammates(): boolean; + /** + * Gets the team's name tag visibility + */ + getNameTagVisibility(): com.chattriggers.ctjs.api.entity.Team$Visibility; + /** + * Gets the team's death message visibility + */ + getDeathMessageVisibility(): com.chattriggers.ctjs.api.entity.Team$Visibility; + } + const Team$Visibility: { + ALWAYS: com.chattriggers.ctjs.api.entity.Team$Visibility; + NEVER: com.chattriggers.ctjs.api.entity.Team$Visibility; + HIDE_FOR_OTHERS_TEAMS: com.chattriggers.ctjs.api.entity.Team$Visibility; + HIDE_FOR_OWN_TEAM: com.chattriggers.ctjs.api.entity.Team$Visibility; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.entity.Team$Visibility; + } + interface Team$Visibility extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { + } + const Team$Visibility$Companion: { + fromMC(mcValue: net.minecraft.world.scores.Team$Visibility): com.chattriggers.ctjs.api.entity.Team$Visibility; + new(): unknown; + } + interface Team$Visibility$Companion { + fromMC(mcValue: net.minecraft.world.scores.Team$Visibility): com.chattriggers.ctjs.api.entity.Team$Visibility; + new(): unknown; + } + } + namespace commands { + interface RootCommand { + register(): void; + } + const DynamicCommands: { + AngleArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$AngleArgumentWrapper; + PosArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$PosArgumentWrapper; + BlockPredicateWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$BlockPredicateWrapper; + BlockStateArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$BlockStateArgumentWrapper; + EntitySelectorWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$EntitySelectorWrapper; + ItemStackArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$ItemStackArgumentWrapper; + MessageFormatArgumentWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$MessageFormatArgumentWrapper; + NbtPathWrapper: typeof com.chattriggers.ctjs.api.commands.DynamicCommands$NbtPathWrapper; + registerCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; + registerCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; + buildCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; + buildCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; + argument(name: string, type: com.mojang.brigadier.arguments.ArgumentType, builder: org.mozilla.javascript.Function): void; + literal(name: string, builder: org.mozilla.javascript.Function): void; + redirect(node: com.chattriggers.ctjs.api.commands.RootCommand): void; + redirect(node: com.mojang.brigadier.tree.CommandNode): void; + exec(method: org.mozilla.javascript.Function): void; + /** + * A helper method for getting Fabric's client CommandDispatcher root node. This allows user + * commands to be redirected to the root node in the same way that "/execute run ..." does. + * + * As the result is a CommandNode, `.getChild(name)` can be used to access sub-command nodes + * to, for example, redirect to just `/advancement` instead of `/`. + */ + getDispatcherRoot(): com.mojang.brigadier.tree.RootCommandNode | null | undefined; + /** + * @see Argument Types: bool + */ + bool(): com.mojang.brigadier.arguments.BoolArgumentType; + /** + * @see brigadier:double + */ + double(): com.mojang.brigadier.arguments.DoubleArgumentType; + /** + * @see brigadier:double + */ + double(min: number): com.mojang.brigadier.arguments.DoubleArgumentType; + /** + * @see brigadier:double + */ + double(min: number, max: number): com.mojang.brigadier.arguments.DoubleArgumentType; + /** + * @see brigadier:float + */ + float(): com.mojang.brigadier.arguments.FloatArgumentType; + /** + * @see brigadier:float + */ + float(min: number): com.mojang.brigadier.arguments.FloatArgumentType; + /** + * @see brigadier:float + */ + float(min: number, max: number): com.mojang.brigadier.arguments.FloatArgumentType; + /** + * @see brigadier:integer + */ + integer(): com.mojang.brigadier.arguments.IntegerArgumentType; + /** + * @see brigadier:integer + */ + integer(min: number): com.mojang.brigadier.arguments.IntegerArgumentType; + /** + * @see brigadier:integer + */ + integer(min: number, max: number): com.mojang.brigadier.arguments.IntegerArgumentType; + /** + * @see brigadier:long + */ + long(): com.mojang.brigadier.arguments.LongArgumentType; + /** + * @see brigadier:long + */ + long(min: number): com.mojang.brigadier.arguments.LongArgumentType; + /** + * @see brigadier:long + */ + long(min: number, max: number): com.mojang.brigadier.arguments.LongArgumentType; + /** + * @see brigadier:string + */ + string(): com.mojang.brigadier.arguments.StringArgumentType; + /** + * @see brigadier:string + */ + greedyString(): com.mojang.brigadier.arguments.StringArgumentType; + /** + * @see brigadier:string + */ + word(): com.mojang.brigadier.arguments.StringArgumentType; + /** + * @see minecraft:angle + */ + angle(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:block_pos + */ + blockPos(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:block_predicate + */ + blockPredicate(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:block_state + */ + blockState(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:color + */ + color(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:column_pos + */ + columnPos(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:dimension + */ + dimension(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:entity + */ + entity(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:entity + */ + entities(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:float_range + */ + floatRange(): net.minecraft.commands.arguments.RangeArgument$Floats; + /** + * @see minecraft:game_profile + */ + gameProfile(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:game_profile + */ + player(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:game_profile + */ + players(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:gamemode + */ + gameMode(): net.minecraft.commands.arguments.GameModeArgument; + /** + * @see minecraft:int_range + */ + intRange(): net.minecraft.commands.arguments.RangeArgument$Ints; + /** + * @see minecraft:item_predicate + */ + itemPredicate(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:item_slot + */ + itemSlot(): net.minecraft.commands.arguments.SlotArgument; + /** + * @see minecraft:item_stack + */ + itemStack(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:message + */ + message(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:nbt_compound_tag + */ + nbtCompoundTag(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:nbt_path + */ + nbtPath(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:nbt_tag + */ + nbtTag(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:resource + */ + resource(): net.minecraft.commands.arguments.IdentifierArgument; + /** + * @see minecraft:rotation + */ + rotation(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:swizzle + */ + swizzle(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:time + */ + time(): net.minecraft.commands.arguments.TimeArgument; + /** + * @see minecraft:time + */ + time(minimum: number): net.minecraft.commands.arguments.TimeArgument; + /** + * @see minecraft:uuid + */ + uuid(): net.minecraft.commands.arguments.UuidArgument; + /** + * @see minecraft:vec2 + */ + vec2(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:vec2 + */ + vec2(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:vec3 + */ + vec3(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:vec3 + */ + vec3(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; + /** + * Allows choosing from a set list of strings. When suggested to the user, this + * will look as though this argument is multiple "literal()" nodes. + */ + choices(options: string): com.mojang.brigadier.arguments.ArgumentType; + /** + * Allows easy creation of a custom ArgumentType without needing to use + * JavaAdapter. Example: + * + * ```js + * const HEADS = 0; + * const TAILS = 1; + * + * const coinFlipArgType = Commands.custom({ + * parse(reader) { + * // `reader` is a com.mojang.brigadier.StringReader + * + * const savedCursor = reader.getCursor(); + * const str = reader.readString(); + * if (str === 'heads') + * return HEADS; + * if (str === 'tails') + * return TAILS; + * Commands.error(reader, `Expected one of: 'heads', 'tails'`); + * }, + * suggest(ctx, builder) { + * // ctx is a com.mojang.brigadier.context.CommandContext + * // builder is a com.mojang.brigadier.suggestion.SuggestionsBuilder + * builder.suggest('heads'); + * builder.suggest('tails'); + * return builder.buildFuture(); + * }, + * getExamples() { + * return ['heads', 'tails']; + * } + * }); + * ``` + * + * @see StringReader + * @see CommandContext + * @see SuggestionsBuilder + */ + custom(obj: org.mozilla.javascript.NativeObject): com.mojang.brigadier.arguments.ArgumentType; + /** + * Throw a detailed error given the reader, meant to be used with [custom] + */ + error(reader: com.mojang.brigadier.ImmutableStringReader, message: string): never; + /** + * Throw a detailed error given the reader, meant to be used with [custom] + */ + error(reader: com.mojang.brigadier.ImmutableStringReader, message: com.chattriggers.ctjs.api.message.TextComponent): never; + /** + * An alternative to the command register that allows full use of the + * functionality provided by Brigadier. + * + * For more information about Brigadier, see + * their GitHub page. + * Also see [CTCommand] for an example Brigadier command. + * + * ## General + * + * This API works similarly to Brigadier, however much of the annoyance + * of using the Brigadier API has been eliminated, mainly the excessive + * use of nested function calls. It works via a global context, so function + * calls are free. However, this means that multiples commands cannot be + * built at once. This means that commands should only ever be built on the + * main thread. If two commands are built at the same time, an error will be + * thrown. + * + * ## Argument Types + * + * The [ArgumentType] interface is a fundamental part of Brigadier, and + * most of the MC argument types have been exposed via helper function + * in this class. It is also possible to build new instances of + * [ArgumentType] via [custom]. + * + * When possible, the argument types returned from the helper function on + * this class resolve in a way that their Minecraft variants do. For example, + * the [message] type will replace selectors with their target entity, if + * possible. + * + * ## Basic Example + * + * Here is an example command that recreates the `/advancement` command + * (without any of the actual functionality, of course): + * + * ```js + * // The `Commands` object supports destructuring, which makes assembling long + * // commands much nicer + * const { argument, choices, exec, greedyString, literal, registerCommand, resource, players } = Commands; + * + * registerCommand('ctadvancement', () => { + * // Note the use of choices to avoid having to copy-paste two separate literal() trees + * argument('kind', choices('grant', 'revoke'), () => { + * argument('targets', players(), () => { + * literal('everything', () => { + * // exec() receives a single object with all of the arguments, which means we can + * // destructure it to pull out the ones we want. Only values from argument() calls + * // are included here; the literal nodes are ignored and have no impact on this object. + * exec(({ kind, targets }) => { + * ChatLib.chat(`${kind} everything from ${targets}`); + * }); + * }); + * + * literal('only', () => { + * argument('advancement', resource(), () => { + * argument('criterion', greedyString(), () => { + * exec(({ kind, targets, advancement, criterion }) => { + * ChatLib.chat(`${kind} only ${advancement} applied to ${targets} (criterion = ${criterion})`); + * }); + * }); + * }); + * }); + * + * argument('subkind', choices('from', 'through', 'until'), () => { + * argument('advancement', resource(), () => { + * exec(({ kind, subkind, targets, advancement }) => { + * ChatLib.chat(`kind = ${kind}, subkind = ${subkind}, advancement = ${advancement}, targets = ${targets}`); + * }); + * }); + * }); + * }); + * }); + * }); + * ``` + * + * ## Redirect + * + * Like Brigadier, this API supports assembling partial command nodes for use + * in redirection. To do this, use [buildCommand], which returns the command node + * (well, an internal representation of it). This object can then be passed to + * further calls to [redirect] inside of a [literal] or [argument] block. + * + * Examples: + * + * ```js + * // destructuring omitted + * + * const testCmdNode = buildCommand('testcmd', () => { + * exec(({ arg }) => { + * if (arg) { + * ChatLib.chat(`arg supplied, value = ${arg}`); + * } else { + * ChatLib.chat('no arg supplied'); + * } + * }); + * }); + * + * // Manually register it since we used buildCommand() instead of registerCommand() + * testCmdNode.register() + * + * registerCommand('testcmd', () => { + * argument('arg', greedyString(), () => { + * redirect(testCmdNode); + * }); + * }); + * ``` + */ + new(): com.chattriggers.ctjs.api.commands.DynamicCommands; + } + interface DynamicCommands extends com.chattriggers.ctjs.internal.commands.CommandCollection { + registerCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; + registerCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; + buildCommand(name: string): com.chattriggers.ctjs.api.commands.RootCommand; + buildCommand(name: string, builder: org.mozilla.javascript.Function | null | undefined): com.chattriggers.ctjs.api.commands.RootCommand; + argument(name: string, type: com.mojang.brigadier.arguments.ArgumentType, builder: org.mozilla.javascript.Function): void; + literal(name: string, builder: org.mozilla.javascript.Function): void; + redirect(node: com.chattriggers.ctjs.api.commands.RootCommand): void; + redirect(node: com.mojang.brigadier.tree.CommandNode): void; + exec(method: org.mozilla.javascript.Function): void; + /** + * A helper method for getting Fabric's client CommandDispatcher root node. This allows user + * commands to be redirected to the root node in the same way that "/execute run ..." does. + * + * As the result is a CommandNode, `.getChild(name)` can be used to access sub-command nodes + * to, for example, redirect to just `/advancement` instead of `/`. + */ + getDispatcherRoot(): com.mojang.brigadier.tree.RootCommandNode | null | undefined; + /** + * @see Argument Types: bool + */ + bool(): com.mojang.brigadier.arguments.BoolArgumentType; + /** + * @see brigadier:double + */ + double(): com.mojang.brigadier.arguments.DoubleArgumentType; + /** + * @see brigadier:double + */ + double(min: number): com.mojang.brigadier.arguments.DoubleArgumentType; + /** + * @see brigadier:double + */ + double(min: number, max: number): com.mojang.brigadier.arguments.DoubleArgumentType; + /** + * @see brigadier:float + */ + float(): com.mojang.brigadier.arguments.FloatArgumentType; + /** + * @see brigadier:float + */ + float(min: number): com.mojang.brigadier.arguments.FloatArgumentType; + /** + * @see brigadier:float + */ + float(min: number, max: number): com.mojang.brigadier.arguments.FloatArgumentType; + /** + * @see brigadier:integer + */ + integer(): com.mojang.brigadier.arguments.IntegerArgumentType; + /** + * @see brigadier:integer + */ + integer(min: number): com.mojang.brigadier.arguments.IntegerArgumentType; + /** + * @see brigadier:integer + */ + integer(min: number, max: number): com.mojang.brigadier.arguments.IntegerArgumentType; + /** + * @see brigadier:long + */ + long(): com.mojang.brigadier.arguments.LongArgumentType; + /** + * @see brigadier:long + */ + long(min: number): com.mojang.brigadier.arguments.LongArgumentType; + /** + * @see brigadier:long + */ + long(min: number, max: number): com.mojang.brigadier.arguments.LongArgumentType; + /** + * @see brigadier:string + */ + string(): com.mojang.brigadier.arguments.StringArgumentType; + /** + * @see brigadier:string + */ + greedyString(): com.mojang.brigadier.arguments.StringArgumentType; + /** + * @see brigadier:string + */ + word(): com.mojang.brigadier.arguments.StringArgumentType; + /** + * @see minecraft:angle + */ + angle(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:block_pos + */ + blockPos(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:block_predicate + */ + blockPredicate(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:block_state + */ + blockState(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:color + */ + color(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:column_pos + */ + columnPos(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:dimension + */ + dimension(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:entity + */ + entity(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:entity + */ + entities(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:float_range + */ + floatRange(): net.minecraft.commands.arguments.RangeArgument$Floats; + /** + * @see minecraft:game_profile + */ + gameProfile(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:game_profile + */ + player(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:game_profile + */ + players(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:gamemode + */ + gameMode(): net.minecraft.commands.arguments.GameModeArgument; + /** + * @see minecraft:int_range + */ + intRange(): net.minecraft.commands.arguments.RangeArgument$Ints; + /** + * @see minecraft:item_predicate + */ + itemPredicate(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:item_slot + */ + itemSlot(): net.minecraft.commands.arguments.SlotArgument; + /** + * @see minecraft:item_stack + */ + itemStack(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:message + */ + message(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:nbt_compound_tag + */ + nbtCompoundTag(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:nbt_path + */ + nbtPath(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:nbt_tag + */ + nbtTag(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:resource + */ + resource(): net.minecraft.commands.arguments.IdentifierArgument; + /** + * @see minecraft:rotation + */ + rotation(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:swizzle + */ + swizzle(): com.mojang.brigadier.arguments.ArgumentType>; + /** + * @see minecraft:time + */ + time(): net.minecraft.commands.arguments.TimeArgument; + /** + * @see minecraft:time + */ + time(minimum: number): net.minecraft.commands.arguments.TimeArgument; + /** + * @see minecraft:uuid + */ + uuid(): net.minecraft.commands.arguments.UuidArgument; + /** + * @see minecraft:vec2 + */ + vec2(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:vec2 + */ + vec2(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:vec3 + */ + vec3(): com.mojang.brigadier.arguments.ArgumentType; + /** + * @see minecraft:vec3 + */ + vec3(centerIntegers: boolean): com.mojang.brigadier.arguments.ArgumentType; + /** + * Allows choosing from a set list of strings. When suggested to the user, this + * will look as though this argument is multiple "literal()" nodes. + */ + choices(options: string): com.mojang.brigadier.arguments.ArgumentType; + /** + * Allows easy creation of a custom ArgumentType without needing to use + * JavaAdapter. Example: + * + * ```js + * const HEADS = 0; + * const TAILS = 1; + * + * const coinFlipArgType = Commands.custom({ + * parse(reader) { + * // `reader` is a com.mojang.brigadier.StringReader + * + * const savedCursor = reader.getCursor(); + * const str = reader.readString(); + * if (str === 'heads') + * return HEADS; + * if (str === 'tails') + * return TAILS; + * Commands.error(reader, `Expected one of: 'heads', 'tails'`); + * }, + * suggest(ctx, builder) { + * // ctx is a com.mojang.brigadier.context.CommandContext + * // builder is a com.mojang.brigadier.suggestion.SuggestionsBuilder + * builder.suggest('heads'); + * builder.suggest('tails'); + * return builder.buildFuture(); + * }, + * getExamples() { + * return ['heads', 'tails']; + * } + * }); + * ``` + * + * @see StringReader + * @see CommandContext + * @see SuggestionsBuilder + */ + custom(obj: org.mozilla.javascript.NativeObject): com.mojang.brigadier.arguments.ArgumentType; + /** + * Throw a detailed error given the reader, meant to be used with [custom] + */ + error(reader: com.mojang.brigadier.ImmutableStringReader, message: string): never; + /** + * Throw a detailed error given the reader, meant to be used with [custom] + */ + error(reader: com.mojang.brigadier.ImmutableStringReader, message: com.chattriggers.ctjs.api.message.TextComponent): never; + /** + * An alternative to the command register that allows full use of the + * functionality provided by Brigadier. + * + * For more information about Brigadier, see + * their GitHub page. + * Also see [CTCommand] for an example Brigadier command. + * + * ## General + * + * This API works similarly to Brigadier, however much of the annoyance + * of using the Brigadier API has been eliminated, mainly the excessive + * use of nested function calls. It works via a global context, so function + * calls are free. However, this means that multiples commands cannot be + * built at once. This means that commands should only ever be built on the + * main thread. If two commands are built at the same time, an error will be + * thrown. + * + * ## Argument Types + * + * The [ArgumentType] interface is a fundamental part of Brigadier, and + * most of the MC argument types have been exposed via helper function + * in this class. It is also possible to build new instances of + * [ArgumentType] via [custom]. + * + * When possible, the argument types returned from the helper function on + * this class resolve in a way that their Minecraft variants do. For example, + * the [message] type will replace selectors with their target entity, if + * possible. + * + * ## Basic Example + * + * Here is an example command that recreates the `/advancement` command + * (without any of the actual functionality, of course): + * + * ```js + * // The `Commands` object supports destructuring, which makes assembling long + * // commands much nicer + * const { argument, choices, exec, greedyString, literal, registerCommand, resource, players } = Commands; + * + * registerCommand('ctadvancement', () => { + * // Note the use of choices to avoid having to copy-paste two separate literal() trees + * argument('kind', choices('grant', 'revoke'), () => { + * argument('targets', players(), () => { + * literal('everything', () => { + * // exec() receives a single object with all of the arguments, which means we can + * // destructure it to pull out the ones we want. Only values from argument() calls + * // are included here; the literal nodes are ignored and have no impact on this object. + * exec(({ kind, targets }) => { + * ChatLib.chat(`${kind} everything from ${targets}`); + * }); + * }); + * + * literal('only', () => { + * argument('advancement', resource(), () => { + * argument('criterion', greedyString(), () => { + * exec(({ kind, targets, advancement, criterion }) => { + * ChatLib.chat(`${kind} only ${advancement} applied to ${targets} (criterion = ${criterion})`); + * }); + * }); + * }); + * }); + * + * argument('subkind', choices('from', 'through', 'until'), () => { + * argument('advancement', resource(), () => { + * exec(({ kind, subkind, targets, advancement }) => { + * ChatLib.chat(`kind = ${kind}, subkind = ${subkind}, advancement = ${advancement}, targets = ${targets}`); + * }); + * }); + * }); + * }); + * }); + * }); + * ``` + * + * ## Redirect + * + * Like Brigadier, this API supports assembling partial command nodes for use + * in redirection. To do this, use [buildCommand], which returns the command node + * (well, an internal representation of it). This object can then be passed to + * further calls to [redirect] inside of a [literal] or [argument] block. + * + * Examples: + * + * ```js + * // destructuring omitted + * + * const testCmdNode = buildCommand('testcmd', () => { + * exec(({ arg }) => { + * if (arg) { + * ChatLib.chat(`arg supplied, value = ${arg}`); + * } else { + * ChatLib.chat('no arg supplied'); + * } + * }); + * }); + * + * // Manually register it since we used buildCommand() instead of registerCommand() + * testCmdNode.register() + * + * registerCommand('testcmd', () => { + * argument('arg', greedyString(), () => { + * redirect(testCmdNode); + * }); + * }); + * ``` + */ + new(): com.chattriggers.ctjs.api.commands.DynamicCommands; + } + const DynamicCommands$AngleArgumentWrapper: { + new(angle: net.minecraft.commands.arguments.AngleArgument$SingleAngle): com.chattriggers.ctjs.api.commands.DynamicCommands$AngleArgumentWrapper; + } + interface DynamicCommands$AngleArgumentWrapper { + getAngle(): net.minecraft.commands.arguments.AngleArgument$SingleAngle; + getAngle(): number; + getAngle(entity: com.chattriggers.ctjs.api.entity.Entity): number; + component1(): net.minecraft.commands.arguments.AngleArgument$SingleAngle; + copy(angle: net.minecraft.commands.arguments.AngleArgument$SingleAngle): com.chattriggers.ctjs.api.commands.DynamicCommands$AngleArgumentWrapper; + } + const DynamicCommands$PosArgumentWrapper: { + new(impl: net.minecraft.commands.arguments.coordinates.Coordinates): com.chattriggers.ctjs.api.commands.DynamicCommands$PosArgumentWrapper; + } + interface DynamicCommands$PosArgumentWrapper extends net.minecraft.commands.arguments.coordinates.Coordinates { + getImpl(): net.minecraft.commands.arguments.coordinates.Coordinates; + toAbsolutePos(): net.minecraft.world.phys.Vec3; + toAbsoluteBlockPos(): com.chattriggers.ctjs.api.world.block.BlockPos; + toAbsoluteRotation(): net.minecraft.world.phys.Vec2; + component1(): net.minecraft.commands.arguments.coordinates.Coordinates; + copy(impl: net.minecraft.commands.arguments.coordinates.Coordinates): com.chattriggers.ctjs.api.commands.DynamicCommands$PosArgumentWrapper; + } + const DynamicCommands$BlockPredicateWrapper: { + new(impl: net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockPredicateWrapper; + } + interface DynamicCommands$BlockPredicateWrapper { + getImpl(): net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result; + test(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; + component1(): net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result; + copy(impl: net.minecraft.commands.arguments.blocks.BlockPredicateArgument$Result): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockPredicateWrapper; + } + const DynamicCommands$BlockStateArgumentWrapper: { + new(impl: net.minecraft.commands.arguments.blocks.BlockInput): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockStateArgumentWrapper; + } + interface DynamicCommands$BlockStateArgumentWrapper { + getImpl(): net.minecraft.commands.arguments.blocks.BlockInput; + test(blockPos: com.chattriggers.ctjs.api.world.block.BlockPos): boolean; + component1(): net.minecraft.commands.arguments.blocks.BlockInput; + copy(impl: net.minecraft.commands.arguments.blocks.BlockInput): com.chattriggers.ctjs.api.commands.DynamicCommands$BlockStateArgumentWrapper; + } + const DynamicCommands$EntitySelectorWrapper: { + new(impl: net.minecraft.commands.arguments.selector.EntitySelector): com.chattriggers.ctjs.api.commands.DynamicCommands$EntitySelectorWrapper; + } + interface DynamicCommands$EntitySelectorWrapper { + getEntity(): com.chattriggers.ctjs.api.entity.Entity; + getEntities(): Array; + getPlayers(): Array; + } + const DynamicCommands$ItemStackArgumentWrapper: { + new(impl: net.minecraft.commands.arguments.item.ItemInput): com.chattriggers.ctjs.api.commands.DynamicCommands$ItemStackArgumentWrapper; + } + interface DynamicCommands$ItemStackArgumentWrapper { + getItemType(): com.chattriggers.ctjs.api.inventory.ItemType; + test(type: com.chattriggers.ctjs.api.inventory.ItemType): boolean; + component1(): net.minecraft.commands.arguments.item.ItemInput; + copy(impl: net.minecraft.commands.arguments.item.ItemInput): com.chattriggers.ctjs.api.commands.DynamicCommands$ItemStackArgumentWrapper; + } + const DynamicCommands$MessageFormatArgumentWrapper: { + new(impl: net.minecraft.commands.arguments.MessageArgument$Message): com.chattriggers.ctjs.api.commands.DynamicCommands$MessageFormatArgumentWrapper; + } + interface DynamicCommands$MessageFormatArgumentWrapper { + getText(): string; + setText(value: string): void; + format(): com.chattriggers.ctjs.api.message.TextComponent; + component1(): net.minecraft.commands.arguments.MessageArgument$Message; + copy(impl: net.minecraft.commands.arguments.MessageArgument$Message): com.chattriggers.ctjs.api.commands.DynamicCommands$MessageFormatArgumentWrapper; + } + const DynamicCommands$NbtPathWrapper: { + new(impl: net.minecraft.commands.arguments.NbtPathArgument$NbtPath): com.chattriggers.ctjs.api.commands.DynamicCommands$NbtPathWrapper; + } + interface DynamicCommands$NbtPathWrapper { + get(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): Array; + count(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): number; + getOrInit(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase, supplier: kotlin.Function0): Array; + put(nbt: com.chattriggers.ctjs.api.inventory.nbt.NBTBase, source: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): number; + insert(index: number, compound: com.chattriggers.ctjs.api.inventory.nbt.NBTTagCompound, elements: Array): number; + remove(element: com.chattriggers.ctjs.api.inventory.nbt.NBTBase): number; + component1(): net.minecraft.commands.arguments.NbtPathArgument$NbtPath; + copy(impl: net.minecraft.commands.arguments.NbtPathArgument$NbtPath): com.chattriggers.ctjs.api.commands.DynamicCommands$NbtPathWrapper; + } + } + namespace client { + const KeyBind: { + /** + * Creates a new keybind, editable in the user's controls. + * + * @param description what the keybind does + * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A + * @param category the keybind category the keybind will be in + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + new(description: string, keyCode: number): com.chattriggers.ctjs.api.client.KeyBind; + /** + * Creates a new keybind, editable in the user's controls. + * + * @param description what the keybind does + * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A + * @param category the keybind category the keybind will be in + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + new(description: string, keyCode: number, category: string): com.chattriggers.ctjs.api.client.KeyBind; + new(keyBinding: net.minecraft.client.KeyMapping): com.chattriggers.ctjs.api.client.KeyBind; + } + interface KeyBind { + registerKeyPress(method: any): com.chattriggers.ctjs.api.client.KeyBind; + registerKeyRelease(method: any): com.chattriggers.ctjs.api.client.KeyBind; + registerKeyDown(method: any): com.chattriggers.ctjs.api.client.KeyBind; + unregisterKeyPress(): com.chattriggers.ctjs.api.client.KeyBind; + unregisterKeyRelease(): com.chattriggers.ctjs.api.client.KeyBind; + unregisterKeyDown(): com.chattriggers.ctjs.api.client.KeyBind; + /** + * Returns true if the key is pressed (used for continuous querying). + * + * @return whether the key is pressed + */ + isKeyDown(): boolean; + /** + * Returns true on the initial key press. For continuous querying use [isKeyDown]. + * + * @return whether the key has just been pressed + */ + isPressed(): boolean; + /** + * Gets the description of the key. + * + * @return the description + */ + getDescription(): string; + /** + * Gets the key code of the key. + * + * @return the integer key code + */ + getKeyCode(): number; + /** + * Gets the category of the key. + * + * @return the category + */ + getCategory(): string; + /** + * Sets the state of the key. + * + * @param pressed True to press, False to release + */ + setState(pressed: boolean): void; + } + const KeyBind$Companion: { + new(): com.chattriggers.ctjs.api.client.KeyBind$Companion; + } + interface KeyBind$Companion { + new(): com.chattriggers.ctjs.api.client.KeyBind$Companion; + } + const ScreenHelper: { + MenuButton: typeof com.chattriggers.ctjs.api.client.ScreenHelper$MenuButton; + titleFont: com.chattriggers.ctjs.api.render.Font; + smallerFont: com.chattriggers.ctjs.api.render.Font; + drawMenuButton(label: string, x: number, y: number, width: number, height: number, hovered: boolean, textColorOverride: number | null | undefined): void; + argb(a: number, r: number, g: number, b: number): number; + new(): com.chattriggers.ctjs.api.client.ScreenHelper; + } + interface ScreenHelper { + titleFont: com.chattriggers.ctjs.api.render.Font; + smallerFont: com.chattriggers.ctjs.api.render.Font; + drawMenuButton(label: string, x: number, y: number, width: number, height: number, hovered: boolean, textColorOverride: number | null | undefined): void; + argb(a: number, r: number, g: number, b: number): number; + new(): com.chattriggers.ctjs.api.client.ScreenHelper; + } + const ScreenHelper$MenuButton: { + new(label: string, x: number, y: number, width: number, height: number, onClick: kotlin.Function0): com.chattriggers.ctjs.api.client.ScreenHelper$MenuButton; + } + interface ScreenHelper$MenuButton { + getLabel(): string; + getX(): number; + getY(): number; + getWidth(): number; + getHeight(): number; + getOnClick(): kotlin.Function0; + isHovered(mouseX: number, mouseY: number): boolean; + component1(): string; + component2(): number; + component3(): number; + component4(): number; + component5(): number; + component6(): kotlin.Function0; + copy(label: string, x: number, y: number, width: number, height: number, onClick: kotlin.Function0): com.chattriggers.ctjs.api.client.ScreenHelper$MenuButton; + } + const FileLib: { + /** + * Writes a file to folder in modules. + * + * @param importName name of the import + * @param fileName name of the file + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(importName: string, fileName: string, toWrite: string): void; + /** + * Writes a file to folder in modules. + * + * @param importName name of the import + * @param fileName name of the file + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(importName: string, fileName: string, toWrite: string, recursive: boolean): void; + /** + * Writes a file to anywhere on the system. + * Use "./" for the ".minecraft" folder. + * + * @param fileLocation the location and file name + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(fileLocation: string, toWrite: string): void; + /** + * Writes a file to anywhere on the system. + * Use "./" for the ".minecraft" folder. + * + * @param fileLocation the location and file name + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(fileLocation: string, toWrite: string, recursive: boolean): void; + /** + * Writes a file to folder in modules. + * + * @param importName name of the import + * @param fileName name of the file + * @param toAppend string to append in file + */ + append(importName: string, fileName: string, toAppend: string): void; + /** + * Writes a file to anywhere on the system. + * Use "./" for the ".minecraft" folder. + * + * @param fileLocation the location and file name + * @param toAppend string to append in file + */ + append(fileLocation: string, toAppend: string): void; + /** + * Reads a file from folder in modules. + * Returns null if file is not found. + * + * @param importName name of the import + * @param fileName name of the file + * @return the string in the file, or null if not found + */ + read(importName: string, fileName: string): string | null | undefined; + /** + * Reads a file from anywhere on the system. + * Use "./" for the ".minecraft" folder. + * Returns null if file is not found. + * + * @param fileLocation the location and file name + * @return the string in the file, or null if not found + */ + read(fileLocation: string): string | null | undefined; + /** + * Reads a file from anywhere on the system using java.io.File. + * + * @param file the java.io.File to read + * @return the string in the file, or null if not found + */ + read(file: java.io.File): string | null | undefined; + /** + * Determines if a file or directory exists at the specified location + * + * @param importName name of the import + * @param fileName name of the file + * @return if the file exists + */ + exists(importName: string, fileName: string): boolean; + /** + * Determines if a file or directory exists at the specified location + * + * @param fileLocation the path of the file + * @return if the file exists + */ + exists(fileLocation: string): boolean; + /** + * Determines if a file or directory exists at the specified location + * + * @param importName name of the import + * @param fileName name of the file + * @return if the location is a directory + */ + isDirectory(importName: string, fileName: string): boolean; + /** + * Determines if a file or directory exists at the specified location + * + * @param fileLocation the path of the file + * @return if the location is a directory + */ + isDirectory(fileLocation: string): boolean; + /** + * Gets the contents of a url as a string. + * + * @param theUrl the url to get the data from + * @param userAgent the user agent to use in the connection + * @return the string stored in the url content + */ + getUrlContent(theUrl: string): string; + /** + * Gets the contents of a url as a string. + * + * @param theUrl the url to get the data from + * @param userAgent the user agent to use in the connection + * @return the string stored in the url content + */ + getUrlContent(theUrl: string, userAgent: string | null | undefined): string; + /** + * Deletes a directory at the specified location + * + * @param dir the directory to delete + * @return if the directory was deleted + */ + deleteDirectory(dir: string): boolean; + /** + * Deletes a directory at the specified location + * + * @param dir the directory to delete + * @return if the directory was deleted + */ + deleteDirectory(dir: java.io.File): boolean; + /** + * Extracts a zip file specified by the zipFilePath to a directory specified by + * destDirectory (will be created if does not exist). + * @param zipFilePath the zip file path + * @param destDirectory the destination directory + * @throws IOException IOException + */ + unzip(zipFilePath: string, destDirectory: string): void; + /** + * Encodes a string to a base64 string + * + * @param toEncode string to encode + * @return base64 encoded string + */ + encodeBase64(toEncode: string): string; + /** + * Decodes a base64 string to a string + * + * @param toDecode base64 encoded string to decode + * @return decoded string + */ + decodeBase64(toDecode: string): string; + /** + * Opens a url in the default browser + * + * @param url the url to open + */ + open(url: string): void; + /** + * Opens a path in the file explorer + * + * @param path the path to open + */ + open(path: java.io.File): void; + new(): com.chattriggers.ctjs.api.client.FileLib; + } + interface FileLib { + /** + * Writes a file to folder in modules. + * + * @param importName name of the import + * @param fileName name of the file + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(importName: string, fileName: string, toWrite: string): void; + /** + * Writes a file to folder in modules. + * + * @param importName name of the import + * @param fileName name of the file + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(importName: string, fileName: string, toWrite: string, recursive: boolean): void; + /** + * Writes a file to anywhere on the system. + * Use "./" for the ".minecraft" folder. + * + * @param fileLocation the location and file name + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(fileLocation: string, toWrite: string): void; + /** + * Writes a file to anywhere on the system. + * Use "./" for the ".minecraft" folder. + * + * @param fileLocation the location and file name + * @param toWrite string to write in file + * @param recursive whether to create folders to the file location if they don't exist + */ + write(fileLocation: string, toWrite: string, recursive: boolean): void; + /** + * Writes a file to folder in modules. + * + * @param importName name of the import + * @param fileName name of the file + * @param toAppend string to append in file + */ + append(importName: string, fileName: string, toAppend: string): void; + /** + * Writes a file to anywhere on the system. + * Use "./" for the ".minecraft" folder. + * + * @param fileLocation the location and file name + * @param toAppend string to append in file + */ + append(fileLocation: string, toAppend: string): void; + /** + * Reads a file from folder in modules. + * Returns null if file is not found. + * + * @param importName name of the import + * @param fileName name of the file + * @return the string in the file, or null if not found + */ + read(importName: string, fileName: string): string | null | undefined; + /** + * Reads a file from anywhere on the system. + * Use "./" for the ".minecraft" folder. + * Returns null if file is not found. + * + * @param fileLocation the location and file name + * @return the string in the file, or null if not found + */ + read(fileLocation: string): string | null | undefined; + /** + * Reads a file from anywhere on the system using java.io.File. + * + * @param file the java.io.File to read + * @return the string in the file, or null if not found + */ + read(file: java.io.File): string | null | undefined; + /** + * Determines if a file or directory exists at the specified location + * + * @param importName name of the import + * @param fileName name of the file + * @return if the file exists + */ + exists(importName: string, fileName: string): boolean; + /** + * Determines if a file or directory exists at the specified location + * + * @param fileLocation the path of the file + * @return if the file exists + */ + exists(fileLocation: string): boolean; + /** + * Determines if a file or directory exists at the specified location + * + * @param importName name of the import + * @param fileName name of the file + * @return if the location is a directory + */ + isDirectory(importName: string, fileName: string): boolean; + /** + * Determines if a file or directory exists at the specified location + * + * @param fileLocation the path of the file + * @return if the location is a directory + */ + isDirectory(fileLocation: string): boolean; + /** + * Gets the contents of a url as a string. + * + * @param theUrl the url to get the data from + * @param userAgent the user agent to use in the connection + * @return the string stored in the url content + */ + getUrlContent(theUrl: string): string; + /** + * Gets the contents of a url as a string. + * + * @param theUrl the url to get the data from + * @param userAgent the user agent to use in the connection + * @return the string stored in the url content + */ + getUrlContent(theUrl: string, userAgent: string | null | undefined): string; + /** + * Deletes a directory at the specified location + * + * @param dir the directory to delete + * @return if the directory was deleted + */ + deleteDirectory(dir: string): boolean; + /** + * Deletes a directory at the specified location + * + * @param dir the directory to delete + * @return if the directory was deleted + */ + deleteDirectory(dir: java.io.File): boolean; + /** + * Extracts a zip file specified by the zipFilePath to a directory specified by + * destDirectory (will be created if does not exist). + * @param zipFilePath the zip file path + * @param destDirectory the destination directory + * @throws IOException IOException + */ + unzip(zipFilePath: string, destDirectory: string): void; + /** + * Encodes a string to a base64 string + * + * @param toEncode string to encode + * @return base64 encoded string + */ + encodeBase64(toEncode: string): string; + /** + * Decodes a base64 string to a string + * + * @param toDecode base64 encoded string to decode + * @return decoded string + */ + decodeBase64(toDecode: string): string; + /** + * Opens a url in the default browser + * + * @param url the url to open + */ + open(url: string): void; + /** + * Opens a path in the file explorer + * + * @param path the path to open + */ + open(path: java.io.File): void; + new(): com.chattriggers.ctjs.api.client.FileLib; + } + const MathLib: { + /** + * Maps a number from one range to another. + * + * @param number the number to map + * @param in_min the original range min + * @param in_max the original range max + * @param out_min the final range min + * @param out_max the final range max + * @return the re-mapped number + */ + map(number: number, in_min: number, in_max: number, out_min: number, out_max: number): number; + /** + * Clamps a floating number between two values. + * + * @param number the number to clamp + * @param min the minimum + * @param max the maximum + * @return the clamped number + */ + clampFloat(number: number, min: number, max: number): number; + /** + * Clamps an integer number between two values. + * + * @param number the number to clamp + * @param min the minimum + * @param max the maximum + * @return the clamped number + */ + clamp(number: number, min: number, max: number): number; + new(): com.chattriggers.ctjs.api.client.MathLib; + } + interface MathLib { + /** + * Maps a number from one range to another. + * + * @param number the number to map + * @param in_min the original range min + * @param in_max the original range max + * @param out_min the final range min + * @param out_max the final range max + * @return the re-mapped number + */ + map(number: number, in_min: number, in_max: number, out_min: number, out_max: number): number; + /** + * Clamps a floating number between two values. + * + * @param number the number to clamp + * @param min the minimum + * @param max the maximum + * @return the clamped number + */ + clampFloat(number: number, min: number, max: number): number; + /** + * Clamps an integer number between two values. + * + * @param number the number to clamp + * @param min the minimum + * @param max the maximum + * @return the clamped number + */ + clamp(number: number, min: number, max: number): number; + new(): com.chattriggers.ctjs.api.client.MathLib; + } + const ProxyInfo: { + getProxies(): Array; + addProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; + removeProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; + updateProxy(original: com.chattriggers.ctjs.api.client.Proxy, newProxy: com.chattriggers.ctjs.api.client.Proxy): void; + setProxyEnabled(proxy: com.chattriggers.ctjs.api.client.Proxy, enabled: boolean): void; + getEnabledProxies(): Array; + new(): com.chattriggers.ctjs.api.client.ProxyInfo; + } + interface ProxyInfo { + getProxies(): Array; + addProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; + removeProxy(proxy: com.chattriggers.ctjs.api.client.Proxy): void; + updateProxy(original: com.chattriggers.ctjs.api.client.Proxy, newProxy: com.chattriggers.ctjs.api.client.Proxy): void; + setProxyEnabled(proxy: com.chattriggers.ctjs.api.client.Proxy, enabled: boolean): void; + getEnabledProxies(): Array; + new(): com.chattriggers.ctjs.api.client.ProxyInfo; + } + const Proxy: { + new(ip: string, port: number, name: string, username: string, password: string, isEnabled: boolean): com.chattriggers.ctjs.api.client.Proxy; + } + interface Proxy { + getIp(): string; + setIp(value: string): void; + getPort(): number; + setPort(value: number): void; + getName(): string; + setName(value: string): void; + getUsername(): string; + setUsername(value: string): void; + getPassword(): string; + setPassword(value: string): void; + isEnabled(): boolean; + setEnabled(value: boolean): void; + component1(): string; + component2(): number; + component3(): string; + component4(): string; + component5(): string; + component6(): boolean; + copy(ip: string, port: number, name: string, username: string, password: string, isEnabled: boolean): com.chattriggers.ctjs.api.client.Proxy; + } + const DiscordRPC: { + stayOn(): void; + turnOff(): void; + updatePresence(details: string, state: string): void; + resetTimestamp(): void; + revertToIdle(): void; + new(): com.chattriggers.ctjs.api.client.DiscordRPC; + } + interface DiscordRPC { + stayOn(): void; + turnOff(): void; + updatePresence(details: string, state: string): void; + resetTimestamp(): void; + revertToIdle(): void; + new(): com.chattriggers.ctjs.api.client.DiscordRPC; + } + const ProxyManagerScreen: { + new(parent: net.minecraft.client.gui.screens.Screen): com.chattriggers.ctjs.api.client.ProxyManagerScreen; + } + interface ProxyManagerScreen extends net.minecraft.client.gui.screens.Screen { + refreshList(): void; + } + const ProxyEditScreen: { + new(parent: com.chattriggers.ctjs.api.client.ProxyManagerScreen, existingProxy: com.chattriggers.ctjs.api.client.Proxy | null | undefined): com.chattriggers.ctjs.api.client.ProxyEditScreen; + } + interface ProxyEditScreen extends net.minecraft.client.gui.screens.Screen { + } + const Client: { + RenderLimiter: typeof com.chattriggers.ctjs.api.client.Client$RenderLimiter; + CurrentGuiWrapper: typeof com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; + CameraWrapper: typeof com.chattriggers.ctjs.api.client.Client$CameraWrapper; + isFreecam(): boolean; + setFreecam(value: boolean): void; + isFreelook(): boolean; + setFreelook(value: boolean): void; + isUngrabbed(): boolean; + setUngrabbed(value: boolean): void; + isInputLocked(): boolean; + setInputLocked(value: boolean): void; + isMacroEnabled(): boolean; + setMacroEnabled(value: boolean): void; + isForcePerspective(): boolean; + setForcePerspective(value: boolean): void; + getLimitFps(): boolean; + setLimitFps(value: boolean): void; + getMuteGame(): boolean; + setMuteGame(value: boolean): void; + getRenderLimiter(): com.chattriggers.ctjs.api.client.Client$RenderLimiter; + setRenderLimiter(value: com.chattriggers.ctjs.api.client.Client$RenderLimiter): void; + getCameraPosition(): net.minecraft.world.phys.Vec3 | null | undefined; + setCameraPosition(value: net.minecraft.world.phys.Vec3 | null | undefined): void; + getFreelookDistance(): number; + setFreelookDistance(value: number): void; + getSpectatedEntity(): net.minecraft.world.entity.LivingEntity | null | undefined; + setSpectatedEntity(value: net.minecraft.world.entity.LivingEntity | null | undefined): void; + currentGui: com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; + camera: com.chattriggers.ctjs.api.client.Client$CameraWrapper; + setCameraRotation(yaw: number, pitch: number): void; + clearCameraRotation(): void; + getCameraYaw(): number | null | undefined; + getCameraPitch(): number | null | undefined; + setNameProcessor(processor: org.mozilla.javascript.Callable | null | undefined): void; + setNameReplacement(username: string | null | undefined, replacement: string | null | undefined): void; + hasNameProcessor(): boolean; + processName(original: net.minecraft.network.chat.Component): net.minecraft.network.chat.Component; + /** + * Gets Minecraft's Minecraft object + * + * @return The Minecraft object + */ + getMinecraft(): net.minecraft.client.Minecraft; + /** + * Gets Minecraft's NetHandlerPlayClient object + * + * @return The NetHandlerPlayClient object + */ + getConnection(): net.minecraft.client.multiplayer.ClientPacketListener | null | undefined; + /** + * Schedule's a task to run on Minecraft's main thread in [delay] ticks. + * Defaults to the next tick. + * @param delay The delay in ticks + * @param callback The task to run on the main thread + */ + scheduleTask(callback: kotlin.Function0): void; + /** + * Schedule's a task to run on Minecraft's main thread in [delay] ticks. + * Defaults to the next tick. + * @param delay The delay in ticks + * @param callback The task to run on the main thread + */ + scheduleTask(delay: number, callback: kotlin.Function0): void; + /** + * Quits the client back to the main menu. + * This acts just like clicking the "Disconnect" or "Save and quit to title" button. + */ + disconnect(): void; + /** + * Connects to the server with the given ip. + * @param ip The ip to connect to + */ + connect(ip: string): void; + /** + * Connects to the server with the given ip. + * @param ip The ip to connect to + */ + connect(ip: string, port: number): void; + getCurrentScreen(): net.minecraft.client.gui.screens.Screen | null | undefined; + setCurrentScreen(screen: net.minecraft.client.gui.screens.Screen | null | undefined): void; + getMainRenderTarget(): com.mojang.blaze3d.pipeline.RenderTarget; + reloadWorldRenderer(): void; + /** + * Gets the Minecraft ChatHud object for the chat gui + * + * @return The GuiNewChat object for the chat gui + */ + getChatGui(): net.minecraft.client.gui.components.ChatComponent | null | undefined; + isInChat(): boolean; + getTabGui(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; + isInTab(): boolean; + /** + * Gets whether the Minecraft window is active + * and in the foreground of the user's screen. + * + * @return true if the game is active, false otherwise + */ + isTabbedIn(): boolean; + isControlDown(): boolean; + isShiftDown(): boolean; + isAltDown(): boolean; + getFPS(): number; + getVersion(): string; + getSystemTime(): number; + getMouseX(): number; + getMouseY(): number; + isInGui(): boolean; + /** + * Gets the chat message currently typed into the chat gui. + * + * @return A blank string if the gui isn't open, otherwise, the message + */ + getCurrentChatMessage(): string; + /** + * Sets the current chat message, if the chat gui is not open, one will be opened. + * + * @param message the message to put in the chat text box. + */ + setCurrentChatMessage(message: string): void; + setSignLine(line: number, text: string): void; + resumeHeldKeys(): void; + releaseHeldKey(input: com.mojang.blaze3d.platform.InputConstants$Key): void; + leftClick(): void; + rightClick(): void; + setKey(key: string): boolean; + setKey(key: string, pressed: boolean): boolean; + isKeyDown(key: string): boolean; + stopMovement(): void; + unpressKeys(): void; + sendPacket(packet: net.minecraft.network.protocol.Packet): void; + sendSequencedPacket(packetFactory: kotlin.Function1>): void; + /** + * Display a title. + * + * @param title title text + * @param subtitle subtitle text + * @param fadeIn time to fade in + * @param time time to stay on screen + * @param fadeOut time to fade out + */ + showTitle(title: string | null | undefined, subtitle: string | null | undefined, fadeIn: number, time: number, fadeOut: number): void; + /** + * Copies a string to the clipboard + * + * @param text The text to copy + */ + copy(): void; + /** + * Copies a string to the clipboard + * + * @param text The text to copy + */ + copy(text: string): void; + /** + * Get the string currently on the clipboard + */ + paste(): string; + /** + * Get the [KeyBinding] from an already existing Minecraft KeyBinding, otherwise, returns null. + * + * @param keyCode the keycode to search for, see Keyboard below. Ex. Keyboard.KEY_A + * @return the [KeyBinding] from a Minecraft KeyBinding, or null if one doesn't exist + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + getKeyBindFromKey(keyCode: number): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; + /** + * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. + * + * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A + * @param description the description of the keybind + * @param category the keybind category the keybind will be in + * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + getKeyBindFromKey(keyCode: number, description: string): com.chattriggers.ctjs.api.client.KeyBind; + /** + * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. + * + * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A + * @param description the description of the keybind + * @param category the keybind category the keybind will be in + * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + getKeyBindFromKey(keyCode: number, description: string, category: string): com.chattriggers.ctjs.api.client.KeyBind; + /** + * Get the [KeyBinding] from an already existing + * Minecraft KeyBinding, otherwise, returns null. + * + * @param description the description of the keybind + * @return the [KeyBinding], or null if one doesn't exist + */ + getKeyBindFromDescription(description: string): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; + new(): com.chattriggers.ctjs.api.client.Client; + } + interface Client { + isFreecam(): boolean; + setFreecam(value: boolean): void; + isFreelook(): boolean; + setFreelook(value: boolean): void; + isUngrabbed(): boolean; + setUngrabbed(value: boolean): void; + isInputLocked(): boolean; + setInputLocked(value: boolean): void; + isMacroEnabled(): boolean; + setMacroEnabled(value: boolean): void; + isForcePerspective(): boolean; + setForcePerspective(value: boolean): void; + getLimitFps(): boolean; + setLimitFps(value: boolean): void; + getMuteGame(): boolean; + setMuteGame(value: boolean): void; + getRenderLimiter(): com.chattriggers.ctjs.api.client.Client$RenderLimiter; + setRenderLimiter(value: com.chattriggers.ctjs.api.client.Client$RenderLimiter): void; + getCameraPosition(): net.minecraft.world.phys.Vec3 | null | undefined; + setCameraPosition(value: net.minecraft.world.phys.Vec3 | null | undefined): void; + getFreelookDistance(): number; + setFreelookDistance(value: number): void; + getSpectatedEntity(): net.minecraft.world.entity.LivingEntity | null | undefined; + setSpectatedEntity(value: net.minecraft.world.entity.LivingEntity | null | undefined): void; + currentGui: com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; + camera: com.chattriggers.ctjs.api.client.Client$CameraWrapper; + setCameraRotation(yaw: number, pitch: number): void; + clearCameraRotation(): void; + getCameraYaw(): number | null | undefined; + getCameraPitch(): number | null | undefined; + setNameProcessor(processor: org.mozilla.javascript.Callable | null | undefined): void; + setNameReplacement(username: string | null | undefined, replacement: string | null | undefined): void; + hasNameProcessor(): boolean; + processName(original: net.minecraft.network.chat.Component): net.minecraft.network.chat.Component; + /** + * Gets Minecraft's Minecraft object + * + * @return The Minecraft object + */ + getMinecraft(): net.minecraft.client.Minecraft; + /** + * Gets Minecraft's NetHandlerPlayClient object + * + * @return The NetHandlerPlayClient object + */ + getConnection(): net.minecraft.client.multiplayer.ClientPacketListener | null | undefined; + /** + * Schedule's a task to run on Minecraft's main thread in [delay] ticks. + * Defaults to the next tick. + * @param delay The delay in ticks + * @param callback The task to run on the main thread + */ + scheduleTask(callback: kotlin.Function0): void; + /** + * Schedule's a task to run on Minecraft's main thread in [delay] ticks. + * Defaults to the next tick. + * @param delay The delay in ticks + * @param callback The task to run on the main thread + */ + scheduleTask(delay: number, callback: kotlin.Function0): void; + /** + * Quits the client back to the main menu. + * This acts just like clicking the "Disconnect" or "Save and quit to title" button. + */ + disconnect(): void; + /** + * Connects to the server with the given ip. + * @param ip The ip to connect to + */ + connect(ip: string): void; + /** + * Connects to the server with the given ip. + * @param ip The ip to connect to + */ + connect(ip: string, port: number): void; + getCurrentScreen(): net.minecraft.client.gui.screens.Screen | null | undefined; + setCurrentScreen(screen: net.minecraft.client.gui.screens.Screen | null | undefined): void; + getMainRenderTarget(): com.mojang.blaze3d.pipeline.RenderTarget; + reloadWorldRenderer(): void; + /** + * Gets the Minecraft ChatHud object for the chat gui + * + * @return The GuiNewChat object for the chat gui + */ + getChatGui(): net.minecraft.client.gui.components.ChatComponent | null | undefined; + isInChat(): boolean; + getTabGui(): net.minecraft.client.gui.components.PlayerTabOverlay | null | undefined; + isInTab(): boolean; + /** + * Gets whether the Minecraft window is active + * and in the foreground of the user's screen. + * + * @return true if the game is active, false otherwise + */ + isTabbedIn(): boolean; + isControlDown(): boolean; + isShiftDown(): boolean; + isAltDown(): boolean; + getFPS(): number; + getVersion(): string; + getSystemTime(): number; + getMouseX(): number; + getMouseY(): number; + isInGui(): boolean; + /** + * Gets the chat message currently typed into the chat gui. + * + * @return A blank string if the gui isn't open, otherwise, the message + */ + getCurrentChatMessage(): string; + /** + * Sets the current chat message, if the chat gui is not open, one will be opened. + * + * @param message the message to put in the chat text box. + */ + setCurrentChatMessage(message: string): void; + setSignLine(line: number, text: string): void; + resumeHeldKeys(): void; + releaseHeldKey(input: com.mojang.blaze3d.platform.InputConstants$Key): void; + leftClick(): void; + rightClick(): void; + setKey(key: string): boolean; + setKey(key: string, pressed: boolean): boolean; + isKeyDown(key: string): boolean; + stopMovement(): void; + unpressKeys(): void; + sendPacket(packet: net.minecraft.network.protocol.Packet): void; + sendSequencedPacket(packetFactory: kotlin.Function1>): void; + /** + * Display a title. + * + * @param title title text + * @param subtitle subtitle text + * @param fadeIn time to fade in + * @param time time to stay on screen + * @param fadeOut time to fade out + */ + showTitle(title: string | null | undefined, subtitle: string | null | undefined, fadeIn: number, time: number, fadeOut: number): void; + /** + * Copies a string to the clipboard + * + * @param text The text to copy + */ + copy(): void; + /** + * Copies a string to the clipboard + * + * @param text The text to copy + */ + copy(text: string): void; + /** + * Get the string currently on the clipboard + */ + paste(): string; + /** + * Get the [KeyBinding] from an already existing Minecraft KeyBinding, otherwise, returns null. + * + * @param keyCode the keycode to search for, see Keyboard below. Ex. Keyboard.KEY_A + * @return the [KeyBinding] from a Minecraft KeyBinding, or null if one doesn't exist + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + getKeyBindFromKey(keyCode: number): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; + /** + * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. + * + * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A + * @param description the description of the keybind + * @param category the keybind category the keybind will be in + * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + getKeyBindFromKey(keyCode: number, description: string): com.chattriggers.ctjs.api.client.KeyBind; + /** + * Get the [KeyBinding] from an already existing Minecraft KeyBinding, else, return a new one. + * + * @param keyCode the keycode which the keybind will respond to, see Keyboard below. Ex. Keyboard.KEY_A + * @param description the description of the keybind + * @param category the keybind category the keybind will be in + * @return the [KeyBinding] from a Minecraft KeyBinding, or a new one if one doesn't exist + * @see [org.lwjgl.input.Keyboard](http://legacy.lwjgl.org/javadoc/org/lwjgl/input/Keyboard.html) + */ + getKeyBindFromKey(keyCode: number, description: string, category: string): com.chattriggers.ctjs.api.client.KeyBind; + /** + * Get the [KeyBinding] from an already existing + * Minecraft KeyBinding, otherwise, returns null. + * + * @param description the description of the keybind + * @return the [KeyBinding], or null if one doesn't exist + */ + getKeyBindFromDescription(description: string): com.chattriggers.ctjs.api.client.KeyBind | null | undefined; + new(): com.chattriggers.ctjs.api.client.Client; + } + const Client$RenderLimiter: { + OFF: com.chattriggers.ctjs.api.client.Client$RenderLimiter; + LIMIT_CHUNKS: com.chattriggers.ctjs.api.client.Client$RenderLimiter; + NO_RENDER: com.chattriggers.ctjs.api.client.Client$RenderLimiter; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.client.Client$RenderLimiter; + } + interface Client$RenderLimiter extends kotlin.Enum { + } + const Client$CurrentGuiWrapper: { + new(): com.chattriggers.ctjs.api.client.Client$CurrentGuiWrapper; + } + interface Client$CurrentGuiWrapper { + /** + * Gets the Java class name of the currently open gui, for example, "GuiChest" + * + * @return the class name of the current gui + */ + getClassName(): string; + /** + * Gets the Minecraft gui class that is currently open + * + * @return the Minecraft gui + */ + get(): net.minecraft.client.gui.screens.Screen | null | undefined; + set(screen: net.minecraft.client.gui.screens.Screen | null | undefined): void; + /** + * Gets the slot under the mouse in the current gui, if one exists. + * + * @return the [Slot] under the mouse + */ + getSlotUnderMouse(): com.chattriggers.ctjs.api.inventory.Slot | null | undefined; + /** + * Closes the currently open gui + */ + close(): void; + } + const Client$CameraWrapper: { + new(): com.chattriggers.ctjs.api.client.Client$CameraWrapper; + } + interface Client$CameraWrapper { + getX(): number; + getY(): number; + getZ(): number; + } + const Player: { + ArmorWrapper: typeof com.chattriggers.ctjs.api.client.Player$ArmorWrapper; + armor: com.chattriggers.ctjs.api.client.Player$ArmorWrapper; + toMC(): net.minecraft.client.player.LocalPlayer | null | undefined; + /** + * Gets Minecraft's EntityPlayerSP object representing the user + * + * @return The Minecraft EntityPlayerSP object representing the user + */ + getPlayer(): net.minecraft.client.player.LocalPlayer | null | undefined; + getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; + asPlayerMP(): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; + getX(): number; + getY(): number; + getZ(): number; + getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; + getRotation(): net.minecraft.world.phys.Vec2; + getLastX(): number; + getLastY(): number; + getLastZ(): number; + getRenderX(): number; + getRenderY(): number; + getRenderZ(): number; + /** + * Gets the player's x motion. + * This is the amount the player will move in the x direction next tick. + * + * @return the player's x motion + */ + getMotionX(): number; + /** + * Gets the player's y motion. + * This is the amount the player will move in the y direction next tick. + * + * @return the player's y motion + */ + getMotionY(): number; + /** + * Gets the player's z motion. + * This is the amount the player will move in the z direction next tick. + * + * @return the player's z motion + */ + getMotionZ(): number; + /** + * Gets the player's camera pitch. + * + * @return the player's camera pitch + */ + getPitch(): number; + /** + * Gets the player's camera yaw. + * + * @return the player's camera yaw + */ + getYaw(): number; + /** + * Gets the player's username. + * + * @return the player's username + */ + getName(): string; + /** + * Gets the Java UUID object of the player. + * Use of [UUID.toString] in conjunction is recommended. + * + * @return the player's uuid + */ + getUUID(): java.util.UUID; + getHP(): number; + /** + * Gets the player's air level. + * + * The returned value will be an integer. If the player is not taking damage, it + * will be between 300 (not in water) and 0. If the player is taking damage, it + * will be between -20 and 0, getting reset to 0 every time the player takes damage. + * + * @return the player's air level + */ + getAirLevel(): number; + getXPLevel(): number; + isMoving(): boolean; + isSneaking(): boolean; + isSprinting(): boolean; + /** + * Checks if player can be pushed by water. + * + * @return true if the player is flying, false otherwise + */ + isFlying(): boolean; + isSleeping(): boolean; + /** + * Gets the direction the player is facing. + * Example: "South West" + * + * @return The direction the player is facing, one of the four cardinal directions + */ + facing(): string; + /** + * Gets the current active potion effects. Returns an empty list + * if the player has no active potion effects. + * + * @return a list of the active [PotionEffect]s + */ + getActivePotionEffects(): Array; + /** + * Gets the current object that the player is looking at, + * whether that be a block or an entity. Returns null when not looking + * at anything. + * + * @return the [Block] or [Entity] being looked at, or null if air + */ + lookingAt(): any | null | undefined; + /** + * Gets the current item in the player's hand. + * + * @param hand the hand of the item + * @return the current held [Item] + */ + getHeldItem(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * Gets the current item in the player's hand. + * + * @param hand the hand of the item + * @return the current held [Item] + */ + getHeldItem(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * Sets the current held item based on the provided index. + * + * @param index the new held item index + */ + setHeldItemIndex(index: number): void; + /** + * Gets the current index of the held item. + * + * @return the current index + */ + getHeldItemIndex(): number; + /** + * Gets the inventory of the player, i.e. the inventory accessed by 'e'. + * + * @return the player's inventory + */ + getInventory(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; + /** + * Gets the display name for the player, + * i.e. the name shown in tab list and in the player's nametag. + * @return the display name + */ + getDisplayName(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets the name for this player shown in tab list + * + * @param textComponent the new name to display + */ + setTabDisplayName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Sets the name for this player shown above their head, + * in their name tag + * + * @param textComponent the new name to display + */ + setNametagName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Gets the container the user currently has open, i.e. a chest. + * + * @return the currently opened container + */ + getContainer(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; + /** + * Draws the player in the GUI. Takes the same parameters as [Render2D.drawPlayer] + * minus `player`. + * + * @see Render2D.drawPlayer + */ + draw(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.client.Player; + new(): com.chattriggers.ctjs.api.client.Player; + } + interface Player { + armor: com.chattriggers.ctjs.api.client.Player$ArmorWrapper; + toMC(): net.minecraft.client.player.LocalPlayer | null | undefined; + /** + * Gets Minecraft's EntityPlayerSP object representing the user + * + * @return The Minecraft EntityPlayerSP object representing the user + */ + getPlayer(): net.minecraft.client.player.LocalPlayer | null | undefined; + getTeam(): com.chattriggers.ctjs.api.entity.Team | null | undefined; + asPlayerMP(): com.chattriggers.ctjs.api.entity.PlayerMP | null | undefined; + getX(): number; + getY(): number; + getZ(): number; + getPos(): com.chattriggers.ctjs.api.world.block.BlockPos; + getRotation(): net.minecraft.world.phys.Vec2; + getLastX(): number; + getLastY(): number; + getLastZ(): number; + getRenderX(): number; + getRenderY(): number; + getRenderZ(): number; + /** + * Gets the player's x motion. + * This is the amount the player will move in the x direction next tick. + * + * @return the player's x motion + */ + getMotionX(): number; + /** + * Gets the player's y motion. + * This is the amount the player will move in the y direction next tick. + * + * @return the player's y motion + */ + getMotionY(): number; + /** + * Gets the player's z motion. + * This is the amount the player will move in the z direction next tick. + * + * @return the player's z motion + */ + getMotionZ(): number; + /** + * Gets the player's camera pitch. + * + * @return the player's camera pitch + */ + getPitch(): number; + /** + * Gets the player's camera yaw. + * + * @return the player's camera yaw + */ + getYaw(): number; + /** + * Gets the player's username. + * + * @return the player's username + */ + getName(): string; + /** + * Gets the Java UUID object of the player. + * Use of [UUID.toString] in conjunction is recommended. + * + * @return the player's uuid + */ + getUUID(): java.util.UUID; + getHP(): number; + /** + * Gets the player's air level. + * + * The returned value will be an integer. If the player is not taking damage, it + * will be between 300 (not in water) and 0. If the player is taking damage, it + * will be between -20 and 0, getting reset to 0 every time the player takes damage. + * + * @return the player's air level + */ + getAirLevel(): number; + getXPLevel(): number; + isMoving(): boolean; + isSneaking(): boolean; + isSprinting(): boolean; + /** + * Checks if player can be pushed by water. + * + * @return true if the player is flying, false otherwise + */ + isFlying(): boolean; + isSleeping(): boolean; + /** + * Gets the direction the player is facing. + * Example: "South West" + * + * @return The direction the player is facing, one of the four cardinal directions + */ + facing(): string; + /** + * Gets the current active potion effects. Returns an empty list + * if the player has no active potion effects. + * + * @return a list of the active [PotionEffect]s + */ + getActivePotionEffects(): Array; + /** + * Gets the current object that the player is looking at, + * whether that be a block or an entity. Returns null when not looking + * at anything. + * + * @return the [Block] or [Entity] being looked at, or null if air + */ + lookingAt(): any | null | undefined; + /** + * Gets the current item in the player's hand. + * + * @param hand the hand of the item + * @return the current held [Item] + */ + getHeldItem(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * Gets the current item in the player's hand. + * + * @param hand the hand of the item + * @return the current held [Item] + */ + getHeldItem(hand: net.minecraft.world.InteractionHand): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * Sets the current held item based on the provided index. + * + * @param index the new held item index + */ + setHeldItemIndex(index: number): void; + /** + * Gets the current index of the held item. + * + * @return the current index + */ + getHeldItemIndex(): number; + /** + * Gets the inventory of the player, i.e. the inventory accessed by 'e'. + * + * @return the player's inventory + */ + getInventory(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; + /** + * Gets the display name for the player, + * i.e. the name shown in tab list and in the player's nametag. + * @return the display name + */ + getDisplayName(): com.chattriggers.ctjs.api.message.TextComponent; + /** + * Sets the name for this player shown in tab list + * + * @param textComponent the new name to display + */ + setTabDisplayName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Sets the name for this player shown above their head, + * in their name tag + * + * @param textComponent the new name to display + */ + setNametagName(textComponent: com.chattriggers.ctjs.api.message.TextComponent): void; + /** + * Gets the container the user currently has open, i.e. a chest. + * + * @return the currently opened container + */ + getContainer(): com.chattriggers.ctjs.api.inventory.Inventory | null | undefined; + /** + * Draws the player in the GUI. Takes the same parameters as [Render2D.drawPlayer] + * minus `player`. + * + * @see Render2D.drawPlayer + */ + draw(obj: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.client.Player; + new(): com.chattriggers.ctjs.api.client.Player; + } + const Player$ArmorWrapper: { + new(): com.chattriggers.ctjs.api.client.Player$ArmorWrapper; + } + interface Player$ArmorWrapper { + /** + * @return the [Item] in the player's helmet slot or null if the slot is empty + */ + getHelmet(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * @return the [Item] in the player's chestplate slot or null if the slot is empty + */ + getChestplate(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * @return the [Item] in the player's leggings slot or null if the slot is empty + */ + getLeggings(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + /** + * @return the [Item] in the player's boots slot or null if the slot is empty + */ + getBoots(): com.chattriggers.ctjs.api.inventory.Item | null | undefined; + } + const Sound: { + Category: typeof com.chattriggers.ctjs.api.client.Sound$Category; + AttenuationType: typeof com.chattriggers.ctjs.api.client.Sound$AttenuationType; + new(config: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.client.Sound; + } + interface Sound { + destroy(): void; + /** + * Gets the category of this sound, making it respect the Player's sound volume sliders. + * + * @return the category + */ + getCategory(): com.chattriggers.ctjs.api.client.Sound$Category; + /** + * Sets the category of this sound, making it respect the Player's sound volume sliders. + * + * @param category the category + */ + setCategory(category: com.chattriggers.ctjs.api.client.Sound$Category): com.chattriggers.ctjs.api.client.Sound; + /** + * Gets this sound's volume. + * + * @return A float value (0.0f - 1.0f). + */ + getVolume(): number; + /** + * Sets this sound's volume. + * + * @param volume A float value (0.0f - 1.0f). + */ + setVolume(volume: number): com.chattriggers.ctjs.api.client.Sound; + getX(): number; + getY(): number; + getZ(): number; + setX(x: number): com.chattriggers.ctjs.api.client.Sound; + setY(y: number): com.chattriggers.ctjs.api.client.Sound; + setZ(z: number): com.chattriggers.ctjs.api.client.Sound; + getPosition(): net.minecraft.world.phys.Vec3; + setPosition(x: number, y: number, z: number): com.chattriggers.ctjs.api.client.Sound; + /** + * Gets this sound's pitch. + * + * @return A float value (0.5f - 2.0f). + */ + getPitch(): number; + /** + * Sets this sound's pitch. + * + * @param pitch A float value (0.5f - 2.0f). + */ + setPitch(pitch: number): com.chattriggers.ctjs.api.client.Sound; + /** + * Gets the attenuation type (fade out over space) of the sound + * + * @return The type of Attenuation + */ + getAttenuationType(): com.chattriggers.ctjs.api.client.Sound$AttenuationType; + /** + * Sets the attenuation type (fade out over space) of the sound + * + * @param attenuationType The type of Attenuation + */ + setAttenuationType(attenuationType: com.chattriggers.ctjs.api.client.Sound$AttenuationType): com.chattriggers.ctjs.api.client.Sound; + /** + * Gets the attenuation distance of the sound + */ + getAttenuation(): number; + /** + * Sets the attenuation distance of the sound + */ + setAttenuation(attenuation: number): com.chattriggers.ctjs.api.client.Sound; + /** + * Gets whether the sound should repeat after finishing + */ + getLoop(): boolean; + /** + * Sets whether the sound should repeat after finishing + */ + setLoop(loop: boolean): com.chattriggers.ctjs.api.client.Sound; + /** + * Gets the tick delay after finishing before looping again (if getLoop() is true) + */ + getLoopDelay(): number; + /** + * Sets the tick delay after finishing before looping again (if getLoop() is true) + */ + setLoopDelay(loopDelay: number): com.chattriggers.ctjs.api.client.Sound; + /** + * Plays/resumes the sound. This requires the world to be loaded + */ + play(): void; + /** + * Plays/resumes the sound. This requires the world to be loaded + */ + play(delay: number): void; + /** + * Pauses the sound, to be resumed later. This requires the world to be loaded + */ + pause(): void; + /** + * Completely stops the sound. This requires the world to be loaded + */ + stop(): void; + /** + * Immediately restarts the sound. This requires the world to be loaded + */ + rewind(): void; + } + const Sound$Category: { + MASTER: com.chattriggers.ctjs.api.client.Sound$Category; + MUSIC: com.chattriggers.ctjs.api.client.Sound$Category; + RECORDS: com.chattriggers.ctjs.api.client.Sound$Category; + WEATHER: com.chattriggers.ctjs.api.client.Sound$Category; + BLOCKS: com.chattriggers.ctjs.api.client.Sound$Category; + HOSTILE: com.chattriggers.ctjs.api.client.Sound$Category; + NEUTRAL: com.chattriggers.ctjs.api.client.Sound$Category; + PLAYERS: com.chattriggers.ctjs.api.client.Sound$Category; + AMBIENT: com.chattriggers.ctjs.api.client.Sound$Category; + VOICE: com.chattriggers.ctjs.api.client.Sound$Category; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.client.Sound$Category; + } + interface Sound$Category extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { + } + const Sound$Category$Companion: { + fromMC(mcValue: net.minecraft.sounds.SoundSource): com.chattriggers.ctjs.api.client.Sound$Category; + from(value: any): com.chattriggers.ctjs.api.client.Sound$Category; + new(): unknown; + } + interface Sound$Category$Companion { + fromMC(mcValue: net.minecraft.sounds.SoundSource): com.chattriggers.ctjs.api.client.Sound$Category; + from(value: any): com.chattriggers.ctjs.api.client.Sound$Category; + new(): unknown; + } + const Sound$AttenuationType: { + NONE: com.chattriggers.ctjs.api.client.Sound$AttenuationType; + LINEAR: com.chattriggers.ctjs.api.client.Sound$AttenuationType; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.client.Sound$AttenuationType; + } + interface Sound$AttenuationType extends kotlin.Enum, com.chattriggers.ctjs.api.CTWrapper { + } + const Sound$AttenuationType$Companion: { + fromMC(mcValue: net.minecraft.client.resources.sounds.SoundInstance$Attenuation): com.chattriggers.ctjs.api.client.Sound$AttenuationType; + from(value: any): com.chattriggers.ctjs.api.client.Sound$AttenuationType; + new(): unknown; + } + interface Sound$AttenuationType$Companion { + fromMC(mcValue: net.minecraft.client.resources.sounds.SoundInstance$Attenuation): com.chattriggers.ctjs.api.client.Sound$AttenuationType; + from(value: any): com.chattriggers.ctjs.api.client.Sound$AttenuationType; + new(): unknown; + } + } + namespace render { + namespace skia { + const SkijaBootstrap: { + new(): com.chattriggers.ctjs.api.render.skia.SkijaBootstrap; + } + interface SkijaBootstrap extends net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint { + } + } + const Font: { + new(name: string, resourcePath: string): com.chattriggers.ctjs.api.render.Font; + new(name: string, inputStream: java.io.InputStream): com.chattriggers.ctjs.api.render.Font; + } + interface Font { + getName(): string; + buffer(): java.nio.ByteBuffer; + } + const Render2D: { + ScreenWrapper: typeof com.chattriggers.ctjs.api.render.Render2D$ScreenWrapper; + screen: com.chattriggers.ctjs.api.render.Render2D$ScreenWrapper; + getPartialTicks(): number; + BLACK: number; + DARK_BLUE: number; + DARK_GREEN: number; + DARK_AQUA: number; + DARK_RED: number; + DARK_PURPLE: number; + GOLD: number; + GRAY: number; + DARK_GRAY: number; + BLUE: number; + GREEN: number; + AQUA: number; + RED: number; + LIGHT_PURPLE: number; + YELLOW: number; + WHITE: number; + color(color: number): number; + getFontRenderer(): net.minecraft.client.gui.Font; + getRenderManager(): net.minecraft.client.renderer.LevelRenderer; + getStringWidth(text: string): number; + getColor(red: number, green: number, blue: number): number; + getColor(red: number, green: number, blue: number, alpha: number): number; + getRainbow(step: number): number; + getRainbow(step: number, speed: number): number; + getRainbowColors(step: number): Array; + getRainbowColors(step: number, speed: number): Array; + deleteTexture(texture: com.chattriggers.ctjs.api.render.Image): com.chattriggers.ctjs.api.render.Render2D; + pushMatrix(): com.chattriggers.ctjs.api.render.Render2D; + pushMatrix(stack: gg.essential.universal.UMatrixStack): com.chattriggers.ctjs.api.render.Render2D; + popMatrix(): com.chattriggers.ctjs.api.render.Render2D; + translate(x: number, y: number): com.chattriggers.ctjs.api.render.Render2D; + translate(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Render2D; + scale(scaleX: number): com.chattriggers.ctjs.api.render.Render2D; + scale(scaleX: number, scaleY: number): com.chattriggers.ctjs.api.render.Render2D; + scale(scaleX: number, scaleY: number, scaleZ: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number, x: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number, x: number, y: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number, x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Render2D; + multiply(quaternion: org.joml.Quaternionf): com.chattriggers.ctjs.api.render.Render2D; + fixAlpha(color: number): number; + /** + * Gets a fixed render position from x, y, and z inputs adjusted with partial ticks + * @param x the X coordinate + * @param y the Y coordinate + * @param z the Z coordinate + * @return the Vec3f position to render at + */ + getRenderPos(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; + drawString(text: string, x: number, y: number): void; + drawString(text: string, x: number, y: number, color: number): void; + drawString(text: string, x: number, y: number, color: number, shadow: boolean): void; + drawStringWithShadow(text: string, x: number, y: number): void; + drawStringWithShadow(text: string, x: number, y: number, color: number): void; + drawImage(image: com.chattriggers.ctjs.api.render.Image, x: number, y: number, width: number, height: number): void; + /** + * Draws a player entity to the screen, similar to the one displayed in the inventory screen. + * + * Takes a parameter with the following options: + * - player: The player entity to draw. Can be a [PlayerMP] or [AbstractClientPlayerEntity]. + * Defaults to Player.toMC() + * - x: The x position on the screen to render the player + * - y: The y position on the screen to render the player + * - size: The size of the rendered player + * - rotate: Whether the player should look at the mouse cursor, similar to the inventory screen + * - pitch: THe pitch the rendered player will face, if rotate is false + * - yaw: The yaw the rendered player will face, if rotate is false + * - showNametag: Whether the nametag of the player should be rendered + * - showArmor: Whether the armor of the player should be rendered + * - showCape: Whether the cape of the player should be rendered + * - showHeldItem: Whether the held item of the player should be rendered + * - showArrows: Whether any arrows stuck in the player's model should be rendered + * - showElytra: Whether the player's Elytra should be rendered + * - showParrot: Whether a perched parrot should be rendered + * - showBeeStinger: Whether any stuck bee stingers should be rendered + * + * @param obj An options bag + */ + drawPlayer(obj: org.mozilla.javascript.NativeObject): void; + new(): com.chattriggers.ctjs.api.render.Render2D; + } + interface Render2D extends com.chattriggers.ctjs.api.render.GuiRendererBackend { + screen: com.chattriggers.ctjs.api.render.Render2D$ScreenWrapper; + getPartialTicks(): number; + BLACK: number; + DARK_BLUE: number; + DARK_GREEN: number; + DARK_AQUA: number; + DARK_RED: number; + DARK_PURPLE: number; + GOLD: number; + GRAY: number; + DARK_GRAY: number; + BLUE: number; + GREEN: number; + AQUA: number; + RED: number; + LIGHT_PURPLE: number; + YELLOW: number; + WHITE: number; + color(color: number): number; + getFontRenderer(): net.minecraft.client.gui.Font; + getRenderManager(): net.minecraft.client.renderer.LevelRenderer; + getStringWidth(text: string): number; + getColor(red: number, green: number, blue: number): number; + getColor(red: number, green: number, blue: number, alpha: number): number; + getRainbow(step: number): number; + getRainbow(step: number, speed: number): number; + getRainbowColors(step: number): Array; + getRainbowColors(step: number, speed: number): Array; + deleteTexture(texture: com.chattriggers.ctjs.api.render.Image): com.chattriggers.ctjs.api.render.Render2D; + pushMatrix(): com.chattriggers.ctjs.api.render.Render2D; + pushMatrix(stack: gg.essential.universal.UMatrixStack): com.chattriggers.ctjs.api.render.Render2D; + popMatrix(): com.chattriggers.ctjs.api.render.Render2D; + translate(x: number, y: number): com.chattriggers.ctjs.api.render.Render2D; + translate(x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Render2D; + scale(scaleX: number): com.chattriggers.ctjs.api.render.Render2D; + scale(scaleX: number, scaleY: number): com.chattriggers.ctjs.api.render.Render2D; + scale(scaleX: number, scaleY: number, scaleZ: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number, x: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number, x: number, y: number): com.chattriggers.ctjs.api.render.Render2D; + rotate(angle: number, x: number, y: number, z: number): com.chattriggers.ctjs.api.render.Render2D; + multiply(quaternion: org.joml.Quaternionf): com.chattriggers.ctjs.api.render.Render2D; + fixAlpha(color: number): number; + /** + * Gets a fixed render position from x, y, and z inputs adjusted with partial ticks + * @param x the X coordinate + * @param y the Y coordinate + * @param z the Z coordinate + * @return the Vec3f position to render at + */ + getRenderPos(x: number, y: number, z: number): com.chattriggers.ctjs.api.vec.Vec3f; + drawString(text: string, x: number, y: number): void; + drawString(text: string, x: number, y: number, color: number): void; + drawString(text: string, x: number, y: number, color: number, shadow: boolean): void; + drawStringWithShadow(text: string, x: number, y: number): void; + drawStringWithShadow(text: string, x: number, y: number, color: number): void; + drawImage(image: com.chattriggers.ctjs.api.render.Image, x: number, y: number, width: number, height: number): void; + /** + * Draws a player entity to the screen, similar to the one displayed in the inventory screen. + * + * Takes a parameter with the following options: + * - player: The player entity to draw. Can be a [PlayerMP] or [AbstractClientPlayerEntity]. + * Defaults to Player.toMC() + * - x: The x position on the screen to render the player + * - y: The y position on the screen to render the player + * - size: The size of the rendered player + * - rotate: Whether the player should look at the mouse cursor, similar to the inventory screen + * - pitch: THe pitch the rendered player will face, if rotate is false + * - yaw: The yaw the rendered player will face, if rotate is false + * - showNametag: Whether the nametag of the player should be rendered + * - showArmor: Whether the armor of the player should be rendered + * - showCape: Whether the cape of the player should be rendered + * - showHeldItem: Whether the held item of the player should be rendered + * - showArrows: Whether any arrows stuck in the player's model should be rendered + * - showElytra: Whether the player's Elytra should be rendered + * - showParrot: Whether a perched parrot should be rendered + * - showBeeStinger: Whether any stuck bee stingers should be rendered + * + * @param obj An options bag + */ + drawPlayer(obj: org.mozilla.javascript.NativeObject): void; + new(): com.chattriggers.ctjs.api.render.Render2D; + } + const GuiRendererBackend: { + GifData: typeof com.chattriggers.ctjs.api.render.GuiRendererBackend$GifData; + defaultFont: com.chattriggers.ctjs.api.render.Font; + ALIGN_CENTER: number; + ALIGN_MIDDLE: number; + /** + * Skija-backed 2D renderer used by the JavaScript-facing [Render2D] API. + */ + new(): com.chattriggers.ctjs.api.render.GuiRendererBackend; + } + interface GuiRendererBackend { + registerV5Render(callback: java.lang.Runnable): java.lang.Runnable; + unregisterV5Render(callback: java.lang.Runnable): void; + registerV5PreRender(callback: java.lang.Runnable): java.lang.Runnable; + unregisterV5PreRender(callback: java.lang.Runnable): void; + clearCallbacks(): void; + runPreDrawables(context: net.minecraft.client.gui.GuiGraphicsExtractor): void; + runDrawables(context: net.minecraft.client.gui.GuiGraphicsExtractor): void; + blurBackground(): void; + save(): void; + restore(): void; + globalAlpha(value: number): void; + scissor(x: number, y: number, width: number, height: number): void; + resetScissor(): void; + pushScissor(x: number, y: number, width: number, height: number): void; + popScissor(): void; + drawRect(x: number, y: number, width: number, height: number, color: number): void; + drawRoundedRect(x: number, y: number, width: number, height: number, radius: number, color: number): void; + drawRoundedRectVaried(x: number, y: number, width: number, height: number, color: number, tl: number, tr: number, br: number, bl: number): void; + drawCircle(x: number, y: number, radius: number, color: number): void; + drawHollowRect(x: number, y: number, width: number, height: number, thickness: number, color: number): void; + drawHollowRect(x: number, y: number, width: number, height: number, thickness: number, color: number, radius: number): void; + drawLine(x1: number, y1: number, x2: number, y2: number, thickness: number, color: number): void; + drawDropShadow(x: number, y: number, width: number, height: number, radius: number, blur: number, spread: number, color: number): void; + drawGradientRect(x: number, y: number, width: number, height: number, color1: number, color2: number, direction: any): void; + drawGradientRect(x: number, y: number, width: number, height: number, color1: number, color2: number, direction: any, radius: number): void; + drawHollowGradientRect(x: number, y: number, width: number, height: number, thickness: number, color1: number, color2: number, direction: any): void; + drawHollowGradientRect(x: number, y: number, width: number, height: number, thickness: number, color1: number, color2: number, direction: any, radius: number): void; + drawCheckerboard(x: number, y: number, width: number, height: number, radius: number): void; + drawCheckerboard(x: number, y: number, width: number, height: number, radius: number, size: number): void; + drawHueBar(x: number, y: number, width: number, height: number, radius: number): void; + getDefaultFont(): com.chattriggers.ctjs.api.render.Font; + text(text: string, x: number, y: number, size: number, color: number, align: number): void; + text(text: string, x: number, y: number, size: number, color: number, font: com.chattriggers.ctjs.api.render.Font | null | undefined, align: number): void; + textWidth(text: string, size: number): number; + textWidth(text: string, size: number, font: com.chattriggers.ctjs.api.render.Font | null | undefined): number; + loadImage(path: string): string; + unloadImage(path: string): void; + isImageLoaded(path: string): boolean; + drawImage(path: string, x: number, y: number, width: number, height: number): void; + drawImage(path: string, x: number, y: number, width: number, height: number, radius: number): void; + drawImage(path: string, x: number, y: number, width: number, height: number, radius: number, imageAlpha: number): void; + drawImageFromUrl(url: string, x: number, y: number, width: number, height: number): void; + drawImageFromUrl(url: string, x: number, y: number, width: number, height: number, radius: number): void; + drawImageFromUrl(url: string, x: number, y: number, width: number, height: number, radius: number, imageAlpha: number): void; + loadGif(path: string): com.chattriggers.ctjs.api.render.GuiRendererBackend$GifData | null | undefined; + unloadGif(path: string): void | null | undefined; + drawGif(path: string, x: number, y: number, width: number, height: number, frameIndex: number): void; + drawGif(path: string, x: number, y: number, width: number, height: number, frameIndex: number, radius: number): void; + drawGif(path: string, x: number, y: number, width: number, height: number, frameIndex: number, radius: number, imageAlpha: number): void; + clearImageCache(): void; + getCacheStats(): string; + destroy(): void; + } + const GuiRendererBackend$GifData: { + new(width: number, height: number, frameCount: number, delays: Array): com.chattriggers.ctjs.api.render.GuiRendererBackend$GifData; + } + interface GuiRendererBackend$GifData { + getWidth(): number; + getHeight(): number; + getFrameCount(): number; + getDelays(): Array; + component1(): number; + component2(): number; + component3(): number; + component4(): Array; + copy(width: number, height: number, frameCount: number, delays: Array): com.chattriggers.ctjs.api.render.GuiRendererBackend$GifData; + } + const Render2D$ScreenWrapper: { + new(): com.chattriggers.ctjs.api.render.Render2D$ScreenWrapper; + } + interface Render2D$ScreenWrapper { + getWidth(): number; + getHeight(): number; + getScale(): number; + } + const Image: { + new(image: java.awt.image.BufferedImage | null | undefined): com.chattriggers.ctjs.api.render.Image; + } + interface Image { + getImage(): java.awt.image.BufferedImage | null | undefined; + setImage(value: java.awt.image.BufferedImage | null | undefined): void; + getTextureWidth(): number; + getTextureHeight(): number; + getTexture(): net.minecraft.client.renderer.texture.DynamicTexture | null | undefined; + /** + * Clears the image from GPU memory and removes its references CT side + * that way it can be garbage collected if not referenced in js code. + */ + destroy(): void; + draw(x: number, y: number): com.chattriggers.ctjs.api.render.Image; + draw(x: number, y: number, width: number | null | undefined): com.chattriggers.ctjs.api.render.Image; + draw(x: number, y: number, width: number | null | undefined, height: number | null | undefined): com.chattriggers.ctjs.api.render.Image; + } + const Image$Companion: { + /** + * Create an image object from a java.io.File object. Throws an exception + * if the file cannot be found. + */ + fromFile(file: java.io.File): com.chattriggers.ctjs.api.render.Image; + /** + * Create an image object from a file path. Throws an exception + * if the file cannot be found. + */ + fromFile(file: string): com.chattriggers.ctjs.api.render.Image; + /** + * Create an image object from a file path, relative to the assets directory. + * Throws an exception if the file cannot be found. + */ + fromAsset(name: string): com.chattriggers.ctjs.api.render.Image; + /** + * Creates an image object from a URL. Throws an exception if an image + * cannot be created from the URL. Will cache the image in the assets + */ + fromUrl(url: string): com.chattriggers.ctjs.api.render.Image; + /** + * Creates an image object from a URL. Throws an exception if an image + * cannot be created from the URL. Will cache the image in the assets + */ + fromUrl(url: string, cachedImageName: string | null | undefined): com.chattriggers.ctjs.api.render.Image; + new(): com.chattriggers.ctjs.api.render.Image$Companion; + } + interface Image$Companion { + /** + * Create an image object from a java.io.File object. Throws an exception + * if the file cannot be found. + */ + fromFile(file: java.io.File): com.chattriggers.ctjs.api.render.Image; + /** + * Create an image object from a file path. Throws an exception + * if the file cannot be found. + */ + fromFile(file: string): com.chattriggers.ctjs.api.render.Image; + /** + * Create an image object from a file path, relative to the assets directory. + * Throws an exception if the file cannot be found. + */ + fromAsset(name: string): com.chattriggers.ctjs.api.render.Image; + /** + * Creates an image object from a URL. Throws an exception if an image + * cannot be created from the URL. Will cache the image in the assets + */ + fromUrl(url: string): com.chattriggers.ctjs.api.render.Image; + /** + * Creates an image object from a URL. Throws an exception if an image + * cannot be created from the URL. Will cache the image in the assets + */ + fromUrl(url: string, cachedImageName: string | null | undefined): com.chattriggers.ctjs.api.render.Image; + new(): com.chattriggers.ctjs.api.render.Image$Companion; + } + const Display: { + Background: typeof com.chattriggers.ctjs.api.render.Display$Background; + Order: typeof com.chattriggers.ctjs.api.render.Display$Order; + new(): com.chattriggers.ctjs.api.render.Display; + new(config: org.mozilla.javascript.NativeObject | null | undefined): com.chattriggers.ctjs.api.render.Display; + } + interface Display { + getTextColor(): number; + /** + * Sets the color of the texts + * + * Overrides the color of the individual texts + */ + setTextColor(textColor: number): com.chattriggers.ctjs.api.render.Display; + getAlign(): com.chattriggers.ctjs.api.render.Text$Align; + /** + * Set the alignment of the texts in the display + * + * Overrides alignment of the individual texts + */ + setAlign(align: any): com.chattriggers.ctjs.api.render.Display; + getOrder(): com.chattriggers.ctjs.api.render.Display$Order; + setOrder(order: any): com.chattriggers.ctjs.api.render.Display; + getBackground(): com.chattriggers.ctjs.api.render.Display$Background; + setBackground(background: any): com.chattriggers.ctjs.api.render.Display; + getBackgroundColor(): number; + setBackgroundColor(backgroundColor: number): com.chattriggers.ctjs.api.render.Display; + setLine(index: number, line: any): com.chattriggers.ctjs.api.render.Display; + getLine(index: number): com.chattriggers.ctjs.api.render.Text; + getLines(): Array; + setLines(lines: Array): com.chattriggers.ctjs.api.render.Display; + addLine(line: any): com.chattriggers.ctjs.api.render.Display; + addLines(lines: any): com.chattriggers.ctjs.api.render.Display; + removeLine(index: number): com.chattriggers.ctjs.api.render.Display; + clearLines(): com.chattriggers.ctjs.api.render.Display; + getX(): number; + setX(x: number): com.chattriggers.ctjs.api.render.Display; + getY(): number; + setY(y: number): com.chattriggers.ctjs.api.render.Display; + getWidth(): number; + getHeight(): number; + getMinWidth(): number; + setMinWidth(minWidth: number): com.chattriggers.ctjs.api.render.Display; + draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor): void; + } + const Text$Align: { + LEFT: com.chattriggers.ctjs.api.render.Text$Align; + CENTER: com.chattriggers.ctjs.api.render.Text$Align; + RIGHT: com.chattriggers.ctjs.api.render.Text$Align; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.render.Text$Align; + } + interface Text$Align extends kotlin.Enum { + } + const Display$Order: { + REVERSED: com.chattriggers.ctjs.api.render.Display$Order; + NORMAL: com.chattriggers.ctjs.api.render.Display$Order; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.render.Display$Order; + } + interface Display$Order extends kotlin.Enum { + } + const Display$Background: { + NONE: com.chattriggers.ctjs.api.render.Display$Background; + FULL: com.chattriggers.ctjs.api.render.Display$Background; + PER_LINE: com.chattriggers.ctjs.api.render.Display$Background; + getEntries(): kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): com.chattriggers.ctjs.api.render.Display$Background; + } + interface Display$Background extends kotlin.Enum { + } + const Text: { + Align: typeof com.chattriggers.ctjs.api.render.Text$Align; + new(string: string): com.chattriggers.ctjs.api.render.Text; + new(string: string, x: number): com.chattriggers.ctjs.api.render.Text; + new(string: string, x: number, y: number): com.chattriggers.ctjs.api.render.Text; + new(string: string, config: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.render.Text; + } + interface Text { + getString(): string; + setString(string: string): com.chattriggers.ctjs.api.render.Text; + getColor(): number; + setColor(color: number): com.chattriggers.ctjs.api.render.Text; + getFormatted(): boolean; + setFormatted(formatted: boolean): com.chattriggers.ctjs.api.render.Text; + getShadow(): boolean; + setShadow(shadow: boolean): com.chattriggers.ctjs.api.render.Text; + getAlign(): com.chattriggers.ctjs.api.render.Text$Align; + setAlign(align: any): com.chattriggers.ctjs.api.render.Text; + getBackground(): boolean; + /** + * Set the background + * + * true: Background is enabled + * false: Background is disabled + */ + setBackground(background: boolean): com.chattriggers.ctjs.api.render.Text; + getBackgroundColor(): number; + setBackgroundColor(backgroundColor: number): com.chattriggers.ctjs.api.render.Text; + getX(): number; + setX(x: number): com.chattriggers.ctjs.api.render.Text; + getY(): number; + setY(y: number): com.chattriggers.ctjs.api.render.Text; + /** + * Gets the width of the text + * This is automatically updated when the text is drawn. + * + * @return the width of the text + */ + getWidth(): number; + getLines(): Array; + getMaxLines(): number; + setMaxLines(maxLines: number): com.chattriggers.ctjs.api.render.Text; + getScale(): number; + setScale(scale: number): com.chattriggers.ctjs.api.render.Text; + /** + * Sets the maximum width of the text, splitting it into multiple lines if necessary. + * + * @param maxWidth the maximum width of the text + * @return the Text object for method chaining + */ + setMaxWidth(maxWidth: number): com.chattriggers.ctjs.api.render.Text; + getMaxWidth(): number; + getHeight(): number; + exceedsMaxLines(): boolean; + draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor): com.chattriggers.ctjs.api.render.Text; + draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor, x: number | null | undefined): com.chattriggers.ctjs.api.render.Text; + draw(ctx: net.minecraft.client.gui.GuiGraphicsExtractor, x: number | null | undefined, y: number | null | undefined): com.chattriggers.ctjs.api.render.Text; + } + const DrawContextHolder: { + currentContext: net.minecraft.client.gui.GuiGraphicsExtractor | null | undefined; + new(): com.chattriggers.ctjs.api.render.DrawContextHolder; + } + interface DrawContextHolder { + currentContext: net.minecraft.client.gui.GuiGraphicsExtractor | null | undefined; + new(): com.chattriggers.ctjs.api.render.DrawContextHolder; + withContext(context: net.minecraft.client.gui.GuiGraphicsExtractor, block: kotlin.Function0): T; + } + const Rectangle: { + new(color: number, x: number, y: number, width: number, height: number): com.chattriggers.ctjs.api.render.Rectangle; + } + interface Rectangle { + getColor(): number; + setColor(color: number): com.chattriggers.ctjs.api.render.Rectangle; + getX(): number; + setX(x: number): com.chattriggers.ctjs.api.render.Rectangle; + getY(): number; + setY(y: number): com.chattriggers.ctjs.api.render.Rectangle; + getWidth(): number; + setWidth(width: number): com.chattriggers.ctjs.api.render.Rectangle; + getHeight(): number; + setHeight(height: number): com.chattriggers.ctjs.api.render.Rectangle; + isShadow(): boolean; + setShadow(shadow: boolean): com.chattriggers.ctjs.api.render.Rectangle; + setShadow(color: number, x: number, y: number): com.chattriggers.ctjs.api.render.Rectangle; + getShadowOffset(): com.chattriggers.ctjs.api.vec.Vec2f; + getShadowOffsetX(): number; + getShadowOffsetY(): number; + setShadowOffset(x: number, y: number): com.chattriggers.ctjs.api.render.Rectangle; + setShadowOffsetX(x: number): com.chattriggers.ctjs.api.render.Rectangle; + setShadowOffsetY(y: number): com.chattriggers.ctjs.api.render.Rectangle; + getShadowColor(): number; + setShadowColor(color: number): com.chattriggers.ctjs.api.render.Rectangle; + getOutline(): boolean; + setOutline(outline: boolean): com.chattriggers.ctjs.api.render.Rectangle; + setOutline(color: number, thickness: number): com.chattriggers.ctjs.api.render.Rectangle; + getOutlineColor(): number; + setOutlineColor(color: number): com.chattriggers.ctjs.api.render.Rectangle; + getThickness(): number; + setThickness(thickness: number): com.chattriggers.ctjs.api.render.Rectangle; + draw(): com.chattriggers.ctjs.api.render.Rectangle; + } + const Book: { + new(): com.chattriggers.ctjs.api.render.Book; + } + interface Book { + /** + * Add a page to the book. + * + * @param contents the entire message for what the page should be + * @return the current book to allow method chaining + */ + addPage(contents: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Book; + /** + * Overloaded method for adding a simple page to the book. + * + * @param message a simple string to make the page + * @return the current book to allow method chaining + */ + addPage(message: string): com.chattriggers.ctjs.api.render.Book; + /** + * Inserts a page at the specified index of the book + * + * @param pageIndex the index of the page to set + * @param message the message to set the page to + * @return the current book to allow method chaining + */ + insertPage(pageIndex: number, message: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Book; + insertPage(pageIndex: number, message: string): com.chattriggers.ctjs.api.render.Book; + /** + * Sets a page of the book to the specified message. + * + * @param pageIndex the index of the page to set + * @param message the message to set the page to + * @return the current book to allow method chaining + */ + setPage(pageIndex: number, message: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Book; + setPage(pageIndex: number, message: string): com.chattriggers.ctjs.api.render.Book; + display(): void; + display(pageIndex: number): void; + isOpen(): boolean; + getCurrentPage(): number; + } + const Render3D: { + Color: typeof com.chattriggers.ctjs.api.render.Render3D$Color; + drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawFilledBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawFilledAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawWireFrameBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawWireFrameAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawBoxes(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawBoxes(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawBoxes(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number): void; + drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number, depth: boolean): void; + drawStyledBoxes(positions: Array, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawStyledBoxes(positions: Array, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number): void; + drawStyledBoxes(positions: Array, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number, depth: boolean): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number, depth: boolean): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number, depth: boolean): void; + drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawHitboxes(entities: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawHitboxes(entities: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawHitboxes(entities: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawLines(points: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawLines(points: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawLines(points: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawLines(points: Array, colors: Array): void; + drawLines(points: Array, colors: Array, thickness: number): void; + drawLines(points: Array, colors: Array, thickness: number, depth: boolean): void; + drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawTracers(targetPositions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawTracers(targetPositions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawTracers(targetPositions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean, translate: boolean): void; + drawTexts(texts: Array, positions: Array): void; + drawTexts(texts: Array, positions: Array, scale: number): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean, increase: boolean): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean, translate: boolean): void; + new(): com.chattriggers.ctjs.api.render.Render3D; + } + interface Render3D { + drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawFilledBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawFilledAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawFilledAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, depth: boolean): void; + drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameBox(pos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawWireFrameBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameBoxes(positions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawWireFrameAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawWireFrameAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawWireFrameAABBs(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawBox(box: net.minecraft.world.phys.AABB, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawBoxes(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawBoxes(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawBoxes(boxes: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number): void; + drawStyledBox(pos: net.minecraft.world.phys.Vec3, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number, depth: boolean): void; + drawStyledBoxes(positions: Array, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawStyledBoxes(positions: Array, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number): void; + drawStyledBoxes(positions: Array, color1: com.chattriggers.ctjs.api.render.Render3D$Color, color2: com.chattriggers.ctjs.api.render.Render3D$Color, wireThickness: number, depth: boolean): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number): void; + drawSizedBox(pos: net.minecraft.world.phys.Vec3, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number, depth: boolean): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number): void; + drawSizedBoxes(positions: Array, width: number, height: number, length: number, color: com.chattriggers.ctjs.api.render.Render3D$Color, filled: boolean, thickness: number, depth: boolean): void; + drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawHitbox(entity: net.minecraft.world.entity.Entity, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawHitboxes(entities: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawHitboxes(entities: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawHitboxes(entities: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawLine(start: net.minecraft.world.phys.Vec3, end: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawLines(points: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawLines(points: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawLines(points: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawLines(points: Array, colors: Array): void; + drawLines(points: Array, colors: Array, thickness: number): void; + drawLines(points: Array, colors: Array, thickness: number, depth: boolean): void; + drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawTracer(targetPos: net.minecraft.world.phys.Vec3, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawTracers(targetPositions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color): void; + drawTracers(targetPositions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number): void; + drawTracers(targetPositions: Array, color: com.chattriggers.ctjs.api.render.Render3D$Color, thickness: number, depth: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean): void; + drawText(text: string, pos: net.minecraft.world.phys.Vec3, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean, translate: boolean): void; + drawTexts(texts: Array, positions: Array): void; + drawTexts(texts: Array, positions: Array, scale: number): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean, increase: boolean): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean): void; + drawTexts(texts: Array, positions: Array, scale: number, backgroundBox: boolean, increase: boolean, seeThrough: boolean, translate: boolean): void; + new(): com.chattriggers.ctjs.api.render.Render3D; + } + const Render3D$Color: { + new(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Render3D$Color; + } + interface Render3D$Color { + getR(): number; + getG(): number; + getB(): number; + getA(): number; + getPacked(): number; + component1(): number; + component2(): number; + component3(): number; + component4(): number; + copy(r: number, g: number, b: number, a: number): com.chattriggers.ctjs.api.render.Render3D$Color; + } + const Gui: { + new(): com.chattriggers.ctjs.api.render.Gui; + new(title: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Gui; + } + interface Gui extends gg.essential.universal.UScreen { + open(): void; + isOpen(): boolean; + /** + * Registers a method to be run while gui is open. + * Registered method runs on draw. + * Arguments passed through to method: + * - int mouseX + * - int mouseY + * - float partialTicks + * + * @param method the method to run + * @return the trigger + */ + registerDraw(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run while gui is open. + * Registered method runs on mouse click. + * Arguments passed through to method: + * - int mouseX + * - int mouseY + * - int button + * + * @param method the method to run + * @return the trigger + */ + registerClicked(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run while the gui is open. + * Registered method runs on mouse scroll. + * Arguments passed through to method: + * - int mouseX + * - int mouseY + * - int scroll direction + */ + registerScrolled(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run while gui is open. + * Registered method runs on key input. + * Arguments passed through to method: + * - char typed character + * - int key code + * + * @param method the method to run + * @return the trigger + */ + registerKeyTyped(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run while gui is open. + * Registered method runs on key input. + * Arguments passed through to method: + * - int mouseX + * - int mouseY + * - int clickedMouseButton + * - long timeSinceLastClick + * + * @param method the method to run + * @return the trigger + */ + registerMouseDragged(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run while gui is open. + * Registered method runs on mouse release. + * Arguments passed through to method: + * - int mouseX + * - int mouseY + * - int button + * + * @param method the method to run + * @return the trigger + */ + registerMouseReleased(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run while gui is open. + * Registered method runs when an action is performed (clicking a button) + * Arguments passed through to method: + * - the button that is clicked + * + * @param method the method to run + * @return the trigger + */ + registerActionPerformed(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run when the gui is opened. + * Arguments passed through to method: + * - the gui that is opened + * + * @param method the method to run + * @return the trigger + */ + registerOpened(method: any): com.chattriggers.ctjs.api.render.Gui; + /** + * Registers a method to be run when the gui is closed. + * Arguments passed through to method: + * - the gui that is closed + * + * @param method the method to run + * @return the trigger + */ + registerClosed(method: any): com.chattriggers.ctjs.api.render.Gui; + unregisterDraw(): com.chattriggers.ctjs.api.render.Gui; + unregisterClicked(): com.chattriggers.ctjs.api.render.Gui; + unregisterScrolled(): com.chattriggers.ctjs.api.render.Gui; + unregisterKeyTyped(): com.chattriggers.ctjs.api.render.Gui; + unregisterMouseDragged(): com.chattriggers.ctjs.api.render.Gui; + unregisterMouseReleased(): com.chattriggers.ctjs.api.render.Gui; + unregisterActionPerformed(): com.chattriggers.ctjs.api.render.Gui; + unregisterOpened(): com.chattriggers.ctjs.api.render.Gui; + unregisterClosed(): com.chattriggers.ctjs.api.render.Gui; + setDoesPauseGame(doesPauseGame: boolean): com.chattriggers.ctjs.api.render.Gui; + /** + * Add a base Minecraft button to the gui + * + * @param button the button to add + * @return the button ID for use in actionPerformed + */ + addButton(button: net.minecraft.client.gui.components.Button): number; + /** + * Add a base Minecraft button to the gui + * + * @param x the x position of the button + * @param y the y position of the button + * @param width the width of the button + * @param height the height of the button + * @param buttonText the label of the button + * @return the button ID for use in actionPerformed + */ + addButton(x: number, y: number, buttonText: com.chattriggers.ctjs.api.message.TextComponent): number; + /** + * Add a base Minecraft button to the gui + * + * @param x the x position of the button + * @param y the y position of the button + * @param width the width of the button + * @param height the height of the button + * @param buttonText the label of the button + * @return the button ID for use in actionPerformed + */ + addButton(x: number, y: number, width: number, buttonText: com.chattriggers.ctjs.api.message.TextComponent): number; + /** + * Add a base Minecraft button to the gui + * + * @param x the x position of the button + * @param y the y position of the button + * @param width the width of the button + * @param height the height of the button + * @param buttonText the label of the button + * @return the button ID for use in actionPerformed + */ + addButton(x: number, y: number, width: number, height: number, buttonText: com.chattriggers.ctjs.api.message.TextComponent): number; + addButton(x: number, y: number, width: number, height: number, buttonText: string): number; + /** + * Removes a button from the gui with the given id + * + * @param buttonId the id of the button to remove + * @return the Gui for method chaining + */ + removeButton(buttonId: number): com.chattriggers.ctjs.api.render.Gui; + clearButtons(): com.chattriggers.ctjs.api.render.Gui; + getButtonVisibility(buttonId: number): boolean; + /** + * Sets the visibility of a button + * + * @param buttonId the id of the button to change + * @param visible the new visibility of the button + * @return the Gui for method chaining + */ + setButtonVisibility(buttonId: number, visible: boolean): com.chattriggers.ctjs.api.render.Gui; + getButtonEnabled(buttonId: number): boolean; + /** + * Sets the enabled state of a button + * + * @param buttonId the id of the button to set + * @param enabled the enabled state of the button + * @return the Gui for method chaining + */ + setButtonEnabled(buttonId: number, enabled: boolean): com.chattriggers.ctjs.api.render.Gui; + getButtonWidth(buttonId: number): number; + /** + * Sets the button's width. Button textures break if the width is greater than 200 + * + * @param buttonId id of the button + * @param width the new width + * @return the Gui for method chaining + */ + setButtonWidth(buttonId: number, width: number): com.chattriggers.ctjs.api.render.Gui; + getButtonHeight(buttonId: number): number; + /** + * Sets the button's height. Button textures break if the height is not 20 + * + * @param buttonId id of the button + * @param height the new height + * @return the Gui for method chaining + */ + setButtonHeight(buttonId: number, height: number): com.chattriggers.ctjs.api.render.Gui; + getButtonX(buttonId: number): number; + /** + * Sets the button's x position + * + * @param buttonId id of the button + * @param x the new x position + * @return the Gui for method chaining + */ + setButtonX(buttonId: number, x: number): com.chattriggers.ctjs.api.render.Gui; + getButtonY(buttonId: number): number; + /** + * Sets the button's y position + * + * @param buttonId id of the button + * @param y the new y position + * @return the Gui for method chaining + */ + setButtonY(buttonId: number, y: number): com.chattriggers.ctjs.api.render.Gui; + /** + * Sets the button's position + * + * @param buttonId id of the button + * @param x the new x position + * @param y the new y position + * @return the Gui for method chaining + */ + setButtonLoc(buttonId: number, x: number, y: number): com.chattriggers.ctjs.api.render.Gui; + /** + * Sets the button's text + * + * @param buttonId id of the button + * @param text the new text + */ + setButtonText(buttonId: number, text: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Gui; + /** + * Sets the button's text + * + * @param buttonId id of the button + * @param text the new text + */ + setButtonText(buttonId: number, text: string): com.chattriggers.ctjs.api.render.Gui; + /** + * Sets the gui's tooltip, this will be visible on top of the cursor + * when the gui is open. + * + * @param text the contents of the tooltip + */ + setTooltip(text: com.chattriggers.ctjs.api.message.TextComponent): com.chattriggers.ctjs.api.render.Gui; + /** + * Sets the gui's tooltip, this will be visible on top of the cursor + * when the gui is open. + * + * @param text the contents of the tooltip + */ + setTooltip(text: string): com.chattriggers.ctjs.api.render.Gui; + } + const Toast: { + new(config: org.mozilla.javascript.NativeObject): com.chattriggers.ctjs.api.render.Toast; + } + interface Toast extends net.minecraft.client.gui.components.toasts.Toast { + getTitle(): any | null | undefined; + setTitle(value: any | null | undefined): void; + getDescription(): any | null | undefined; + setDescription(value: any | null | undefined): void; + getBackground(): any | null | undefined; + setBackground(value: any | null | undefined): void; + getIcon(): any | null | undefined; + setIcon(value: any | null | undefined): void; + getDisplayTime(): number; + setDisplayTime(value: number): void; + show(): com.chattriggers.ctjs.api.render.Toast; + } + } + const Config$ConsoleSettings: { + new(clearConsoleOnLoad: boolean, openConsoleOnError: boolean, consoleFiraCodeFont: boolean, consoleFontSize: number, customTheme: boolean, consoleTheme: number, consoleTextColor: java.awt.Color, consoleBackgroundColor: java.awt.Color, consoleErrorColor: java.awt.Color, consoleWarningColor: java.awt.Color): com.chattriggers.ctjs.api.Config$ConsoleSettings; + } + interface Config$ConsoleSettings { + getClearConsoleOnLoad(): boolean; + setClearConsoleOnLoad(value: boolean): void; + getOpenConsoleOnError(): boolean; + setOpenConsoleOnError(value: boolean): void; + getConsoleFiraCodeFont(): boolean; + setConsoleFiraCodeFont(value: boolean): void; + getConsoleFontSize(): number; + setConsoleFontSize(value: number): void; + getCustomTheme(): boolean; + setCustomTheme(value: boolean): void; + getConsoleTheme(): number; + setConsoleTheme(value: number): void; + getConsoleTextColor(): java.awt.Color; + setConsoleTextColor(value: java.awt.Color): void; + getConsoleBackgroundColor(): java.awt.Color; + setConsoleBackgroundColor(value: java.awt.Color): void; + getConsoleErrorColor(): java.awt.Color; + setConsoleErrorColor(value: java.awt.Color): void; + getConsoleWarningColor(): java.awt.Color; + setConsoleWarningColor(value: java.awt.Color): void; + component1(): boolean; + component2(): boolean; + component3(): boolean; + component4(): number; + component5(): boolean; + component6(): number; + component7(): java.awt.Color; + component8(): java.awt.Color; + component9(): java.awt.Color; + component10(): java.awt.Color; + copy(clearConsoleOnLoad: boolean, openConsoleOnError: boolean, consoleFiraCodeFont: boolean, consoleFontSize: number, customTheme: boolean, consoleTheme: number, consoleTextColor: java.awt.Color, consoleBackgroundColor: java.awt.Color, consoleErrorColor: java.awt.Color, consoleWarningColor: java.awt.Color): com.chattriggers.ctjs.api.Config$ConsoleSettings; + } + const Config$ConsoleSettings$Companion: { + new(): unknown; + } + interface Config$ConsoleSettings$Companion { + new(): unknown; + make(): com.chattriggers.ctjs.api.Config$ConsoleSettings; + } + interface CTWrapper { + getMcValue(): MCClass; + toMC(): MCClass; + } + const Config: { + ConsoleSettings: typeof com.chattriggers.ctjs.api.Config$ConsoleSettings; + getModuleImportHelp(): boolean; + setModuleImportHelp(value: boolean): void; + getModuleChangelog(): boolean; + setModuleChangelog(value: boolean): void; + getShowUpdatesInChat(): boolean; + setShowUpdatesInChat(value: boolean): void; + getAutoUpdateModules(): boolean; + setAutoUpdateModules(value: boolean): void; + getSendStatistics(): boolean; + setSendStatistics(value: boolean): void; + getClearConsoleOnLoad(): boolean; + setClearConsoleOnLoad(value: boolean): void; + getOpenConsoleOnError(): boolean; + setOpenConsoleOnError(value: boolean): void; + getConsoleFiraCodeFont(): boolean; + setConsoleFiraCodeFont(value: boolean): void; + getConsoleFontSize(): number; + setConsoleFontSize(value: number): void; + getCustomTheme(): boolean; + setCustomTheme(value: boolean): void; + getConsoleTheme(): number; + setConsoleTheme(value: number): void; + getConsoleTextColor(): java.awt.Color; + setConsoleTextColor(value: java.awt.Color): void; + getConsoleBackgroundColor(): java.awt.Color; + setConsoleBackgroundColor(value: java.awt.Color): void; + getConsoleErrorColor(): java.awt.Color; + setConsoleErrorColor(value: java.awt.Color): void; + getConsoleWarningColor(): java.awt.Color; + setConsoleWarningColor(value: java.awt.Color): void; + new(): com.chattriggers.ctjs.api.Config; + } + interface Config extends gg.essential.vigilance.Vigilant { + getModuleImportHelp(): boolean; + setModuleImportHelp(value: boolean): void; + getModuleChangelog(): boolean; + setModuleChangelog(value: boolean): void; + getShowUpdatesInChat(): boolean; + setShowUpdatesInChat(value: boolean): void; + getAutoUpdateModules(): boolean; + setAutoUpdateModules(value: boolean): void; + getSendStatistics(): boolean; + setSendStatistics(value: boolean): void; + getClearConsoleOnLoad(): boolean; + setClearConsoleOnLoad(value: boolean): void; + getOpenConsoleOnError(): boolean; + setOpenConsoleOnError(value: boolean): void; + getConsoleFiraCodeFont(): boolean; + setConsoleFiraCodeFont(value: boolean): void; + getConsoleFontSize(): number; + setConsoleFontSize(value: number): void; + getCustomTheme(): boolean; + setCustomTheme(value: boolean): void; + getConsoleTheme(): number; + setConsoleTheme(value: number): void; + getConsoleTextColor(): java.awt.Color; + setConsoleTextColor(value: java.awt.Color): void; + getConsoleBackgroundColor(): java.awt.Color; + setConsoleBackgroundColor(value: java.awt.Color): void; + getConsoleErrorColor(): java.awt.Color; + setConsoleErrorColor(value: java.awt.Color): void; + getConsoleWarningColor(): java.awt.Color; + setConsoleWarningColor(value: java.awt.Color): void; + new(): com.chattriggers.ctjs.api.Config; + } + const V5Auth: { + authenticate(): java.util.concurrent.CompletableFuture; + getJwtToken(): string | null | undefined; + getFreshJwtToken(): string | null | undefined; + setJwtToken(token: string | null | undefined): void; + shutDownHard(): java.lang.Void; + new(): com.chattriggers.ctjs.api.V5Auth; + } + interface V5Auth { + authenticate(): java.util.concurrent.CompletableFuture; + getJwtToken(): string | null | undefined; + getFreshJwtToken(): string | null | undefined; + setJwtToken(token: string | null | undefined): void; + shutDownHard(): java.lang.Void; + new(): com.chattriggers.ctjs.api.V5Auth; + } + const V5Irc: { + getEnabled(): boolean; + setEnabled(value: boolean): void; + getAutoMeow(): boolean; + setAutoMeow(value: boolean): void; + getRandomChoiceMeow(): boolean; + setRandomChoiceMeow(value: boolean): void; + reconnect(): void; + send(content: string): void; + new(): com.chattriggers.ctjs.api.V5Irc; + } + interface V5Irc { + getEnabled(): boolean; + setEnabled(value: boolean): void; + getAutoMeow(): boolean; + setAutoMeow(value: boolean): void; + getRandomChoiceMeow(): boolean; + setRandomChoiceMeow(value: boolean): void; + reconnect(): void; + send(content: string): void; + new(): com.chattriggers.ctjs.api.V5Irc; + } + const Mappings: { /** - * Registers a new trigger that runs whenever a packet is sent from the client to the server - * - * Passes through two arguments: - * - The packet - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - [ClassFilterTrigger.setFilteredClasses] Sets the packet classes which this trigger - * gets fired for - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Gets a classes unmapped class name, or throws an error if it is not mapped */ - registerPacketSent(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + unmapClass(clazz: java.lang.Class): string | null | undefined; /** - * Registers a new trigger that runs whenever a packet is sent to the client from the server - * - * Passes through two arguments: - * - The packet - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - [ClassFilterTrigger.setFilteredClasses] Sets the packet classes which this trigger - * gets fired for - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Gets an unmapped class name from a mapped class name, or returns null if + * it either does not exist or is not mapped. */ - registerPacketReceived(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + unmapClassName(className: string): string | null | undefined; /** - * Registers a new trigger that runs whenever the player connects to a server - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Gets the mapped class name from an unmapped class name or null if the class + * name does not exist. Note that this is not required to use mapped classes, + * as Rhino performs this mapping automatically during runtime. */ - registerServerConnect(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + mapClassName(className: string): string | null | undefined; /** - * Registers a new trigger that runs whenever the player disconnects from a server - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Allows runtime inspection of mappings */ - registerServerDisconnect(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + new(): com.chattriggers.ctjs.api.Mappings; + } + interface Mappings { /** - * Registers a new trigger that runs whenever an entity is rendered - * - * Passes through three arguments: - * - The [com.chattriggers.ctjs.api.entity.Entity] - * - The partial ticks - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - [ClassFilterTrigger.setFilteredClasses] Sets the entity classes which this trigger - * gets fired for - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Gets a classes unmapped class name, or throws an error if it is not mapped */ - registerRenderEntity(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + unmapClass(clazz: java.lang.Class): string | null | undefined; /** - * Registers a new trigger that runs whenever a block entity is rendered - * - * Passes through three arguments: - * - The [com.chattriggers.ctjs.api.entity.BlockEntity] - * - The partial ticks - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - [ClassFilterTrigger.setFilteredClasses] Sets the tile entity classes which this trigger - * gets fired for - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Gets an unmapped class name from a mapped class name, or returns null if + * it either does not exist or is not mapped. */ - registerRenderBlockEntity(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + unmapClassName(className: string): string | null | undefined; /** - * Registers a new trigger that runs after the current screen is rendered - * - * Passes through three arguments: - * - The mouseX - * - The mouseY - * - The GuiScreen - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Gets the mapped class name from an unmapped class name or null if the class + * name does not exist. Note that this is not required to use mapped classes, + * as Rhino performs this mapping automatically during runtime. */ - registerPostGuiRender(method: any): com.chattriggers.ctjs.api.triggers.Trigger; + mapClassName(className: string): string | null | undefined; /** - * Registers a new trigger that runs whenever a particle is spawned - * - * Passes through two arguments: - * - The [com.chattriggers.ctjs.api.entity.Particle] - * - The event, which can be cancelled - * - * Available modifications: - * - [Trigger.setPriority] Sets the priority - * - * @param method The method to call when the event is fired - * @return The trigger for additional modification + * Allows runtime inspection of mappings */ - registerSpawnParticle(method: any): com.chattriggers.ctjs.api.triggers.Trigger; - new(): com.chattriggers.ctjs.engine.Register; + new(): com.chattriggers.ctjs.api.Mappings; + } + } + namespace internal { + namespace launch { + interface IInjector { + } + } + namespace commands { + const CommandCollection: { + new(): com.chattriggers.ctjs.internal.commands.CommandCollection; + } + interface CommandCollection { + register(command: com.chattriggers.ctjs.internal.commands.Command): void; + unregister(command: com.chattriggers.ctjs.internal.commands.Command): void; + unregisterAll(): void; + onExecute(block: kotlin.Function1, void>): T; + } + interface Command { + getOverrideExisting(): boolean; + getName(): string; + registerImpl(dispatcher: com.mojang.brigadier.CommandDispatcher): void; + unregisterImpl(dispatcher: com.mojang.brigadier.CommandDispatcher): void; + } } } const CTJS: { @@ -53015,117 +52220,6 @@ declare global { } } } - namespace v5 { - namespace loader { - const V5PreLaunch: { - new(): com.v5.loader.V5PreLaunch; - } - interface V5PreLaunch extends net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint { - } - } - namespace storage { - const V5MixinStorage: { - get(key: string, defaultValue: any): any; - getBoolean(key: string, defaultValue: boolean): boolean; - getString(key: string, defaultValue: string): string; - set(key: string, value: any): void; - clear(): void; - applyMethod(methodName: string, original: T, expectedType: java.lang.Class): T; - } - interface V5MixinStorage { - } - } - namespace mixins { - const CrossCollisionBlockMixin: { - new(): com.v5.mixins.CrossCollisionBlockMixin; - } - interface CrossCollisionBlockMixin { - } - const MinecraftMixin: { - new(): com.v5.mixins.MinecraftMixin; - } - interface MinecraftMixin { - options: net.minecraft.client.Options; - } - const MouseHandlerMixin: { - new(): com.v5.mixins.MouseHandlerMixin; - } - interface MouseHandlerMixin { - } - const DrawContextCapture: { - new(): com.v5.mixins.DrawContextCapture; - } - interface DrawContextCapture { - } - const BlockMixin: { - new(): com.v5.mixins.BlockMixin; - } - interface BlockMixin { - } - const FramerateLimitTrackerMixin: { - new(): com.v5.mixins.FramerateLimitTrackerMixin; - } - interface FramerateLimitTrackerMixin { - } - interface JoinMultiplayerScreenMixin extends net.minecraft.client.gui.screens.Screen { - } - const KeyboardHandlerMixin: { - new(): com.v5.mixins.KeyboardHandlerMixin; - } - interface KeyboardHandlerMixin { - } - const YggdrasilServicesKeyInfoMixin: { - new(): com.v5.mixins.YggdrasilServicesKeyInfoMixin; - } - interface YggdrasilServicesKeyInfoMixin { - } - const EntityRendererMixin: { - new(): com.v5.mixins.EntityRendererMixin; - } - interface EntityRendererMixin { - } - const ChatComponentMixin: { - new(): com.v5.mixins.ChatComponentMixin; - } - interface ChatComponentMixin { - } - const FirmamentModAnnouncerMixin: { - new(): com.v5.mixins.FirmamentModAnnouncerMixin; - } - interface FirmamentModAnnouncerMixin { - } - const ConnectionProxyMixin: { - new(): com.v5.mixins.ConnectionProxyMixin; - } - interface ConnectionProxyMixin { - } - const GameRendererMixin: { - new(): com.v5.mixins.GameRendererMixin; - } - interface GameRendererMixin { - } - const LevelRendererMixin: { - new(): com.v5.mixins.LevelRendererMixin; - } - interface LevelRendererMixin { - } - const CameraMixin: { - new(): com.v5.mixins.CameraMixin; - } - interface CameraMixin { - } - const ConnectionMixin: { - new(): com.v5.mixins.ConnectionMixin; - } - interface ConnectionMixin { - } - const PlayerTabOverlayMixin: { - new(): com.v5.mixins.PlayerTabOverlayMixin; - } - interface PlayerTabOverlayMixin { - } - } - } } namespace javax { namespace security { @@ -59092,5042 +58186,237 @@ declare global { mul(p0: number, p1: number, p2: org.joml.Vector2L): org.joml.Vector2L; div(p0: number, p1: org.joml.Vector2L): org.joml.Vector2L; div(p0: number, p1: org.joml.Vector2L): org.joml.Vector2L; - negate(p0: org.joml.Vector2L): org.joml.Vector2L; - min(p0: org.joml.Vector2Lc, p1: org.joml.Vector2L): org.joml.Vector2L; - max(p0: org.joml.Vector2Lc, p1: org.joml.Vector2L): org.joml.Vector2L; - maxComponent(): number; - minComponent(): number; - absolute(p0: org.joml.Vector2L): org.joml.Vector2L; - } - const Matrix3x2fStack: { - new(p0: number): org.joml.Matrix3x2fStack; - new(): org.joml.Matrix3x2fStack; - } - interface Matrix3x2fStack extends org.joml.Matrix3x2f { - clear(): org.joml.Matrix3x2fStack; - pushMatrix(): org.joml.Matrix3x2fStack; - popMatrix(): org.joml.Matrix3x2fStack; - } - } - namespace slf4j { - namespace event { - const Level: { - ERROR: org.slf4j.event.Level; - WARN: org.slf4j.event.Level; - INFO: org.slf4j.event.Level; - DEBUG: org.slf4j.event.Level; - TRACE: org.slf4j.event.Level; - entries: kotlin.enums.EnumEntries; - intToLevel(p0: number): org.slf4j.event.Level; - values(): Array; - valueOf(value: string): org.slf4j.event.Level; - } - interface Level extends kotlin.Enum { - toInt(): number; - } - } - namespace spi { - interface LoggingEventBuilder { - setCause(p0: kotlin.Throwable): org.slf4j.spi.LoggingEventBuilder; - addMarker(p0: org.slf4j.Marker): org.slf4j.spi.LoggingEventBuilder; - addArgument(p0: any): org.slf4j.spi.LoggingEventBuilder; - addArgument(p0: unknown): org.slf4j.spi.LoggingEventBuilder; - addKeyValue(p0: string, p1: any): org.slf4j.spi.LoggingEventBuilder; - addKeyValue(p0: string, p1: unknown): org.slf4j.spi.LoggingEventBuilder; - setMessage(p0: string): org.slf4j.spi.LoggingEventBuilder; - setMessage(p0: unknown): org.slf4j.spi.LoggingEventBuilder; - log(): void; - log(p0: string): void; - log(p0: string, p1: any): void; - log(p0: string, p1: any, p2: any): void; - log(p0: string, p1: any): void; - log(p0: unknown): void; - } - } - const Logger: { - ROOT_LOGGER_NAME: string; - } - interface Logger { - getName(): string; - makeLoggingEventBuilder(p0: org.slf4j.event.Level): org.slf4j.spi.LoggingEventBuilder; - atLevel(p0: org.slf4j.event.Level): org.slf4j.spi.LoggingEventBuilder; - isEnabledForLevel(p0: org.slf4j.event.Level): boolean; - isTraceEnabled(): boolean; - isTraceEnabled(p0: org.slf4j.Marker): boolean; - trace(p0: string): void; - trace(p0: string, p1: any): void; - trace(p0: string, p1: any, p2: any): void; - trace(p0: string, p1: any): void; - trace(p0: string, p1: kotlin.Throwable): void; - trace(p0: org.slf4j.Marker, p1: string): void; - trace(p0: org.slf4j.Marker, p1: string, p2: any): void; - trace(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; - trace(p0: org.slf4j.Marker, p1: string, p2: any): void; - trace(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; - atTrace(): org.slf4j.spi.LoggingEventBuilder; - isDebugEnabled(): boolean; - isDebugEnabled(p0: org.slf4j.Marker): boolean; - debug(p0: string): void; - debug(p0: string, p1: any): void; - debug(p0: string, p1: any, p2: any): void; - debug(p0: string, p1: any): void; - debug(p0: string, p1: kotlin.Throwable): void; - debug(p0: org.slf4j.Marker, p1: string): void; - debug(p0: org.slf4j.Marker, p1: string, p2: any): void; - debug(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; - debug(p0: org.slf4j.Marker, p1: string, p2: any): void; - debug(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; - atDebug(): org.slf4j.spi.LoggingEventBuilder; - isInfoEnabled(): boolean; - isInfoEnabled(p0: org.slf4j.Marker): boolean; - info(p0: string): void; - info(p0: string, p1: any): void; - info(p0: string, p1: any, p2: any): void; - info(p0: string, p1: any): void; - info(p0: string, p1: kotlin.Throwable): void; - info(p0: org.slf4j.Marker, p1: string): void; - info(p0: org.slf4j.Marker, p1: string, p2: any): void; - info(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; - info(p0: org.slf4j.Marker, p1: string, p2: any): void; - info(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; - atInfo(): org.slf4j.spi.LoggingEventBuilder; - isWarnEnabled(): boolean; - isWarnEnabled(p0: org.slf4j.Marker): boolean; - warn(p0: string): void; - warn(p0: string, p1: any): void; - warn(p0: string, p1: any): void; - warn(p0: string, p1: any, p2: any): void; - warn(p0: string, p1: kotlin.Throwable): void; - warn(p0: org.slf4j.Marker, p1: string): void; - warn(p0: org.slf4j.Marker, p1: string, p2: any): void; - warn(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; - warn(p0: org.slf4j.Marker, p1: string, p2: any): void; - warn(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; - atWarn(): org.slf4j.spi.LoggingEventBuilder; - isErrorEnabled(): boolean; - isErrorEnabled(p0: org.slf4j.Marker): boolean; - error(p0: string): void; - error(p0: string, p1: any): void; - error(p0: string, p1: any, p2: any): void; - error(p0: string, p1: any): void; - error(p0: string, p1: kotlin.Throwable): void; - error(p0: org.slf4j.Marker, p1: string): void; - error(p0: org.slf4j.Marker, p1: string, p2: any): void; - error(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; - error(p0: org.slf4j.Marker, p1: string, p2: any): void; - error(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; - atError(): org.slf4j.spi.LoggingEventBuilder; - } - const Marker: { - ANY_MARKER: string; - ANY_NON_NULL_MARKER: string; - } - interface Marker extends java.io.Serializable { - getName(): string; - add(p0: org.slf4j.Marker): void; - remove(p0: org.slf4j.Marker): boolean; - hasChildren(): boolean; - hasReferences(): boolean; - iterator(): kotlin.collections.MutableIterator; - contains(p0: org.slf4j.Marker): boolean; - contains(p0: string): boolean; - } - } - namespace apache { - namespace commons { - namespace io { - } - namespace lang3 { - } - } - } - namespace lwjgl { - namespace opengl { - const GL11: { - GL_ACCUM: number; - GL_LOAD: number; - GL_RETURN: number; - GL_MULT: number; - GL_ADD: number; - GL_NEVER: number; - GL_LESS: number; - GL_EQUAL: number; - GL_LEQUAL: number; - GL_GREATER: number; - GL_NOTEQUAL: number; - GL_GEQUAL: number; - GL_ALWAYS: number; - GL_CURRENT_BIT: number; - GL_POINT_BIT: number; - GL_LINE_BIT: number; - GL_POLYGON_BIT: number; - GL_POLYGON_STIPPLE_BIT: number; - GL_PIXEL_MODE_BIT: number; - GL_LIGHTING_BIT: number; - GL_FOG_BIT: number; - GL_DEPTH_BUFFER_BIT: number; - GL_ACCUM_BUFFER_BIT: number; - GL_STENCIL_BUFFER_BIT: number; - GL_VIEWPORT_BIT: number; - GL_TRANSFORM_BIT: number; - GL_ENABLE_BIT: number; - GL_COLOR_BUFFER_BIT: number; - GL_HINT_BIT: number; - GL_EVAL_BIT: number; - GL_LIST_BIT: number; - GL_TEXTURE_BIT: number; - GL_SCISSOR_BIT: number; - GL_ALL_ATTRIB_BITS: number; - GL_POINTS: number; - GL_LINES: number; - GL_LINE_LOOP: number; - GL_LINE_STRIP: number; - GL_TRIANGLES: number; - GL_TRIANGLE_STRIP: number; - GL_TRIANGLE_FAN: number; - GL_QUADS: number; - GL_QUAD_STRIP: number; - GL_POLYGON: number; - GL_ZERO: number; - GL_ONE: number; - GL_SRC_COLOR: number; - GL_ONE_MINUS_SRC_COLOR: number; - GL_SRC_ALPHA: number; - GL_ONE_MINUS_SRC_ALPHA: number; - GL_DST_ALPHA: number; - GL_ONE_MINUS_DST_ALPHA: number; - GL_DST_COLOR: number; - GL_ONE_MINUS_DST_COLOR: number; - GL_SRC_ALPHA_SATURATE: number; - GL_TRUE: number; - GL_FALSE: number; - GL_CLIP_PLANE0: number; - GL_CLIP_PLANE1: number; - GL_CLIP_PLANE2: number; - GL_CLIP_PLANE3: number; - GL_CLIP_PLANE4: number; - GL_CLIP_PLANE5: number; - GL_BYTE: number; - GL_UNSIGNED_BYTE: number; - GL_SHORT: number; - GL_UNSIGNED_SHORT: number; - GL_INT: number; - GL_UNSIGNED_INT: number; - GL_FLOAT: number; - GL_2_BYTES: number; - GL_3_BYTES: number; - GL_4_BYTES: number; - GL_DOUBLE: number; - GL_NONE: number; - GL_FRONT_LEFT: number; - GL_FRONT_RIGHT: number; - GL_BACK_LEFT: number; - GL_BACK_RIGHT: number; - GL_FRONT: number; - GL_BACK: number; - GL_LEFT: number; - GL_RIGHT: number; - GL_FRONT_AND_BACK: number; - GL_AUX0: number; - GL_AUX1: number; - GL_AUX2: number; - GL_AUX3: number; - GL_NO_ERROR: number; - GL_INVALID_ENUM: number; - GL_INVALID_VALUE: number; - GL_INVALID_OPERATION: number; - GL_STACK_OVERFLOW: number; - GL_STACK_UNDERFLOW: number; - GL_OUT_OF_MEMORY: number; - GL_2D: number; - GL_3D: number; - GL_3D_COLOR: number; - GL_3D_COLOR_TEXTURE: number; - GL_4D_COLOR_TEXTURE: number; - GL_PASS_THROUGH_TOKEN: number; - GL_POINT_TOKEN: number; - GL_LINE_TOKEN: number; - GL_POLYGON_TOKEN: number; - GL_BITMAP_TOKEN: number; - GL_DRAW_PIXEL_TOKEN: number; - GL_COPY_PIXEL_TOKEN: number; - GL_LINE_RESET_TOKEN: number; - GL_EXP: number; - GL_EXP2: number; - GL_CW: number; - GL_CCW: number; - GL_COEFF: number; - GL_ORDER: number; - GL_DOMAIN: number; - GL_CURRENT_COLOR: number; - GL_CURRENT_INDEX: number; - GL_CURRENT_NORMAL: number; - GL_CURRENT_TEXTURE_COORDS: number; - GL_CURRENT_RASTER_COLOR: number; - GL_CURRENT_RASTER_INDEX: number; - GL_CURRENT_RASTER_TEXTURE_COORDS: number; - GL_CURRENT_RASTER_POSITION: number; - GL_CURRENT_RASTER_POSITION_VALID: number; - GL_CURRENT_RASTER_DISTANCE: number; - GL_POINT_SMOOTH: number; - GL_POINT_SIZE: number; - GL_POINT_SIZE_RANGE: number; - GL_POINT_SIZE_GRANULARITY: number; - GL_LINE_SMOOTH: number; - GL_LINE_WIDTH: number; - GL_LINE_WIDTH_RANGE: number; - GL_LINE_WIDTH_GRANULARITY: number; - GL_LINE_STIPPLE: number; - GL_LINE_STIPPLE_PATTERN: number; - GL_LINE_STIPPLE_REPEAT: number; - GL_LIST_MODE: number; - GL_MAX_LIST_NESTING: number; - GL_LIST_BASE: number; - GL_LIST_INDEX: number; - GL_POLYGON_MODE: number; - GL_POLYGON_SMOOTH: number; - GL_POLYGON_STIPPLE: number; - GL_EDGE_FLAG: number; - GL_CULL_FACE: number; - GL_CULL_FACE_MODE: number; - GL_FRONT_FACE: number; - GL_LIGHTING: number; - GL_LIGHT_MODEL_LOCAL_VIEWER: number; - GL_LIGHT_MODEL_TWO_SIDE: number; - GL_LIGHT_MODEL_AMBIENT: number; - GL_SHADE_MODEL: number; - GL_COLOR_MATERIAL_FACE: number; - GL_COLOR_MATERIAL_PARAMETER: number; - GL_COLOR_MATERIAL: number; - GL_FOG: number; - GL_FOG_INDEX: number; - GL_FOG_DENSITY: number; - GL_FOG_START: number; - GL_FOG_END: number; - GL_FOG_MODE: number; - GL_FOG_COLOR: number; - GL_DEPTH_RANGE: number; - GL_DEPTH_TEST: number; - GL_DEPTH_WRITEMASK: number; - GL_DEPTH_CLEAR_VALUE: number; - GL_DEPTH_FUNC: number; - GL_ACCUM_CLEAR_VALUE: number; - GL_STENCIL_TEST: number; - GL_STENCIL_CLEAR_VALUE: number; - GL_STENCIL_FUNC: number; - GL_STENCIL_VALUE_MASK: number; - GL_STENCIL_FAIL: number; - GL_STENCIL_PASS_DEPTH_FAIL: number; - GL_STENCIL_PASS_DEPTH_PASS: number; - GL_STENCIL_REF: number; - GL_STENCIL_WRITEMASK: number; - GL_MATRIX_MODE: number; - GL_NORMALIZE: number; - GL_VIEWPORT: number; - GL_MODELVIEW_STACK_DEPTH: number; - GL_PROJECTION_STACK_DEPTH: number; - GL_TEXTURE_STACK_DEPTH: number; - GL_MODELVIEW_MATRIX: number; - GL_PROJECTION_MATRIX: number; - GL_TEXTURE_MATRIX: number; - GL_ATTRIB_STACK_DEPTH: number; - GL_CLIENT_ATTRIB_STACK_DEPTH: number; - GL_ALPHA_TEST: number; - GL_ALPHA_TEST_FUNC: number; - GL_ALPHA_TEST_REF: number; - GL_DITHER: number; - GL_BLEND_DST: number; - GL_BLEND_SRC: number; - GL_BLEND: number; - GL_LOGIC_OP_MODE: number; - GL_INDEX_LOGIC_OP: number; - GL_LOGIC_OP: number; - GL_COLOR_LOGIC_OP: number; - GL_AUX_BUFFERS: number; - GL_DRAW_BUFFER: number; - GL_READ_BUFFER: number; - GL_SCISSOR_BOX: number; - GL_SCISSOR_TEST: number; - GL_INDEX_CLEAR_VALUE: number; - GL_INDEX_WRITEMASK: number; - GL_COLOR_CLEAR_VALUE: number; - GL_COLOR_WRITEMASK: number; - GL_INDEX_MODE: number; - GL_RGBA_MODE: number; - GL_DOUBLEBUFFER: number; - GL_STEREO: number; - GL_RENDER_MODE: number; - GL_PERSPECTIVE_CORRECTION_HINT: number; - GL_POINT_SMOOTH_HINT: number; - GL_LINE_SMOOTH_HINT: number; - GL_POLYGON_SMOOTH_HINT: number; - GL_FOG_HINT: number; - GL_TEXTURE_GEN_S: number; - GL_TEXTURE_GEN_T: number; - GL_TEXTURE_GEN_R: number; - GL_TEXTURE_GEN_Q: number; - GL_PIXEL_MAP_I_TO_I: number; - GL_PIXEL_MAP_S_TO_S: number; - GL_PIXEL_MAP_I_TO_R: number; - GL_PIXEL_MAP_I_TO_G: number; - GL_PIXEL_MAP_I_TO_B: number; - GL_PIXEL_MAP_I_TO_A: number; - GL_PIXEL_MAP_R_TO_R: number; - GL_PIXEL_MAP_G_TO_G: number; - GL_PIXEL_MAP_B_TO_B: number; - GL_PIXEL_MAP_A_TO_A: number; - GL_PIXEL_MAP_I_TO_I_SIZE: number; - GL_PIXEL_MAP_S_TO_S_SIZE: number; - GL_PIXEL_MAP_I_TO_R_SIZE: number; - GL_PIXEL_MAP_I_TO_G_SIZE: number; - GL_PIXEL_MAP_I_TO_B_SIZE: number; - GL_PIXEL_MAP_I_TO_A_SIZE: number; - GL_PIXEL_MAP_R_TO_R_SIZE: number; - GL_PIXEL_MAP_G_TO_G_SIZE: number; - GL_PIXEL_MAP_B_TO_B_SIZE: number; - GL_PIXEL_MAP_A_TO_A_SIZE: number; - GL_UNPACK_SWAP_BYTES: number; - GL_UNPACK_LSB_FIRST: number; - GL_UNPACK_ROW_LENGTH: number; - GL_UNPACK_SKIP_ROWS: number; - GL_UNPACK_SKIP_PIXELS: number; - GL_UNPACK_ALIGNMENT: number; - GL_PACK_SWAP_BYTES: number; - GL_PACK_LSB_FIRST: number; - GL_PACK_ROW_LENGTH: number; - GL_PACK_SKIP_ROWS: number; - GL_PACK_SKIP_PIXELS: number; - GL_PACK_ALIGNMENT: number; - GL_MAP_COLOR: number; - GL_MAP_STENCIL: number; - GL_INDEX_SHIFT: number; - GL_INDEX_OFFSET: number; - GL_RED_SCALE: number; - GL_RED_BIAS: number; - GL_ZOOM_X: number; - GL_ZOOM_Y: number; - GL_GREEN_SCALE: number; - GL_GREEN_BIAS: number; - GL_BLUE_SCALE: number; - GL_BLUE_BIAS: number; - GL_ALPHA_SCALE: number; - GL_ALPHA_BIAS: number; - GL_DEPTH_SCALE: number; - GL_DEPTH_BIAS: number; - GL_MAX_EVAL_ORDER: number; - GL_MAX_LIGHTS: number; - GL_MAX_CLIP_PLANES: number; - GL_MAX_TEXTURE_SIZE: number; - GL_MAX_PIXEL_MAP_TABLE: number; - GL_MAX_ATTRIB_STACK_DEPTH: number; - GL_MAX_MODELVIEW_STACK_DEPTH: number; - GL_MAX_NAME_STACK_DEPTH: number; - GL_MAX_PROJECTION_STACK_DEPTH: number; - GL_MAX_TEXTURE_STACK_DEPTH: number; - GL_MAX_VIEWPORT_DIMS: number; - GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: number; - GL_SUBPIXEL_BITS: number; - GL_INDEX_BITS: number; - GL_RED_BITS: number; - GL_GREEN_BITS: number; - GL_BLUE_BITS: number; - GL_ALPHA_BITS: number; - GL_DEPTH_BITS: number; - GL_STENCIL_BITS: number; - GL_ACCUM_RED_BITS: number; - GL_ACCUM_GREEN_BITS: number; - GL_ACCUM_BLUE_BITS: number; - GL_ACCUM_ALPHA_BITS: number; - GL_NAME_STACK_DEPTH: number; - GL_AUTO_NORMAL: number; - GL_MAP1_COLOR_4: number; - GL_MAP1_INDEX: number; - GL_MAP1_NORMAL: number; - GL_MAP1_TEXTURE_COORD_1: number; - GL_MAP1_TEXTURE_COORD_2: number; - GL_MAP1_TEXTURE_COORD_3: number; - GL_MAP1_TEXTURE_COORD_4: number; - GL_MAP1_VERTEX_3: number; - GL_MAP1_VERTEX_4: number; - GL_MAP2_COLOR_4: number; - GL_MAP2_INDEX: number; - GL_MAP2_NORMAL: number; - GL_MAP2_TEXTURE_COORD_1: number; - GL_MAP2_TEXTURE_COORD_2: number; - GL_MAP2_TEXTURE_COORD_3: number; - GL_MAP2_TEXTURE_COORD_4: number; - GL_MAP2_VERTEX_3: number; - GL_MAP2_VERTEX_4: number; - GL_MAP1_GRID_DOMAIN: number; - GL_MAP1_GRID_SEGMENTS: number; - GL_MAP2_GRID_DOMAIN: number; - GL_MAP2_GRID_SEGMENTS: number; - GL_TEXTURE_1D: number; - GL_TEXTURE_2D: number; - GL_FEEDBACK_BUFFER_POINTER: number; - GL_FEEDBACK_BUFFER_SIZE: number; - GL_FEEDBACK_BUFFER_TYPE: number; - GL_SELECTION_BUFFER_POINTER: number; - GL_SELECTION_BUFFER_SIZE: number; - GL_TEXTURE_WIDTH: number; - GL_TEXTURE_HEIGHT: number; - GL_TEXTURE_INTERNAL_FORMAT: number; - GL_TEXTURE_COMPONENTS: number; - GL_TEXTURE_BORDER_COLOR: number; - GL_TEXTURE_BORDER: number; - GL_DONT_CARE: number; - GL_FASTEST: number; - GL_NICEST: number; - GL_LIGHT0: number; - GL_LIGHT1: number; - GL_LIGHT2: number; - GL_LIGHT3: number; - GL_LIGHT4: number; - GL_LIGHT5: number; - GL_LIGHT6: number; - GL_LIGHT7: number; - GL_AMBIENT: number; - GL_DIFFUSE: number; - GL_SPECULAR: number; - GL_POSITION: number; - GL_SPOT_DIRECTION: number; - GL_SPOT_EXPONENT: number; - GL_SPOT_CUTOFF: number; - GL_CONSTANT_ATTENUATION: number; - GL_LINEAR_ATTENUATION: number; - GL_QUADRATIC_ATTENUATION: number; - GL_COMPILE: number; - GL_COMPILE_AND_EXECUTE: number; - GL_CLEAR: number; - GL_AND: number; - GL_AND_REVERSE: number; - GL_COPY: number; - GL_AND_INVERTED: number; - GL_NOOP: number; - GL_XOR: number; - GL_OR: number; - GL_NOR: number; - GL_EQUIV: number; - GL_INVERT: number; - GL_OR_REVERSE: number; - GL_COPY_INVERTED: number; - GL_OR_INVERTED: number; - GL_NAND: number; - GL_SET: number; - GL_EMISSION: number; - GL_SHININESS: number; - GL_AMBIENT_AND_DIFFUSE: number; - GL_COLOR_INDEXES: number; - GL_MODELVIEW: number; - GL_PROJECTION: number; - GL_TEXTURE: number; - GL_COLOR: number; - GL_DEPTH: number; - GL_STENCIL: number; - GL_COLOR_INDEX: number; - GL_STENCIL_INDEX: number; - GL_DEPTH_COMPONENT: number; - GL_RED: number; - GL_GREEN: number; - GL_BLUE: number; - GL_ALPHA: number; - GL_RGB: number; - GL_RGBA: number; - GL_LUMINANCE: number; - GL_LUMINANCE_ALPHA: number; - GL_BITMAP: number; - GL_POINT: number; - GL_LINE: number; - GL_FILL: number; - GL_RENDER: number; - GL_FEEDBACK: number; - GL_SELECT: number; - GL_FLAT: number; - GL_SMOOTH: number; - GL_KEEP: number; - GL_REPLACE: number; - GL_INCR: number; - GL_DECR: number; - GL_VENDOR: number; - GL_RENDERER: number; - GL_VERSION: number; - GL_EXTENSIONS: number; - GL_S: number; - GL_T: number; - GL_R: number; - GL_Q: number; - GL_MODULATE: number; - GL_DECAL: number; - GL_TEXTURE_ENV_MODE: number; - GL_TEXTURE_ENV_COLOR: number; - GL_TEXTURE_ENV: number; - GL_EYE_LINEAR: number; - GL_OBJECT_LINEAR: number; - GL_SPHERE_MAP: number; - GL_TEXTURE_GEN_MODE: number; - GL_OBJECT_PLANE: number; - GL_EYE_PLANE: number; - GL_NEAREST: number; - GL_LINEAR: number; - GL_NEAREST_MIPMAP_NEAREST: number; - GL_LINEAR_MIPMAP_NEAREST: number; - GL_NEAREST_MIPMAP_LINEAR: number; - GL_LINEAR_MIPMAP_LINEAR: number; - GL_TEXTURE_MAG_FILTER: number; - GL_TEXTURE_MIN_FILTER: number; - GL_TEXTURE_WRAP_S: number; - GL_TEXTURE_WRAP_T: number; - GL_CLAMP: number; - GL_REPEAT: number; - GL_CLIENT_PIXEL_STORE_BIT: number; - GL_CLIENT_VERTEX_ARRAY_BIT: number; - GL_CLIENT_ALL_ATTRIB_BITS: number; - GL_POLYGON_OFFSET_FACTOR: number; - GL_POLYGON_OFFSET_UNITS: number; - GL_POLYGON_OFFSET_POINT: number; - GL_POLYGON_OFFSET_LINE: number; - GL_POLYGON_OFFSET_FILL: number; - GL_ALPHA4: number; - GL_ALPHA8: number; - GL_ALPHA12: number; - GL_ALPHA16: number; - GL_LUMINANCE4: number; - GL_LUMINANCE8: number; - GL_LUMINANCE12: number; - GL_LUMINANCE16: number; - GL_LUMINANCE4_ALPHA4: number; - GL_LUMINANCE6_ALPHA2: number; - GL_LUMINANCE8_ALPHA8: number; - GL_LUMINANCE12_ALPHA4: number; - GL_LUMINANCE12_ALPHA12: number; - GL_LUMINANCE16_ALPHA16: number; - GL_INTENSITY: number; - GL_INTENSITY4: number; - GL_INTENSITY8: number; - GL_INTENSITY12: number; - GL_INTENSITY16: number; - GL_R3_G3_B2: number; - GL_RGB4: number; - GL_RGB5: number; - GL_RGB8: number; - GL_RGB10: number; - GL_RGB12: number; - GL_RGB16: number; - GL_RGBA2: number; - GL_RGBA4: number; - GL_RGB5_A1: number; - GL_RGBA8: number; - GL_RGB10_A2: number; - GL_RGBA12: number; - GL_RGBA16: number; - GL_TEXTURE_RED_SIZE: number; - GL_TEXTURE_GREEN_SIZE: number; - GL_TEXTURE_BLUE_SIZE: number; - GL_TEXTURE_ALPHA_SIZE: number; - GL_TEXTURE_LUMINANCE_SIZE: number; - GL_TEXTURE_INTENSITY_SIZE: number; - GL_PROXY_TEXTURE_1D: number; - GL_PROXY_TEXTURE_2D: number; - GL_TEXTURE_PRIORITY: number; - GL_TEXTURE_RESIDENT: number; - GL_TEXTURE_BINDING_1D: number; - GL_TEXTURE_BINDING_2D: number; - GL_VERTEX_ARRAY: number; - GL_NORMAL_ARRAY: number; - GL_COLOR_ARRAY: number; - GL_INDEX_ARRAY: number; - GL_TEXTURE_COORD_ARRAY: number; - GL_EDGE_FLAG_ARRAY: number; - GL_VERTEX_ARRAY_SIZE: number; - GL_VERTEX_ARRAY_TYPE: number; - GL_VERTEX_ARRAY_STRIDE: number; - GL_NORMAL_ARRAY_TYPE: number; - GL_NORMAL_ARRAY_STRIDE: number; - GL_COLOR_ARRAY_SIZE: number; - GL_COLOR_ARRAY_TYPE: number; - GL_COLOR_ARRAY_STRIDE: number; - GL_INDEX_ARRAY_TYPE: number; - GL_INDEX_ARRAY_STRIDE: number; - GL_TEXTURE_COORD_ARRAY_SIZE: number; - GL_TEXTURE_COORD_ARRAY_TYPE: number; - GL_TEXTURE_COORD_ARRAY_STRIDE: number; - GL_EDGE_FLAG_ARRAY_STRIDE: number; - GL_VERTEX_ARRAY_POINTER: number; - GL_NORMAL_ARRAY_POINTER: number; - GL_COLOR_ARRAY_POINTER: number; - GL_INDEX_ARRAY_POINTER: number; - GL_TEXTURE_COORD_ARRAY_POINTER: number; - GL_EDGE_FLAG_ARRAY_POINTER: number; - GL_V2F: number; - GL_V3F: number; - GL_C4UB_V2F: number; - GL_C4UB_V3F: number; - GL_C3F_V3F: number; - GL_N3F_V3F: number; - GL_C4F_N3F_V3F: number; - GL_T2F_V3F: number; - GL_T4F_V4F: number; - GL_T2F_C4UB_V3F: number; - GL_T2F_C3F_V3F: number; - GL_T2F_N3F_V3F: number; - GL_T2F_C4F_N3F_V3F: number; - GL_T4F_C4F_N3F_V4F: number; - glEnable(p0: number): void; - glDisable(p0: number): void; - glAccum(p0: number, p1: number): void; - glAlphaFunc(p0: number, p1: number): void; - nglAreTexturesResident(p0: number, p1: number, p2: number): boolean; - glAreTexturesResident(p0: java.nio.IntBuffer, p1: java.nio.ByteBuffer): boolean; - glAreTexturesResident(p0: number, p1: java.nio.ByteBuffer): boolean; - glAreTexturesResident(p0: Array, p1: java.nio.ByteBuffer): boolean; - glArrayElement(p0: number): void; - glBegin(p0: number): void; - glBindTexture(p0: number, p1: number): void; - nglBitmap(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glBitmap(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer | null | undefined): void; - glBitmap(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glBlendFunc(p0: number, p1: number): void; - glCallList(p0: number): void; - nglCallLists(p0: number, p1: number, p2: number): void; - glCallLists(p0: number, p1: java.nio.ByteBuffer): void; - glCallLists(p0: java.nio.ByteBuffer): void; - glCallLists(p0: java.nio.ShortBuffer): void; - glCallLists(p0: java.nio.IntBuffer): void; - glClear(p0: number): void; - glClearAccum(p0: number, p1: number, p2: number, p3: number): void; - glClearColor(p0: number, p1: number, p2: number, p3: number): void; - glClearDepth(p0: number): void; - glClearIndex(p0: number): void; - glClearStencil(p0: number): void; - nglClipPlane(p0: number, p1: number): void; - glClipPlane(p0: number, p1: java.nio.DoubleBuffer): void; - glClipPlane(p0: number, p1: kotlin.DoubleArray): void; - glColor3b(p0: number, p1: number, p2: number): void; - glColor3s(p0: number, p1: number, p2: number): void; - glColor3i(p0: number, p1: number, p2: number): void; - glColor3f(p0: number, p1: number, p2: number): void; - glColor3d(p0: number, p1: number, p2: number): void; - glColor3ub(p0: number, p1: number, p2: number): void; - glColor3us(p0: number, p1: number, p2: number): void; - glColor3ui(p0: number, p1: number, p2: number): void; - nglColor3bv(p0: number): void; - glColor3bv(p0: java.nio.ByteBuffer): void; - nglColor3sv(p0: number): void; - glColor3sv(p0: java.nio.ShortBuffer): void; - glColor3sv(p0: Array): void; - nglColor3iv(p0: number): void; - glColor3iv(p0: java.nio.IntBuffer): void; - glColor3iv(p0: Array): void; - nglColor3fv(p0: number): void; - glColor3fv(p0: java.nio.FloatBuffer): void; - glColor3fv(p0: kotlin.FloatArray): void; - nglColor3dv(p0: number): void; - glColor3dv(p0: java.nio.DoubleBuffer): void; - glColor3dv(p0: kotlin.DoubleArray): void; - nglColor3ubv(p0: number): void; - glColor3ubv(p0: java.nio.ByteBuffer): void; - nglColor3usv(p0: number): void; - glColor3usv(p0: java.nio.ShortBuffer): void; - glColor3usv(p0: Array): void; - nglColor3uiv(p0: number): void; - glColor3uiv(p0: java.nio.IntBuffer): void; - glColor3uiv(p0: Array): void; - glColor4b(p0: number, p1: number, p2: number, p3: number): void; - glColor4s(p0: number, p1: number, p2: number, p3: number): void; - glColor4i(p0: number, p1: number, p2: number, p3: number): void; - glColor4f(p0: number, p1: number, p2: number, p3: number): void; - glColor4d(p0: number, p1: number, p2: number, p3: number): void; - glColor4ub(p0: number, p1: number, p2: number, p3: number): void; - glColor4us(p0: number, p1: number, p2: number, p3: number): void; - glColor4ui(p0: number, p1: number, p2: number, p3: number): void; - nglColor4bv(p0: number): void; - glColor4bv(p0: java.nio.ByteBuffer): void; - nglColor4sv(p0: number): void; - glColor4sv(p0: java.nio.ShortBuffer): void; - glColor4sv(p0: Array): void; - nglColor4iv(p0: number): void; - glColor4iv(p0: java.nio.IntBuffer): void; - glColor4iv(p0: Array): void; - nglColor4fv(p0: number): void; - glColor4fv(p0: java.nio.FloatBuffer): void; - glColor4fv(p0: kotlin.FloatArray): void; - nglColor4dv(p0: number): void; - glColor4dv(p0: java.nio.DoubleBuffer): void; - glColor4dv(p0: kotlin.DoubleArray): void; - nglColor4ubv(p0: number): void; - glColor4ubv(p0: java.nio.ByteBuffer): void; - nglColor4usv(p0: number): void; - glColor4usv(p0: java.nio.ShortBuffer): void; - glColor4usv(p0: Array): void; - nglColor4uiv(p0: number): void; - glColor4uiv(p0: java.nio.IntBuffer): void; - glColor4uiv(p0: Array): void; - glColorMask(p0: boolean, p1: boolean, p2: boolean, p3: boolean): void; - glColorMaterial(p0: number, p1: number): void; - nglColorPointer(p0: number, p1: number, p2: number, p3: number): void; - glColorPointer(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - glColorPointer(p0: number, p1: number, p2: number, p3: number): void; - glColorPointer(p0: number, p1: number, p2: number, p3: java.nio.ShortBuffer): void; - glColorPointer(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glColorPointer(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glCopyPixels(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glCullFace(p0: number): void; - glDeleteLists(p0: number, p1: number): void; - glDepthFunc(p0: number): void; - glDepthMask(p0: boolean): void; - glDepthRange(p0: number, p1: number): void; - glDisableClientState(p0: number): void; - glDrawArrays(p0: number, p1: number, p2: number): void; - glDrawBuffer(p0: number): void; - nglDrawElements(p0: number, p1: number, p2: number, p3: number): void; - glDrawElements(p0: number, p1: number, p2: number, p3: number): void; - glDrawElements(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glDrawElements(p0: number, p1: java.nio.ByteBuffer): void; - glDrawElements(p0: number, p1: java.nio.ShortBuffer): void; - glDrawElements(p0: number, p1: java.nio.IntBuffer): void; - nglDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: java.nio.FloatBuffer): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glDrawPixels(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): void; - glEdgeFlag(p0: boolean): void; - nglEdgeFlagv(p0: number): void; - glEdgeFlagv(p0: java.nio.ByteBuffer): void; - nglEdgeFlagPointer(p0: number, p1: number): void; - glEdgeFlagPointer(p0: number, p1: java.nio.ByteBuffer): void; - glEdgeFlagPointer(p0: number, p1: number): void; - glEnableClientState(p0: number): void; - glEnd(): void; - glEvalCoord1f(p0: number): void; - nglEvalCoord1fv(p0: number): void; - glEvalCoord1fv(p0: java.nio.FloatBuffer): void; - glEvalCoord1fv(p0: kotlin.FloatArray): void; - glEvalCoord1d(p0: number): void; - nglEvalCoord1dv(p0: number): void; - glEvalCoord1dv(p0: java.nio.DoubleBuffer): void; - glEvalCoord1dv(p0: kotlin.DoubleArray): void; - glEvalCoord2f(p0: number, p1: number): void; - nglEvalCoord2fv(p0: number): void; - glEvalCoord2fv(p0: java.nio.FloatBuffer): void; - glEvalCoord2fv(p0: kotlin.FloatArray): void; - glEvalCoord2d(p0: number, p1: number): void; - nglEvalCoord2dv(p0: number): void; - glEvalCoord2dv(p0: java.nio.DoubleBuffer): void; - glEvalCoord2dv(p0: kotlin.DoubleArray): void; - glEvalMesh1(p0: number, p1: number, p2: number): void; - glEvalMesh2(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glEvalPoint1(p0: number): void; - glEvalPoint2(p0: number, p1: number): void; - nglFeedbackBuffer(p0: number, p1: number, p2: number): void; - glFeedbackBuffer(p0: number, p1: java.nio.FloatBuffer): void; - glFeedbackBuffer(p0: number, p1: kotlin.FloatArray): void; - glFinish(): void; - glFlush(): void; - glFogi(p0: number, p1: number): void; - nglFogiv(p0: number, p1: number): void; - glFogiv(p0: number, p1: java.nio.IntBuffer): void; - glFogiv(p0: number, p1: Array): void; - glFogf(p0: number, p1: number): void; - nglFogfv(p0: number, p1: number): void; - glFogfv(p0: number, p1: java.nio.FloatBuffer): void; - glFogfv(p0: number, p1: kotlin.FloatArray): void; - glFrontFace(p0: number): void; - glGenLists(p0: number): number; - nglGenTextures(p0: number, p1: number): void; - glGenTextures(p0: java.nio.IntBuffer): void; - glGenTextures(): number; - glGenTextures(p0: Array): void; - nglDeleteTextures(p0: number, p1: number): void; - glDeleteTextures(p0: java.nio.IntBuffer): void; - glDeleteTextures(p0: number): void; - glDeleteTextures(p0: Array): void; - nglGetClipPlane(p0: number, p1: number): void; - glGetClipPlane(p0: number, p1: java.nio.DoubleBuffer): void; - glGetClipPlane(p0: number, p1: kotlin.DoubleArray): void; - nglGetBooleanv(p0: number, p1: number): void; - glGetBooleanv(p0: number, p1: java.nio.ByteBuffer): void; - glGetBoolean(p0: number): boolean; - nglGetFloatv(p0: number, p1: number): void; - glGetFloatv(p0: number, p1: java.nio.FloatBuffer): void; - glGetFloatv(p0: number, p1: kotlin.FloatArray): void; - glGetFloat(p0: number): number; - nglGetIntegerv(p0: number, p1: number): void; - glGetIntegerv(p0: number, p1: java.nio.IntBuffer): void; - glGetIntegerv(p0: number, p1: Array): void; - glGetInteger(p0: number): number; - nglGetDoublev(p0: number, p1: number): void; - glGetDoublev(p0: number, p1: java.nio.DoubleBuffer): void; - glGetDoublev(p0: number, p1: kotlin.DoubleArray): void; - glGetDouble(p0: number): number; - glGetError(): number; - nglGetLightiv(p0: number, p1: number, p2: number): void; - glGetLightiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetLightiv(p0: number, p1: number, p2: Array): void; - glGetLighti(p0: number, p1: number): number; - nglGetLightfv(p0: number, p1: number, p2: number): void; - glGetLightfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetLightfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetLightf(p0: number, p1: number): number; - nglGetMapiv(p0: number, p1: number, p2: number): void; - glGetMapiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetMapiv(p0: number, p1: number, p2: Array): void; - glGetMapi(p0: number, p1: number): number; - nglGetMapfv(p0: number, p1: number, p2: number): void; - glGetMapfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetMapfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetMapf(p0: number, p1: number): number; - nglGetMapdv(p0: number, p1: number, p2: number): void; - glGetMapdv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetMapdv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glGetMapd(p0: number, p1: number): number; - nglGetMaterialiv(p0: number, p1: number, p2: number): void; - glGetMaterialiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetMaterialiv(p0: number, p1: number, p2: Array): void; - nglGetMaterialfv(p0: number, p1: number, p2: number): void; - glGetMaterialfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetMaterialfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglGetPixelMapfv(p0: number, p1: number): void; - glGetPixelMapfv(p0: number, p1: java.nio.FloatBuffer): void; - glGetPixelMapfv(p0: number, p1: number): void; - glGetPixelMapfv(p0: number, p1: kotlin.FloatArray): void; - nglGetPixelMapusv(p0: number, p1: number): void; - glGetPixelMapusv(p0: number, p1: java.nio.ShortBuffer): void; - glGetPixelMapusv(p0: number, p1: number): void; - glGetPixelMapusv(p0: number, p1: Array): void; - nglGetPixelMapuiv(p0: number, p1: number): void; - glGetPixelMapuiv(p0: number, p1: java.nio.IntBuffer): void; - glGetPixelMapuiv(p0: number, p1: number): void; - glGetPixelMapuiv(p0: number, p1: Array): void; - nglGetPointerv(p0: number, p1: number): void; - glGetPointerv(p0: number, p1: org.lwjgl.PointerBuffer): void; - glGetPointer(p0: number): number; - nglGetPolygonStipple(p0: number): void; - glGetPolygonStipple(p0: java.nio.ByteBuffer): void; - glGetPolygonStipple(p0: number): void; - nglGetString(p0: number): number; - glGetString(p0: number): string | null | undefined; - nglGetTexEnviv(p0: number, p1: number, p2: number): void; - glGetTexEnviv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTexEnviv(p0: number, p1: number, p2: Array): void; - glGetTexEnvi(p0: number, p1: number): number; - nglGetTexEnvfv(p0: number, p1: number, p2: number): void; - glGetTexEnvfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetTexEnvfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetTexEnvf(p0: number, p1: number): number; - nglGetTexGeniv(p0: number, p1: number, p2: number): void; - glGetTexGeniv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTexGeniv(p0: number, p1: number, p2: Array): void; - glGetTexGeni(p0: number, p1: number): number; - nglGetTexGenfv(p0: number, p1: number, p2: number): void; - glGetTexGenfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetTexGenfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetTexGenf(p0: number, p1: number): number; - nglGetTexGendv(p0: number, p1: number, p2: number): void; - glGetTexGendv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetTexGendv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glGetTexGend(p0: number, p1: number): number; - nglGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.FloatBuffer): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.DoubleBuffer): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): void; - glGetTexImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.DoubleArray): void; - nglGetTexLevelParameteriv(p0: number, p1: number, p2: number, p3: number): void; - glGetTexLevelParameteriv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetTexLevelParameteriv(p0: number, p1: number, p2: number, p3: Array): void; - glGetTexLevelParameteri(p0: number, p1: number, p2: number): number; - nglGetTexLevelParameterfv(p0: number, p1: number, p2: number, p3: number): void; - glGetTexLevelParameterfv(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glGetTexLevelParameterfv(p0: number, p1: number, p2: number, p3: kotlin.FloatArray): void; - glGetTexLevelParameterf(p0: number, p1: number, p2: number): number; - nglGetTexParameteriv(p0: number, p1: number, p2: number): void; - glGetTexParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTexParameteriv(p0: number, p1: number, p2: Array): void; - glGetTexParameteri(p0: number, p1: number): number; - nglGetTexParameterfv(p0: number, p1: number, p2: number): void; - glGetTexParameterfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetTexParameterfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetTexParameterf(p0: number, p1: number): number; - glHint(p0: number, p1: number): void; - glIndexi(p0: number): void; - glIndexub(p0: number): void; - glIndexs(p0: number): void; - glIndexf(p0: number): void; - glIndexd(p0: number): void; - nglIndexiv(p0: number): void; - glIndexiv(p0: java.nio.IntBuffer): void; - glIndexiv(p0: Array): void; - nglIndexubv(p0: number): void; - glIndexubv(p0: java.nio.ByteBuffer): void; - nglIndexsv(p0: number): void; - glIndexsv(p0: java.nio.ShortBuffer): void; - glIndexsv(p0: Array): void; - nglIndexfv(p0: number): void; - glIndexfv(p0: java.nio.FloatBuffer): void; - glIndexfv(p0: kotlin.FloatArray): void; - nglIndexdv(p0: number): void; - glIndexdv(p0: java.nio.DoubleBuffer): void; - glIndexdv(p0: kotlin.DoubleArray): void; - glIndexMask(p0: number): void; - nglIndexPointer(p0: number, p1: number, p2: number): void; - glIndexPointer(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glIndexPointer(p0: number, p1: number, p2: number): void; - glIndexPointer(p0: number, p1: java.nio.ByteBuffer): void; - glIndexPointer(p0: number, p1: java.nio.ShortBuffer): void; - glIndexPointer(p0: number, p1: java.nio.IntBuffer): void; - glInitNames(): void; - nglInterleavedArrays(p0: number, p1: number, p2: number): void; - glInterleavedArrays(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glInterleavedArrays(p0: number, p1: number, p2: number): void; - glInterleavedArrays(p0: number, p1: number, p2: java.nio.ShortBuffer): void; - glInterleavedArrays(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glInterleavedArrays(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glInterleavedArrays(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glInterleavedArrays(p0: number, p1: number, p2: Array): void; - glInterleavedArrays(p0: number, p1: number, p2: Array): void; - glInterleavedArrays(p0: number, p1: number, p2: kotlin.FloatArray): void; - glInterleavedArrays(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glIsEnabled(p0: number): boolean; - glIsList(p0: number): boolean; - glIsTexture(p0: number): boolean; - glLightModeli(p0: number, p1: number): void; - glLightModelf(p0: number, p1: number): void; - nglLightModeliv(p0: number, p1: number): void; - glLightModeliv(p0: number, p1: java.nio.IntBuffer): void; - glLightModeliv(p0: number, p1: Array): void; - nglLightModelfv(p0: number, p1: number): void; - glLightModelfv(p0: number, p1: java.nio.FloatBuffer): void; - glLightModelfv(p0: number, p1: kotlin.FloatArray): void; - glLighti(p0: number, p1: number, p2: number): void; - glLightf(p0: number, p1: number, p2: number): void; - nglLightiv(p0: number, p1: number, p2: number): void; - glLightiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glLightiv(p0: number, p1: number, p2: Array): void; - nglLightfv(p0: number, p1: number, p2: number): void; - glLightfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glLightfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glLineStipple(p0: number, p1: number): void; - glLineWidth(p0: number): void; - glListBase(p0: number): void; - nglLoadMatrixf(p0: number): void; - glLoadMatrixf(p0: java.nio.FloatBuffer): void; - glLoadMatrixf(p0: kotlin.FloatArray): void; - nglLoadMatrixd(p0: number): void; - glLoadMatrixd(p0: java.nio.DoubleBuffer): void; - glLoadMatrixd(p0: kotlin.DoubleArray): void; - glLoadIdentity(): void; - glLoadName(p0: number): void; - glLogicOp(p0: number): void; - nglMap1f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glMap1f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: java.nio.FloatBuffer): void; - glMap1f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: kotlin.FloatArray): void; - nglMap1d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glMap1d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: java.nio.DoubleBuffer): void; - glMap1d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: kotlin.DoubleArray): void; - nglMap2f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): void; - glMap2f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.FloatBuffer): void; - glMap2f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: kotlin.FloatArray): void; - nglMap2d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): void; - glMap2d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.DoubleBuffer): void; - glMap2d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: kotlin.DoubleArray): void; - glMapGrid1f(p0: number, p1: number, p2: number): void; - glMapGrid1d(p0: number, p1: number, p2: number): void; - glMapGrid2f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glMapGrid2d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glMateriali(p0: number, p1: number, p2: number): void; - glMaterialf(p0: number, p1: number, p2: number): void; - nglMaterialiv(p0: number, p1: number, p2: number): void; - glMaterialiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glMaterialiv(p0: number, p1: number, p2: Array): void; - nglMaterialfv(p0: number, p1: number, p2: number): void; - glMaterialfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glMaterialfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glMatrixMode(p0: number): void; - nglMultMatrixf(p0: number): void; - glMultMatrixf(p0: java.nio.FloatBuffer): void; - glMultMatrixf(p0: kotlin.FloatArray): void; - nglMultMatrixd(p0: number): void; - glMultMatrixd(p0: java.nio.DoubleBuffer): void; - glMultMatrixd(p0: kotlin.DoubleArray): void; - glFrustum(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glNewList(p0: number, p1: number): void; - glEndList(): void; - glNormal3f(p0: number, p1: number, p2: number): void; - glNormal3b(p0: number, p1: number, p2: number): void; - glNormal3s(p0: number, p1: number, p2: number): void; - glNormal3i(p0: number, p1: number, p2: number): void; - glNormal3d(p0: number, p1: number, p2: number): void; - nglNormal3fv(p0: number): void; - glNormal3fv(p0: java.nio.FloatBuffer): void; - glNormal3fv(p0: kotlin.FloatArray): void; - nglNormal3bv(p0: number): void; - glNormal3bv(p0: java.nio.ByteBuffer): void; - nglNormal3sv(p0: number): void; - glNormal3sv(p0: java.nio.ShortBuffer): void; - glNormal3sv(p0: Array): void; - nglNormal3iv(p0: number): void; - glNormal3iv(p0: java.nio.IntBuffer): void; - glNormal3iv(p0: Array): void; - nglNormal3dv(p0: number): void; - glNormal3dv(p0: java.nio.DoubleBuffer): void; - glNormal3dv(p0: kotlin.DoubleArray): void; - nglNormalPointer(p0: number, p1: number, p2: number): void; - glNormalPointer(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glNormalPointer(p0: number, p1: number, p2: number): void; - glNormalPointer(p0: number, p1: number, p2: java.nio.ShortBuffer): void; - glNormalPointer(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glNormalPointer(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glOrtho(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glPassThrough(p0: number): void; - nglPixelMapfv(p0: number, p1: number, p2: number): void; - glPixelMapfv(p0: number, p1: number, p2: number): void; - glPixelMapfv(p0: number, p1: java.nio.FloatBuffer): void; - glPixelMapfv(p0: number, p1: kotlin.FloatArray): void; - nglPixelMapusv(p0: number, p1: number, p2: number): void; - glPixelMapusv(p0: number, p1: number, p2: number): void; - glPixelMapusv(p0: number, p1: java.nio.ShortBuffer): void; - glPixelMapusv(p0: number, p1: Array): void; - nglPixelMapuiv(p0: number, p1: number, p2: number): void; - glPixelMapuiv(p0: number, p1: number, p2: number): void; - glPixelMapuiv(p0: number, p1: java.nio.IntBuffer): void; - glPixelMapuiv(p0: number, p1: Array): void; - glPixelStorei(p0: number, p1: number): void; - glPixelStoref(p0: number, p1: number): void; - glPixelTransferi(p0: number, p1: number): void; - glPixelTransferf(p0: number, p1: number): void; - glPixelZoom(p0: number, p1: number): void; - glPointSize(p0: number): void; - glPolygonMode(p0: number, p1: number): void; - glPolygonOffset(p0: number, p1: number): void; - nglPolygonStipple(p0: number): void; - glPolygonStipple(p0: java.nio.ByteBuffer): void; - glPolygonStipple(p0: number): void; - glPushAttrib(p0: number): void; - glPushClientAttrib(p0: number): void; - glPopAttrib(): void; - glPopClientAttrib(): void; - glPopMatrix(): void; - glPopName(): void; - nglPrioritizeTextures(p0: number, p1: number, p2: number): void; - glPrioritizeTextures(p0: java.nio.IntBuffer, p1: java.nio.FloatBuffer): void; - glPrioritizeTextures(p0: Array, p1: kotlin.FloatArray): void; - glPushMatrix(): void; - glPushName(p0: number): void; - glRasterPos2i(p0: number, p1: number): void; - glRasterPos2s(p0: number, p1: number): void; - glRasterPos2f(p0: number, p1: number): void; - glRasterPos2d(p0: number, p1: number): void; - nglRasterPos2iv(p0: number): void; - glRasterPos2iv(p0: java.nio.IntBuffer): void; - glRasterPos2iv(p0: Array): void; - nglRasterPos2sv(p0: number): void; - glRasterPos2sv(p0: java.nio.ShortBuffer): void; - glRasterPos2sv(p0: Array): void; - nglRasterPos2fv(p0: number): void; - glRasterPos2fv(p0: java.nio.FloatBuffer): void; - glRasterPos2fv(p0: kotlin.FloatArray): void; - nglRasterPos2dv(p0: number): void; - glRasterPos2dv(p0: java.nio.DoubleBuffer): void; - glRasterPos2dv(p0: kotlin.DoubleArray): void; - glRasterPos3i(p0: number, p1: number, p2: number): void; - glRasterPos3s(p0: number, p1: number, p2: number): void; - glRasterPos3f(p0: number, p1: number, p2: number): void; - glRasterPos3d(p0: number, p1: number, p2: number): void; - nglRasterPos3iv(p0: number): void; - glRasterPos3iv(p0: java.nio.IntBuffer): void; - glRasterPos3iv(p0: Array): void; - nglRasterPos3sv(p0: number): void; - glRasterPos3sv(p0: java.nio.ShortBuffer): void; - glRasterPos3sv(p0: Array): void; - nglRasterPos3fv(p0: number): void; - glRasterPos3fv(p0: java.nio.FloatBuffer): void; - glRasterPos3fv(p0: kotlin.FloatArray): void; - nglRasterPos3dv(p0: number): void; - glRasterPos3dv(p0: java.nio.DoubleBuffer): void; - glRasterPos3dv(p0: kotlin.DoubleArray): void; - glRasterPos4i(p0: number, p1: number, p2: number, p3: number): void; - glRasterPos4s(p0: number, p1: number, p2: number, p3: number): void; - glRasterPos4f(p0: number, p1: number, p2: number, p3: number): void; - glRasterPos4d(p0: number, p1: number, p2: number, p3: number): void; - nglRasterPos4iv(p0: number): void; - glRasterPos4iv(p0: java.nio.IntBuffer): void; - glRasterPos4iv(p0: Array): void; - nglRasterPos4sv(p0: number): void; - glRasterPos4sv(p0: java.nio.ShortBuffer): void; - glRasterPos4sv(p0: Array): void; - nglRasterPos4fv(p0: number): void; - glRasterPos4fv(p0: java.nio.FloatBuffer): void; - glRasterPos4fv(p0: kotlin.FloatArray): void; - nglRasterPos4dv(p0: number): void; - glRasterPos4dv(p0: java.nio.DoubleBuffer): void; - glRasterPos4dv(p0: kotlin.DoubleArray): void; - glReadBuffer(p0: number): void; - nglReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ShortBuffer): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.IntBuffer): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.FloatBuffer): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.FloatArray): void; - glRecti(p0: number, p1: number, p2: number, p3: number): void; - glRects(p0: number, p1: number, p2: number, p3: number): void; - glRectf(p0: number, p1: number, p2: number, p3: number): void; - glRectd(p0: number, p1: number, p2: number, p3: number): void; - nglRectiv(p0: number, p1: number): void; - glRectiv(p0: java.nio.IntBuffer, p1: java.nio.IntBuffer): void; - glRectiv(p0: Array, p1: Array): void; - nglRectsv(p0: number, p1: number): void; - glRectsv(p0: java.nio.ShortBuffer, p1: java.nio.ShortBuffer): void; - glRectsv(p0: Array, p1: Array): void; - nglRectfv(p0: number, p1: number): void; - glRectfv(p0: java.nio.FloatBuffer, p1: java.nio.FloatBuffer): void; - glRectfv(p0: kotlin.FloatArray, p1: kotlin.FloatArray): void; - nglRectdv(p0: number, p1: number): void; - glRectdv(p0: java.nio.DoubleBuffer, p1: java.nio.DoubleBuffer): void; - glRectdv(p0: kotlin.DoubleArray, p1: kotlin.DoubleArray): void; - glRenderMode(p0: number): number; - glRotatef(p0: number, p1: number, p2: number, p3: number): void; - glRotated(p0: number, p1: number, p2: number, p3: number): void; - glScalef(p0: number, p1: number, p2: number): void; - glScaled(p0: number, p1: number, p2: number): void; - glScissor(p0: number, p1: number, p2: number, p3: number): void; - nglSelectBuffer(p0: number, p1: number): void; - glSelectBuffer(p0: java.nio.IntBuffer): void; - glSelectBuffer(p0: Array): void; - glShadeModel(p0: number): void; - glStencilFunc(p0: number, p1: number, p2: number): void; - glStencilMask(p0: number): void; - glStencilOp(p0: number, p1: number, p2: number): void; - glTexCoord1f(p0: number): void; - glTexCoord1s(p0: number): void; - glTexCoord1i(p0: number): void; - glTexCoord1d(p0: number): void; - nglTexCoord1fv(p0: number): void; - glTexCoord1fv(p0: java.nio.FloatBuffer): void; - glTexCoord1fv(p0: kotlin.FloatArray): void; - nglTexCoord1sv(p0: number): void; - glTexCoord1sv(p0: java.nio.ShortBuffer): void; - glTexCoord1sv(p0: Array): void; - nglTexCoord1iv(p0: number): void; - glTexCoord1iv(p0: java.nio.IntBuffer): void; - glTexCoord1iv(p0: Array): void; - nglTexCoord1dv(p0: number): void; - glTexCoord1dv(p0: java.nio.DoubleBuffer): void; - glTexCoord1dv(p0: kotlin.DoubleArray): void; - glTexCoord2f(p0: number, p1: number): void; - glTexCoord2s(p0: number, p1: number): void; - glTexCoord2i(p0: number, p1: number): void; - glTexCoord2d(p0: number, p1: number): void; - nglTexCoord2fv(p0: number): void; - glTexCoord2fv(p0: java.nio.FloatBuffer): void; - glTexCoord2fv(p0: kotlin.FloatArray): void; - nglTexCoord2sv(p0: number): void; - glTexCoord2sv(p0: java.nio.ShortBuffer): void; - glTexCoord2sv(p0: Array): void; - nglTexCoord2iv(p0: number): void; - glTexCoord2iv(p0: java.nio.IntBuffer): void; - glTexCoord2iv(p0: Array): void; - nglTexCoord2dv(p0: number): void; - glTexCoord2dv(p0: java.nio.DoubleBuffer): void; - glTexCoord2dv(p0: kotlin.DoubleArray): void; - glTexCoord3f(p0: number, p1: number, p2: number): void; - glTexCoord3s(p0: number, p1: number, p2: number): void; - glTexCoord3i(p0: number, p1: number, p2: number): void; - glTexCoord3d(p0: number, p1: number, p2: number): void; - nglTexCoord3fv(p0: number): void; - glTexCoord3fv(p0: java.nio.FloatBuffer): void; - glTexCoord3fv(p0: kotlin.FloatArray): void; - nglTexCoord3sv(p0: number): void; - glTexCoord3sv(p0: java.nio.ShortBuffer): void; - glTexCoord3sv(p0: Array): void; - nglTexCoord3iv(p0: number): void; - glTexCoord3iv(p0: java.nio.IntBuffer): void; - glTexCoord3iv(p0: Array): void; - nglTexCoord3dv(p0: number): void; - glTexCoord3dv(p0: java.nio.DoubleBuffer): void; - glTexCoord3dv(p0: kotlin.DoubleArray): void; - glTexCoord4f(p0: number, p1: number, p2: number, p3: number): void; - glTexCoord4s(p0: number, p1: number, p2: number, p3: number): void; - glTexCoord4i(p0: number, p1: number, p2: number, p3: number): void; - glTexCoord4d(p0: number, p1: number, p2: number, p3: number): void; - nglTexCoord4fv(p0: number): void; - glTexCoord4fv(p0: java.nio.FloatBuffer): void; - glTexCoord4fv(p0: kotlin.FloatArray): void; - nglTexCoord4sv(p0: number): void; - glTexCoord4sv(p0: java.nio.ShortBuffer): void; - glTexCoord4sv(p0: Array): void; - nglTexCoord4iv(p0: number): void; - glTexCoord4iv(p0: java.nio.IntBuffer): void; - glTexCoord4iv(p0: Array): void; - nglTexCoord4dv(p0: number): void; - glTexCoord4dv(p0: java.nio.DoubleBuffer): void; - glTexCoord4dv(p0: kotlin.DoubleArray): void; - nglTexCoordPointer(p0: number, p1: number, p2: number, p3: number): void; - glTexCoordPointer(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - glTexCoordPointer(p0: number, p1: number, p2: number, p3: number): void; - glTexCoordPointer(p0: number, p1: number, p2: number, p3: java.nio.ShortBuffer): void; - glTexCoordPointer(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glTexCoordPointer(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glTexEnvi(p0: number, p1: number, p2: number): void; - nglTexEnviv(p0: number, p1: number, p2: number): void; - glTexEnviv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTexEnviv(p0: number, p1: number, p2: Array): void; - glTexEnvf(p0: number, p1: number, p2: number): void; - nglTexEnvfv(p0: number, p1: number, p2: number): void; - glTexEnvfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glTexEnvfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glTexGeni(p0: number, p1: number, p2: number): void; - nglTexGeniv(p0: number, p1: number, p2: number): void; - glTexGeniv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTexGeniv(p0: number, p1: number, p2: Array): void; - glTexGenf(p0: number, p1: number, p2: number): void; - nglTexGenfv(p0: number, p1: number, p2: number): void; - glTexGenfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glTexGenfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glTexGend(p0: number, p1: number, p2: number): void; - nglTexGendv(p0: number, p1: number, p2: number): void; - glTexGendv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glTexGendv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.ByteBuffer | null | undefined): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.ShortBuffer | null | undefined): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.IntBuffer | null | undefined): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.FloatBuffer | null | undefined): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.DoubleBuffer | null | undefined): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: Array): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: Array): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: kotlin.FloatArray | null | undefined): void; - glTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: kotlin.DoubleArray | null | undefined): void; - nglTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ByteBuffer | null | undefined): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ShortBuffer | null | undefined): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.IntBuffer | null | undefined): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.FloatBuffer | null | undefined): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.DoubleBuffer | null | undefined): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.FloatArray | null | undefined): void; - glTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.DoubleArray | null | undefined): void; - glCopyTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glCopyTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glCopyTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glCopyTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glTexParameteri(p0: number, p1: number, p2: number): void; - nglTexParameteriv(p0: number, p1: number, p2: number): void; - glTexParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTexParameteriv(p0: number, p1: number, p2: Array): void; - glTexParameterf(p0: number, p1: number, p2: number): void; - nglTexParameterfv(p0: number, p1: number, p2: number): void; - glTexParameterfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glTexParameterfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ShortBuffer): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.IntBuffer): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.FloatBuffer): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.DoubleBuffer): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.FloatArray): void; - glTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.DoubleArray): void; - nglTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ByteBuffer): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ShortBuffer): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.IntBuffer): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.FloatBuffer): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.DoubleBuffer): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.FloatArray): void; - glTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.DoubleArray): void; - glTranslatef(p0: number, p1: number, p2: number): void; - glTranslated(p0: number, p1: number, p2: number): void; - glVertex2f(p0: number, p1: number): void; - glVertex2s(p0: number, p1: number): void; - glVertex2i(p0: number, p1: number): void; - glVertex2d(p0: number, p1: number): void; - nglVertex2fv(p0: number): void; - glVertex2fv(p0: java.nio.FloatBuffer): void; - glVertex2fv(p0: kotlin.FloatArray): void; - nglVertex2sv(p0: number): void; - glVertex2sv(p0: java.nio.ShortBuffer): void; - glVertex2sv(p0: Array): void; - nglVertex2iv(p0: number): void; - glVertex2iv(p0: java.nio.IntBuffer): void; - glVertex2iv(p0: Array): void; - nglVertex2dv(p0: number): void; - glVertex2dv(p0: java.nio.DoubleBuffer): void; - glVertex2dv(p0: kotlin.DoubleArray): void; - glVertex3f(p0: number, p1: number, p2: number): void; - glVertex3s(p0: number, p1: number, p2: number): void; - glVertex3i(p0: number, p1: number, p2: number): void; - glVertex3d(p0: number, p1: number, p2: number): void; - nglVertex3fv(p0: number): void; - glVertex3fv(p0: java.nio.FloatBuffer): void; - glVertex3fv(p0: kotlin.FloatArray): void; - nglVertex3sv(p0: number): void; - glVertex3sv(p0: java.nio.ShortBuffer): void; - glVertex3sv(p0: Array): void; - nglVertex3iv(p0: number): void; - glVertex3iv(p0: java.nio.IntBuffer): void; - glVertex3iv(p0: Array): void; - nglVertex3dv(p0: number): void; - glVertex3dv(p0: java.nio.DoubleBuffer): void; - glVertex3dv(p0: kotlin.DoubleArray): void; - glVertex4f(p0: number, p1: number, p2: number, p3: number): void; - glVertex4s(p0: number, p1: number, p2: number, p3: number): void; - glVertex4i(p0: number, p1: number, p2: number, p3: number): void; - glVertex4d(p0: number, p1: number, p2: number, p3: number): void; - nglVertex4fv(p0: number): void; - glVertex4fv(p0: java.nio.FloatBuffer): void; - glVertex4fv(p0: kotlin.FloatArray): void; - nglVertex4sv(p0: number): void; - glVertex4sv(p0: java.nio.ShortBuffer): void; - glVertex4sv(p0: Array): void; - nglVertex4iv(p0: number): void; - glVertex4iv(p0: java.nio.IntBuffer): void; - glVertex4iv(p0: Array): void; - nglVertex4dv(p0: number): void; - glVertex4dv(p0: java.nio.DoubleBuffer): void; - glVertex4dv(p0: kotlin.DoubleArray): void; - nglVertexPointer(p0: number, p1: number, p2: number, p3: number): void; - glVertexPointer(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - glVertexPointer(p0: number, p1: number, p2: number, p3: number): void; - glVertexPointer(p0: number, p1: number, p2: number, p3: java.nio.ShortBuffer): void; - glVertexPointer(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glVertexPointer(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glViewport(p0: number, p1: number, p2: number, p3: number): void; - } - interface GL11 { - } - const GL12: { - GL_ALIASED_POINT_SIZE_RANGE: number; - GL_ALIASED_LINE_WIDTH_RANGE: number; - GL_SMOOTH_POINT_SIZE_RANGE: number; - GL_SMOOTH_POINT_SIZE_GRANULARITY: number; - GL_SMOOTH_LINE_WIDTH_RANGE: number; - GL_SMOOTH_LINE_WIDTH_GRANULARITY: number; - GL_TEXTURE_BINDING_3D: number; - GL_PACK_SKIP_IMAGES: number; - GL_PACK_IMAGE_HEIGHT: number; - GL_UNPACK_SKIP_IMAGES: number; - GL_UNPACK_IMAGE_HEIGHT: number; - GL_TEXTURE_3D: number; - GL_PROXY_TEXTURE_3D: number; - GL_TEXTURE_DEPTH: number; - GL_TEXTURE_WRAP_R: number; - GL_MAX_3D_TEXTURE_SIZE: number; - GL_BGR: number; - GL_BGRA: number; - GL_UNSIGNED_BYTE_3_3_2: number; - GL_UNSIGNED_BYTE_2_3_3_REV: number; - GL_UNSIGNED_SHORT_5_6_5: number; - GL_UNSIGNED_SHORT_5_6_5_REV: number; - GL_UNSIGNED_SHORT_4_4_4_4: number; - GL_UNSIGNED_SHORT_4_4_4_4_REV: number; - GL_UNSIGNED_SHORT_5_5_5_1: number; - GL_UNSIGNED_SHORT_1_5_5_5_REV: number; - GL_UNSIGNED_INT_8_8_8_8: number; - GL_UNSIGNED_INT_8_8_8_8_REV: number; - GL_UNSIGNED_INT_10_10_10_2: number; - GL_UNSIGNED_INT_2_10_10_10_REV: number; - GL_RESCALE_NORMAL: number; - GL_LIGHT_MODEL_COLOR_CONTROL: number; - GL_SINGLE_COLOR: number; - GL_SEPARATE_SPECULAR_COLOR: number; - GL_CLAMP_TO_EDGE: number; - GL_TEXTURE_MIN_LOD: number; - GL_TEXTURE_MAX_LOD: number; - GL_TEXTURE_BASE_LEVEL: number; - GL_TEXTURE_MAX_LEVEL: number; - GL_MAX_ELEMENTS_VERTICES: number; - GL_MAX_ELEMENTS_INDICES: number; - nglTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.ByteBuffer | null | undefined): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.ShortBuffer | null | undefined): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.IntBuffer | null | undefined): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.FloatBuffer | null | undefined): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.DoubleBuffer | null | undefined): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: Array): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: Array): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: kotlin.FloatArray | null | undefined): void; - glTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: kotlin.DoubleArray | null | undefined): void; - nglTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ByteBuffer): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ShortBuffer): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.IntBuffer): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.FloatBuffer): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.DoubleBuffer): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.FloatArray): void; - glTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.DoubleArray): void; - glCopyTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - nglDrawRangeElements(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDrawRangeElements(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDrawRangeElements(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glDrawRangeElements(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - glDrawRangeElements(p0: number, p1: number, p2: number, p3: java.nio.ShortBuffer): void; - glDrawRangeElements(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - } - interface GL12 extends org.lwjgl.opengl.GL11 { - } - const GL13: { - GL_COMPRESSED_ALPHA: number; - GL_COMPRESSED_LUMINANCE: number; - GL_COMPRESSED_LUMINANCE_ALPHA: number; - GL_COMPRESSED_INTENSITY: number; - GL_COMPRESSED_RGB: number; - GL_COMPRESSED_RGBA: number; - GL_TEXTURE_COMPRESSION_HINT: number; - GL_TEXTURE_COMPRESSED_IMAGE_SIZE: number; - GL_TEXTURE_COMPRESSED: number; - GL_NUM_COMPRESSED_TEXTURE_FORMATS: number; - GL_COMPRESSED_TEXTURE_FORMATS: number; - GL_NORMAL_MAP: number; - GL_REFLECTION_MAP: number; - GL_TEXTURE_CUBE_MAP: number; - GL_TEXTURE_BINDING_CUBE_MAP: number; - GL_TEXTURE_CUBE_MAP_POSITIVE_X: number; - GL_TEXTURE_CUBE_MAP_NEGATIVE_X: number; - GL_TEXTURE_CUBE_MAP_POSITIVE_Y: number; - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: number; - GL_TEXTURE_CUBE_MAP_POSITIVE_Z: number; - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: number; - GL_PROXY_TEXTURE_CUBE_MAP: number; - GL_MAX_CUBE_MAP_TEXTURE_SIZE: number; - GL_MULTISAMPLE: number; - GL_SAMPLE_ALPHA_TO_COVERAGE: number; - GL_SAMPLE_ALPHA_TO_ONE: number; - GL_SAMPLE_COVERAGE: number; - GL_MULTISAMPLE_BIT: number; - GL_SAMPLE_BUFFERS: number; - GL_SAMPLES: number; - GL_SAMPLE_COVERAGE_VALUE: number; - GL_SAMPLE_COVERAGE_INVERT: number; - GL_TEXTURE0: number; - GL_TEXTURE1: number; - GL_TEXTURE2: number; - GL_TEXTURE3: number; - GL_TEXTURE4: number; - GL_TEXTURE5: number; - GL_TEXTURE6: number; - GL_TEXTURE7: number; - GL_TEXTURE8: number; - GL_TEXTURE9: number; - GL_TEXTURE10: number; - GL_TEXTURE11: number; - GL_TEXTURE12: number; - GL_TEXTURE13: number; - GL_TEXTURE14: number; - GL_TEXTURE15: number; - GL_TEXTURE16: number; - GL_TEXTURE17: number; - GL_TEXTURE18: number; - GL_TEXTURE19: number; - GL_TEXTURE20: number; - GL_TEXTURE21: number; - GL_TEXTURE22: number; - GL_TEXTURE23: number; - GL_TEXTURE24: number; - GL_TEXTURE25: number; - GL_TEXTURE26: number; - GL_TEXTURE27: number; - GL_TEXTURE28: number; - GL_TEXTURE29: number; - GL_TEXTURE30: number; - GL_TEXTURE31: number; - GL_ACTIVE_TEXTURE: number; - GL_CLIENT_ACTIVE_TEXTURE: number; - GL_MAX_TEXTURE_UNITS: number; - GL_COMBINE: number; - GL_COMBINE_RGB: number; - GL_COMBINE_ALPHA: number; - GL_SOURCE0_RGB: number; - GL_SOURCE1_RGB: number; - GL_SOURCE2_RGB: number; - GL_SOURCE0_ALPHA: number; - GL_SOURCE1_ALPHA: number; - GL_SOURCE2_ALPHA: number; - GL_OPERAND0_RGB: number; - GL_OPERAND1_RGB: number; - GL_OPERAND2_RGB: number; - GL_OPERAND0_ALPHA: number; - GL_OPERAND1_ALPHA: number; - GL_OPERAND2_ALPHA: number; - GL_RGB_SCALE: number; - GL_ADD_SIGNED: number; - GL_INTERPOLATE: number; - GL_SUBTRACT: number; - GL_CONSTANT: number; - GL_PRIMARY_COLOR: number; - GL_PREVIOUS: number; - GL_DOT3_RGB: number; - GL_DOT3_RGBA: number; - GL_CLAMP_TO_BORDER: number; - GL_TRANSPOSE_MODELVIEW_MATRIX: number; - GL_TRANSPOSE_PROJECTION_MATRIX: number; - GL_TRANSPOSE_TEXTURE_MATRIX: number; - GL_TRANSPOSE_COLOR_MATRIX: number; - nglCompressedTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glCompressedTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glCompressedTexImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.ByteBuffer | null | undefined): void; - nglCompressedTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glCompressedTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glCompressedTexImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer | null | undefined): void; - nglCompressedTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glCompressedTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glCompressedTexImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: java.nio.ByteBuffer | null | undefined): void; - nglCompressedTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glCompressedTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glCompressedTexSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.ByteBuffer): void; - nglCompressedTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glCompressedTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glCompressedTexSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.ByteBuffer): void; - nglCompressedTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glCompressedTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glCompressedTexSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: java.nio.ByteBuffer): void; - nglGetCompressedTexImage(p0: number, p1: number, p2: number): void; - glGetCompressedTexImage(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glGetCompressedTexImage(p0: number, p1: number, p2: number): void; - glSampleCoverage(p0: number, p1: boolean): void; - glActiveTexture(p0: number): void; - glClientActiveTexture(p0: number): void; - glMultiTexCoord1f(p0: number, p1: number): void; - glMultiTexCoord1s(p0: number, p1: number): void; - glMultiTexCoord1i(p0: number, p1: number): void; - glMultiTexCoord1d(p0: number, p1: number): void; - nglMultiTexCoord1fv(p0: number, p1: number): void; - glMultiTexCoord1fv(p0: number, p1: java.nio.FloatBuffer): void; - glMultiTexCoord1fv(p0: number, p1: kotlin.FloatArray): void; - nglMultiTexCoord1sv(p0: number, p1: number): void; - glMultiTexCoord1sv(p0: number, p1: java.nio.ShortBuffer): void; - glMultiTexCoord1sv(p0: number, p1: Array): void; - nglMultiTexCoord1iv(p0: number, p1: number): void; - glMultiTexCoord1iv(p0: number, p1: java.nio.IntBuffer): void; - glMultiTexCoord1iv(p0: number, p1: Array): void; - nglMultiTexCoord1dv(p0: number, p1: number): void; - glMultiTexCoord1dv(p0: number, p1: java.nio.DoubleBuffer): void; - glMultiTexCoord1dv(p0: number, p1: kotlin.DoubleArray): void; - glMultiTexCoord2f(p0: number, p1: number, p2: number): void; - glMultiTexCoord2s(p0: number, p1: number, p2: number): void; - glMultiTexCoord2i(p0: number, p1: number, p2: number): void; - glMultiTexCoord2d(p0: number, p1: number, p2: number): void; - nglMultiTexCoord2fv(p0: number, p1: number): void; - glMultiTexCoord2fv(p0: number, p1: java.nio.FloatBuffer): void; - glMultiTexCoord2fv(p0: number, p1: kotlin.FloatArray): void; - nglMultiTexCoord2sv(p0: number, p1: number): void; - glMultiTexCoord2sv(p0: number, p1: java.nio.ShortBuffer): void; - glMultiTexCoord2sv(p0: number, p1: Array): void; - nglMultiTexCoord2iv(p0: number, p1: number): void; - glMultiTexCoord2iv(p0: number, p1: java.nio.IntBuffer): void; - glMultiTexCoord2iv(p0: number, p1: Array): void; - nglMultiTexCoord2dv(p0: number, p1: number): void; - glMultiTexCoord2dv(p0: number, p1: java.nio.DoubleBuffer): void; - glMultiTexCoord2dv(p0: number, p1: kotlin.DoubleArray): void; - glMultiTexCoord3f(p0: number, p1: number, p2: number, p3: number): void; - glMultiTexCoord3s(p0: number, p1: number, p2: number, p3: number): void; - glMultiTexCoord3i(p0: number, p1: number, p2: number, p3: number): void; - glMultiTexCoord3d(p0: number, p1: number, p2: number, p3: number): void; - nglMultiTexCoord3fv(p0: number, p1: number): void; - glMultiTexCoord3fv(p0: number, p1: java.nio.FloatBuffer): void; - glMultiTexCoord3fv(p0: number, p1: kotlin.FloatArray): void; - nglMultiTexCoord3sv(p0: number, p1: number): void; - glMultiTexCoord3sv(p0: number, p1: java.nio.ShortBuffer): void; - glMultiTexCoord3sv(p0: number, p1: Array): void; - nglMultiTexCoord3iv(p0: number, p1: number): void; - glMultiTexCoord3iv(p0: number, p1: java.nio.IntBuffer): void; - glMultiTexCoord3iv(p0: number, p1: Array): void; - nglMultiTexCoord3dv(p0: number, p1: number): void; - glMultiTexCoord3dv(p0: number, p1: java.nio.DoubleBuffer): void; - glMultiTexCoord3dv(p0: number, p1: kotlin.DoubleArray): void; - glMultiTexCoord4f(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glMultiTexCoord4s(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glMultiTexCoord4i(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glMultiTexCoord4d(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglMultiTexCoord4fv(p0: number, p1: number): void; - glMultiTexCoord4fv(p0: number, p1: java.nio.FloatBuffer): void; - glMultiTexCoord4fv(p0: number, p1: kotlin.FloatArray): void; - nglMultiTexCoord4sv(p0: number, p1: number): void; - glMultiTexCoord4sv(p0: number, p1: java.nio.ShortBuffer): void; - glMultiTexCoord4sv(p0: number, p1: Array): void; - nglMultiTexCoord4iv(p0: number, p1: number): void; - glMultiTexCoord4iv(p0: number, p1: java.nio.IntBuffer): void; - glMultiTexCoord4iv(p0: number, p1: Array): void; - nglMultiTexCoord4dv(p0: number, p1: number): void; - glMultiTexCoord4dv(p0: number, p1: java.nio.DoubleBuffer): void; - glMultiTexCoord4dv(p0: number, p1: kotlin.DoubleArray): void; - nglLoadTransposeMatrixf(p0: number): void; - glLoadTransposeMatrixf(p0: java.nio.FloatBuffer): void; - glLoadTransposeMatrixf(p0: kotlin.FloatArray): void; - nglLoadTransposeMatrixd(p0: number): void; - glLoadTransposeMatrixd(p0: java.nio.DoubleBuffer): void; - glLoadTransposeMatrixd(p0: kotlin.DoubleArray): void; - nglMultTransposeMatrixf(p0: number): void; - glMultTransposeMatrixf(p0: java.nio.FloatBuffer): void; - glMultTransposeMatrixf(p0: kotlin.FloatArray): void; - nglMultTransposeMatrixd(p0: number): void; - glMultTransposeMatrixd(p0: java.nio.DoubleBuffer): void; - glMultTransposeMatrixd(p0: kotlin.DoubleArray): void; - } - interface GL13 extends org.lwjgl.opengl.GL12 { - } - const GL14: { - GL_GENERATE_MIPMAP: number; - GL_GENERATE_MIPMAP_HINT: number; - GL_CONSTANT_COLOR: number; - GL_ONE_MINUS_CONSTANT_COLOR: number; - GL_CONSTANT_ALPHA: number; - GL_ONE_MINUS_CONSTANT_ALPHA: number; - GL_BLEND_COLOR: number; - GL_FUNC_ADD: number; - GL_MIN: number; - GL_MAX: number; - GL_BLEND_EQUATION: number; - GL_FUNC_SUBTRACT: number; - GL_FUNC_REVERSE_SUBTRACT: number; - GL_DEPTH_COMPONENT16: number; - GL_DEPTH_COMPONENT24: number; - GL_DEPTH_COMPONENT32: number; - GL_TEXTURE_DEPTH_SIZE: number; - GL_DEPTH_TEXTURE_MODE: number; - GL_TEXTURE_COMPARE_MODE: number; - GL_TEXTURE_COMPARE_FUNC: number; - GL_COMPARE_R_TO_TEXTURE: number; - GL_FOG_COORDINATE_SOURCE: number; - GL_FOG_COORDINATE: number; - GL_FRAGMENT_DEPTH: number; - GL_CURRENT_FOG_COORDINATE: number; - GL_FOG_COORDINATE_ARRAY_TYPE: number; - GL_FOG_COORDINATE_ARRAY_STRIDE: number; - GL_FOG_COORDINATE_ARRAY_POINTER: number; - GL_FOG_COORDINATE_ARRAY: number; - GL_POINT_SIZE_MIN: number; - GL_POINT_SIZE_MAX: number; - GL_POINT_FADE_THRESHOLD_SIZE: number; - GL_POINT_DISTANCE_ATTENUATION: number; - GL_COLOR_SUM: number; - GL_CURRENT_SECONDARY_COLOR: number; - GL_SECONDARY_COLOR_ARRAY_SIZE: number; - GL_SECONDARY_COLOR_ARRAY_TYPE: number; - GL_SECONDARY_COLOR_ARRAY_STRIDE: number; - GL_SECONDARY_COLOR_ARRAY_POINTER: number; - GL_SECONDARY_COLOR_ARRAY: number; - GL_BLEND_DST_RGB: number; - GL_BLEND_SRC_RGB: number; - GL_BLEND_DST_ALPHA: number; - GL_BLEND_SRC_ALPHA: number; - GL_INCR_WRAP: number; - GL_DECR_WRAP: number; - GL_TEXTURE_FILTER_CONTROL: number; - GL_TEXTURE_LOD_BIAS: number; - GL_MAX_TEXTURE_LOD_BIAS: number; - GL_MIRRORED_REPEAT: number; - glBlendColor(p0: number, p1: number, p2: number, p3: number): void; - glBlendEquation(p0: number): void; - glFogCoordf(p0: number): void; - glFogCoordd(p0: number): void; - nglFogCoordfv(p0: number): void; - glFogCoordfv(p0: java.nio.FloatBuffer): void; - glFogCoordfv(p0: kotlin.FloatArray): void; - nglFogCoorddv(p0: number): void; - glFogCoorddv(p0: java.nio.DoubleBuffer): void; - glFogCoorddv(p0: kotlin.DoubleArray): void; - nglFogCoordPointer(p0: number, p1: number, p2: number): void; - glFogCoordPointer(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glFogCoordPointer(p0: number, p1: number, p2: number): void; - glFogCoordPointer(p0: number, p1: number, p2: java.nio.ShortBuffer): void; - glFogCoordPointer(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - nglMultiDrawArrays(p0: number, p1: number, p2: number, p3: number): void; - glMultiDrawArrays(p0: number, p1: java.nio.IntBuffer, p2: java.nio.IntBuffer): void; - glMultiDrawArrays(p0: number, p1: Array, p2: Array): void; - nglMultiDrawElements(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glMultiDrawElements(p0: number, p1: java.nio.IntBuffer, p2: number, p3: org.lwjgl.PointerBuffer): void; - glMultiDrawElements(p0: number, p1: Array, p2: number, p3: org.lwjgl.PointerBuffer): void; - glPointParameterf(p0: number, p1: number): void; - glPointParameteri(p0: number, p1: number): void; - nglPointParameterfv(p0: number, p1: number): void; - glPointParameterfv(p0: number, p1: java.nio.FloatBuffer): void; - glPointParameterfv(p0: number, p1: kotlin.FloatArray): void; - nglPointParameteriv(p0: number, p1: number): void; - glPointParameteriv(p0: number, p1: java.nio.IntBuffer): void; - glPointParameteriv(p0: number, p1: Array): void; - glSecondaryColor3b(p0: number, p1: number, p2: number): void; - glSecondaryColor3s(p0: number, p1: number, p2: number): void; - glSecondaryColor3i(p0: number, p1: number, p2: number): void; - glSecondaryColor3f(p0: number, p1: number, p2: number): void; - glSecondaryColor3d(p0: number, p1: number, p2: number): void; - glSecondaryColor3ub(p0: number, p1: number, p2: number): void; - glSecondaryColor3us(p0: number, p1: number, p2: number): void; - glSecondaryColor3ui(p0: number, p1: number, p2: number): void; - nglSecondaryColor3bv(p0: number): void; - glSecondaryColor3bv(p0: java.nio.ByteBuffer): void; - nglSecondaryColor3sv(p0: number): void; - glSecondaryColor3sv(p0: java.nio.ShortBuffer): void; - glSecondaryColor3sv(p0: Array): void; - nglSecondaryColor3iv(p0: number): void; - glSecondaryColor3iv(p0: java.nio.IntBuffer): void; - glSecondaryColor3iv(p0: Array): void; - nglSecondaryColor3fv(p0: number): void; - glSecondaryColor3fv(p0: java.nio.FloatBuffer): void; - glSecondaryColor3fv(p0: kotlin.FloatArray): void; - nglSecondaryColor3dv(p0: number): void; - glSecondaryColor3dv(p0: java.nio.DoubleBuffer): void; - glSecondaryColor3dv(p0: kotlin.DoubleArray): void; - nglSecondaryColor3ubv(p0: number): void; - glSecondaryColor3ubv(p0: java.nio.ByteBuffer): void; - nglSecondaryColor3usv(p0: number): void; - glSecondaryColor3usv(p0: java.nio.ShortBuffer): void; - glSecondaryColor3usv(p0: Array): void; - nglSecondaryColor3uiv(p0: number): void; - glSecondaryColor3uiv(p0: java.nio.IntBuffer): void; - glSecondaryColor3uiv(p0: Array): void; - nglSecondaryColorPointer(p0: number, p1: number, p2: number, p3: number): void; - glSecondaryColorPointer(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - glSecondaryColorPointer(p0: number, p1: number, p2: number, p3: number): void; - glSecondaryColorPointer(p0: number, p1: number, p2: number, p3: java.nio.ShortBuffer): void; - glSecondaryColorPointer(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glSecondaryColorPointer(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glBlendFuncSeparate(p0: number, p1: number, p2: number, p3: number): void; - glWindowPos2i(p0: number, p1: number): void; - glWindowPos2s(p0: number, p1: number): void; - glWindowPos2f(p0: number, p1: number): void; - glWindowPos2d(p0: number, p1: number): void; - nglWindowPos2iv(p0: number): void; - glWindowPos2iv(p0: java.nio.IntBuffer): void; - glWindowPos2iv(p0: Array): void; - nglWindowPos2sv(p0: number): void; - glWindowPos2sv(p0: java.nio.ShortBuffer): void; - glWindowPos2sv(p0: Array): void; - nglWindowPos2fv(p0: number): void; - glWindowPos2fv(p0: java.nio.FloatBuffer): void; - glWindowPos2fv(p0: kotlin.FloatArray): void; - nglWindowPos2dv(p0: number): void; - glWindowPos2dv(p0: java.nio.DoubleBuffer): void; - glWindowPos2dv(p0: kotlin.DoubleArray): void; - glWindowPos3i(p0: number, p1: number, p2: number): void; - glWindowPos3s(p0: number, p1: number, p2: number): void; - glWindowPos3f(p0: number, p1: number, p2: number): void; - glWindowPos3d(p0: number, p1: number, p2: number): void; - nglWindowPos3iv(p0: number): void; - glWindowPos3iv(p0: java.nio.IntBuffer): void; - glWindowPos3iv(p0: Array): void; - nglWindowPos3sv(p0: number): void; - glWindowPos3sv(p0: java.nio.ShortBuffer): void; - glWindowPos3sv(p0: Array): void; - nglWindowPos3fv(p0: number): void; - glWindowPos3fv(p0: java.nio.FloatBuffer): void; - glWindowPos3fv(p0: kotlin.FloatArray): void; - nglWindowPos3dv(p0: number): void; - glWindowPos3dv(p0: java.nio.DoubleBuffer): void; - glWindowPos3dv(p0: kotlin.DoubleArray): void; - } - interface GL14 extends org.lwjgl.opengl.GL13 { - } - const GL15: { - GL_FOG_COORD_SRC: number; - GL_FOG_COORD: number; - GL_CURRENT_FOG_COORD: number; - GL_FOG_COORD_ARRAY_TYPE: number; - GL_FOG_COORD_ARRAY_STRIDE: number; - GL_FOG_COORD_ARRAY_POINTER: number; - GL_FOG_COORD_ARRAY: number; - GL_FOG_COORD_ARRAY_BUFFER_BINDING: number; - GL_SRC0_RGB: number; - GL_SRC1_RGB: number; - GL_SRC2_RGB: number; - GL_SRC0_ALPHA: number; - GL_SRC1_ALPHA: number; - GL_SRC2_ALPHA: number; - GL_ARRAY_BUFFER: number; - GL_ELEMENT_ARRAY_BUFFER: number; - GL_ARRAY_BUFFER_BINDING: number; - GL_ELEMENT_ARRAY_BUFFER_BINDING: number; - GL_VERTEX_ARRAY_BUFFER_BINDING: number; - GL_NORMAL_ARRAY_BUFFER_BINDING: number; - GL_COLOR_ARRAY_BUFFER_BINDING: number; - GL_INDEX_ARRAY_BUFFER_BINDING: number; - GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING: number; - GL_EDGE_FLAG_ARRAY_BUFFER_BINDING: number; - GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING: number; - GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING: number; - GL_WEIGHT_ARRAY_BUFFER_BINDING: number; - GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number; - GL_STREAM_DRAW: number; - GL_STREAM_READ: number; - GL_STREAM_COPY: number; - GL_STATIC_DRAW: number; - GL_STATIC_READ: number; - GL_STATIC_COPY: number; - GL_DYNAMIC_DRAW: number; - GL_DYNAMIC_READ: number; - GL_DYNAMIC_COPY: number; - GL_READ_ONLY: number; - GL_WRITE_ONLY: number; - GL_READ_WRITE: number; - GL_BUFFER_SIZE: number; - GL_BUFFER_USAGE: number; - GL_BUFFER_ACCESS: number; - GL_BUFFER_MAPPED: number; - GL_BUFFER_MAP_POINTER: number; - GL_SAMPLES_PASSED: number; - GL_QUERY_COUNTER_BITS: number; - GL_CURRENT_QUERY: number; - GL_QUERY_RESULT: number; - GL_QUERY_RESULT_AVAILABLE: number; - glBindBuffer(p0: number, p1: number): void; - nglDeleteBuffers(p0: number, p1: number): void; - glDeleteBuffers(p0: java.nio.IntBuffer): void; - glDeleteBuffers(p0: number): void; - glDeleteBuffers(p0: Array): void; - nglGenBuffers(p0: number, p1: number): void; - glGenBuffers(p0: java.nio.IntBuffer): void; - glGenBuffers(): number; - glGenBuffers(p0: Array): void; - glIsBuffer(p0: number): boolean; - nglBufferData(p0: number, p1: number, p2: number, p3: number): void; - glBufferData(p0: number, p1: number, p2: number): void; - glBufferData(p0: number, p1: java.nio.ByteBuffer, p2: number): void; - glBufferData(p0: number, p1: java.nio.ShortBuffer, p2: number): void; - glBufferData(p0: number, p1: java.nio.IntBuffer, p2: number): void; - glBufferData(p0: number, p1: java.nio.LongBuffer, p2: number): void; - glBufferData(p0: number, p1: java.nio.FloatBuffer, p2: number): void; - glBufferData(p0: number, p1: java.nio.DoubleBuffer, p2: number): void; - glBufferData(p0: number, p1: Array, p2: number): void; - glBufferData(p0: number, p1: Array, p2: number): void; - glBufferData(p0: number, p1: Array, p2: number): void; - glBufferData(p0: number, p1: kotlin.FloatArray, p2: number): void; - glBufferData(p0: number, p1: kotlin.DoubleArray, p2: number): void; - nglBufferSubData(p0: number, p1: number, p2: number, p3: number): void; - glBufferSubData(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glBufferSubData(p0: number, p1: number, p2: java.nio.ShortBuffer): void; - glBufferSubData(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glBufferSubData(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glBufferSubData(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glBufferSubData(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glBufferSubData(p0: number, p1: number, p2: Array): void; - glBufferSubData(p0: number, p1: number, p2: Array): void; - glBufferSubData(p0: number, p1: number, p2: Array): void; - glBufferSubData(p0: number, p1: number, p2: kotlin.FloatArray): void; - glBufferSubData(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglGetBufferSubData(p0: number, p1: number, p2: number, p3: number): void; - glGetBufferSubData(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glGetBufferSubData(p0: number, p1: number, p2: java.nio.ShortBuffer): void; - glGetBufferSubData(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetBufferSubData(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glGetBufferSubData(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetBufferSubData(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetBufferSubData(p0: number, p1: number, p2: Array): void; - glGetBufferSubData(p0: number, p1: number, p2: Array): void; - glGetBufferSubData(p0: number, p1: number, p2: Array): void; - glGetBufferSubData(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetBufferSubData(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglMapBuffer(p0: number, p1: number): number; - glMapBuffer(p0: number, p1: number): java.nio.ByteBuffer | null | undefined; - glMapBuffer(p0: number, p1: number, p2: java.nio.ByteBuffer | null | undefined): java.nio.ByteBuffer | null | undefined; - glMapBuffer(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer | null | undefined): java.nio.ByteBuffer | null | undefined; - glUnmapBuffer(p0: number): boolean; - nglGetBufferParameteriv(p0: number, p1: number, p2: number): void; - glGetBufferParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetBufferParameteriv(p0: number, p1: number, p2: Array): void; - glGetBufferParameteri(p0: number, p1: number): number; - nglGetBufferPointerv(p0: number, p1: number, p2: number): void; - glGetBufferPointerv(p0: number, p1: number, p2: org.lwjgl.PointerBuffer): void; - glGetBufferPointer(p0: number, p1: number): number; - nglGenQueries(p0: number, p1: number): void; - glGenQueries(p0: java.nio.IntBuffer): void; - glGenQueries(): number; - glGenQueries(p0: Array): void; - nglDeleteQueries(p0: number, p1: number): void; - glDeleteQueries(p0: java.nio.IntBuffer): void; - glDeleteQueries(p0: number): void; - glDeleteQueries(p0: Array): void; - glIsQuery(p0: number): boolean; - glBeginQuery(p0: number, p1: number): void; - glEndQuery(p0: number): void; - nglGetQueryiv(p0: number, p1: number, p2: number): void; - glGetQueryiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetQueryiv(p0: number, p1: number, p2: Array): void; - glGetQueryi(p0: number, p1: number): number; - nglGetQueryObjectiv(p0: number, p1: number, p2: number): void; - glGetQueryObjectiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetQueryObjectiv(p0: number, p1: number, p2: number): void; - glGetQueryObjectiv(p0: number, p1: number, p2: Array): void; - glGetQueryObjecti(p0: number, p1: number): number; - nglGetQueryObjectuiv(p0: number, p1: number, p2: number): void; - glGetQueryObjectuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetQueryObjectuiv(p0: number, p1: number, p2: number): void; - glGetQueryObjectuiv(p0: number, p1: number, p2: Array): void; - glGetQueryObjectui(p0: number, p1: number): number; - } - interface GL15 extends org.lwjgl.opengl.GL14 { - } - const GL20: { - GL_SHADING_LANGUAGE_VERSION: number; - GL_CURRENT_PROGRAM: number; - GL_SHADER_TYPE: number; - GL_DELETE_STATUS: number; - GL_COMPILE_STATUS: number; - GL_LINK_STATUS: number; - GL_VALIDATE_STATUS: number; - GL_INFO_LOG_LENGTH: number; - GL_ATTACHED_SHADERS: number; - GL_ACTIVE_UNIFORMS: number; - GL_ACTIVE_UNIFORM_MAX_LENGTH: number; - GL_ACTIVE_ATTRIBUTES: number; - GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: number; - GL_SHADER_SOURCE_LENGTH: number; - GL_FLOAT_VEC2: number; - GL_FLOAT_VEC3: number; - GL_FLOAT_VEC4: number; - GL_INT_VEC2: number; - GL_INT_VEC3: number; - GL_INT_VEC4: number; - GL_BOOL: number; - GL_BOOL_VEC2: number; - GL_BOOL_VEC3: number; - GL_BOOL_VEC4: number; - GL_FLOAT_MAT2: number; - GL_FLOAT_MAT3: number; - GL_FLOAT_MAT4: number; - GL_SAMPLER_1D: number; - GL_SAMPLER_2D: number; - GL_SAMPLER_3D: number; - GL_SAMPLER_CUBE: number; - GL_SAMPLER_1D_SHADOW: number; - GL_SAMPLER_2D_SHADOW: number; - GL_VERTEX_SHADER: number; - GL_MAX_VERTEX_UNIFORM_COMPONENTS: number; - GL_MAX_VARYING_FLOATS: number; - GL_MAX_VERTEX_ATTRIBS: number; - GL_MAX_TEXTURE_IMAGE_UNITS: number; - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: number; - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: number; - GL_MAX_TEXTURE_COORDS: number; - GL_VERTEX_PROGRAM_POINT_SIZE: number; - GL_VERTEX_PROGRAM_TWO_SIDE: number; - GL_VERTEX_ATTRIB_ARRAY_ENABLED: number; - GL_VERTEX_ATTRIB_ARRAY_SIZE: number; - GL_VERTEX_ATTRIB_ARRAY_STRIDE: number; - GL_VERTEX_ATTRIB_ARRAY_TYPE: number; - GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: number; - GL_CURRENT_VERTEX_ATTRIB: number; - GL_VERTEX_ATTRIB_ARRAY_POINTER: number; - GL_FRAGMENT_SHADER: number; - GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: number; - GL_FRAGMENT_SHADER_DERIVATIVE_HINT: number; - GL_MAX_DRAW_BUFFERS: number; - GL_DRAW_BUFFER0: number; - GL_DRAW_BUFFER1: number; - GL_DRAW_BUFFER2: number; - GL_DRAW_BUFFER3: number; - GL_DRAW_BUFFER4: number; - GL_DRAW_BUFFER5: number; - GL_DRAW_BUFFER6: number; - GL_DRAW_BUFFER7: number; - GL_DRAW_BUFFER8: number; - GL_DRAW_BUFFER9: number; - GL_DRAW_BUFFER10: number; - GL_DRAW_BUFFER11: number; - GL_DRAW_BUFFER12: number; - GL_DRAW_BUFFER13: number; - GL_DRAW_BUFFER14: number; - GL_DRAW_BUFFER15: number; - GL_POINT_SPRITE: number; - GL_COORD_REPLACE: number; - GL_POINT_SPRITE_COORD_ORIGIN: number; - GL_LOWER_LEFT: number; - GL_UPPER_LEFT: number; - GL_BLEND_EQUATION_RGB: number; - GL_BLEND_EQUATION_ALPHA: number; - GL_STENCIL_BACK_FUNC: number; - GL_STENCIL_BACK_FAIL: number; - GL_STENCIL_BACK_PASS_DEPTH_FAIL: number; - GL_STENCIL_BACK_PASS_DEPTH_PASS: number; - GL_STENCIL_BACK_REF: number; - GL_STENCIL_BACK_VALUE_MASK: number; - GL_STENCIL_BACK_WRITEMASK: number; - glCreateProgram(): number; - glDeleteProgram(p0: number): void; - glIsProgram(p0: number): boolean; - glCreateShader(p0: number): number; - glDeleteShader(p0: number): void; - glIsShader(p0: number): boolean; - glAttachShader(p0: number, p1: number): void; - glDetachShader(p0: number, p1: number): void; - nglShaderSource(p0: number, p1: number, p2: number, p3: number): void; - glShaderSource(p0: number, p1: org.lwjgl.PointerBuffer, p2: java.nio.IntBuffer | null | undefined): void; - glShaderSource(p0: number, p1: kotlin.CharSequence): void; - glShaderSource(p0: number, p1: kotlin.CharSequence): void; - glShaderSource(p0: number, p1: org.lwjgl.PointerBuffer, p2: Array): void; - glCompileShader(p0: number): void; - glLinkProgram(p0: number): void; - glUseProgram(p0: number): void; - glValidateProgram(p0: number): void; - glUniform1f(p0: number, p1: number): void; - glUniform2f(p0: number, p1: number, p2: number): void; - glUniform3f(p0: number, p1: number, p2: number, p3: number): void; - glUniform4f(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glUniform1i(p0: number, p1: number): void; - glUniform2i(p0: number, p1: number, p2: number): void; - glUniform3i(p0: number, p1: number, p2: number, p3: number): void; - glUniform4i(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglUniform1fv(p0: number, p1: number, p2: number): void; - glUniform1fv(p0: number, p1: java.nio.FloatBuffer): void; - glUniform1fv(p0: number, p1: kotlin.FloatArray): void; - nglUniform2fv(p0: number, p1: number, p2: number): void; - glUniform2fv(p0: number, p1: java.nio.FloatBuffer): void; - glUniform2fv(p0: number, p1: kotlin.FloatArray): void; - nglUniform3fv(p0: number, p1: number, p2: number): void; - glUniform3fv(p0: number, p1: java.nio.FloatBuffer): void; - glUniform3fv(p0: number, p1: kotlin.FloatArray): void; - nglUniform4fv(p0: number, p1: number, p2: number): void; - glUniform4fv(p0: number, p1: java.nio.FloatBuffer): void; - glUniform4fv(p0: number, p1: kotlin.FloatArray): void; - nglUniform1iv(p0: number, p1: number, p2: number): void; - glUniform1iv(p0: number, p1: java.nio.IntBuffer): void; - glUniform1iv(p0: number, p1: Array): void; - nglUniform2iv(p0: number, p1: number, p2: number): void; - glUniform2iv(p0: number, p1: java.nio.IntBuffer): void; - glUniform2iv(p0: number, p1: Array): void; - nglUniform3iv(p0: number, p1: number, p2: number): void; - glUniform3iv(p0: number, p1: java.nio.IntBuffer): void; - glUniform3iv(p0: number, p1: Array): void; - nglUniform4iv(p0: number, p1: number, p2: number): void; - glUniform4iv(p0: number, p1: java.nio.IntBuffer): void; - glUniform4iv(p0: number, p1: Array): void; - nglUniformMatrix2fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix2fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix2fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglUniformMatrix3fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix3fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix3fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglUniformMatrix4fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix4fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix4fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglGetShaderiv(p0: number, p1: number, p2: number): void; - glGetShaderiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetShaderiv(p0: number, p1: number, p2: Array): void; - glGetShaderi(p0: number, p1: number): number; - nglGetProgramiv(p0: number, p1: number, p2: number): void; - glGetProgramiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetProgramiv(p0: number, p1: number, p2: Array): void; - glGetProgrami(p0: number, p1: number): number; - nglGetShaderInfoLog(p0: number, p1: number, p2: number, p3: number): void; - glGetShaderInfoLog(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.ByteBuffer): void; - glGetShaderInfoLog(p0: number, p1: number): string; - glGetShaderInfoLog(p0: number): string; - glGetShaderInfoLog(p0: number, p1: Array, p2: java.nio.ByteBuffer): void; - nglGetProgramInfoLog(p0: number, p1: number, p2: number, p3: number): void; - glGetProgramInfoLog(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.ByteBuffer): void; - glGetProgramInfoLog(p0: number, p1: number): string; - glGetProgramInfoLog(p0: number): string; - glGetProgramInfoLog(p0: number, p1: Array, p2: java.nio.ByteBuffer): void; - nglGetAttachedShaders(p0: number, p1: number, p2: number, p3: number): void; - glGetAttachedShaders(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.IntBuffer): void; - glGetAttachedShaders(p0: number, p1: Array, p2: Array): void; - nglGetUniformLocation(p0: number, p1: number): number; - glGetUniformLocation(p0: number, p1: java.nio.ByteBuffer): number; - glGetUniformLocation(p0: number, p1: kotlin.CharSequence): number; - nglGetActiveUniform(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glGetActiveUniform(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.IntBuffer, p4: java.nio.IntBuffer, p5: java.nio.ByteBuffer): void; - glGetActiveUniform(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer, p4: java.nio.IntBuffer): string; - glGetActiveUniform(p0: number, p1: number, p2: java.nio.IntBuffer, p3: java.nio.IntBuffer): string; - glGetActiveUniform(p0: number, p1: number, p2: Array, p3: Array, p4: Array, p5: java.nio.ByteBuffer): void; - nglGetUniformfv(p0: number, p1: number, p2: number): void; - glGetUniformfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetUniformfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetUniformf(p0: number, p1: number): number; - nglGetUniformiv(p0: number, p1: number, p2: number): void; - glGetUniformiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetUniformiv(p0: number, p1: number, p2: Array): void; - glGetUniformi(p0: number, p1: number): number; - nglGetShaderSource(p0: number, p1: number, p2: number, p3: number): void; - glGetShaderSource(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.ByteBuffer): void; - glGetShaderSource(p0: number, p1: number): string; - glGetShaderSource(p0: number): string; - glGetShaderSource(p0: number, p1: Array, p2: java.nio.ByteBuffer): void; - glVertexAttrib1f(p0: number, p1: number): void; - glVertexAttrib1s(p0: number, p1: number): void; - glVertexAttrib1d(p0: number, p1: number): void; - glVertexAttrib2f(p0: number, p1: number, p2: number): void; - glVertexAttrib2s(p0: number, p1: number, p2: number): void; - glVertexAttrib2d(p0: number, p1: number, p2: number): void; - glVertexAttrib3f(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttrib3s(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttrib3d(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttrib4f(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttrib4s(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttrib4d(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttrib4Nub(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglVertexAttrib1fv(p0: number, p1: number): void; - glVertexAttrib1fv(p0: number, p1: java.nio.FloatBuffer): void; - glVertexAttrib1fv(p0: number, p1: kotlin.FloatArray): void; - nglVertexAttrib1sv(p0: number, p1: number): void; - glVertexAttrib1sv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttrib1sv(p0: number, p1: Array): void; - nglVertexAttrib1dv(p0: number, p1: number): void; - glVertexAttrib1dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttrib1dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttrib2fv(p0: number, p1: number): void; - glVertexAttrib2fv(p0: number, p1: java.nio.FloatBuffer): void; - glVertexAttrib2fv(p0: number, p1: kotlin.FloatArray): void; - nglVertexAttrib2sv(p0: number, p1: number): void; - glVertexAttrib2sv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttrib2sv(p0: number, p1: Array): void; - nglVertexAttrib2dv(p0: number, p1: number): void; - glVertexAttrib2dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttrib2dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttrib3fv(p0: number, p1: number): void; - glVertexAttrib3fv(p0: number, p1: java.nio.FloatBuffer): void; - glVertexAttrib3fv(p0: number, p1: kotlin.FloatArray): void; - nglVertexAttrib3sv(p0: number, p1: number): void; - glVertexAttrib3sv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttrib3sv(p0: number, p1: Array): void; - nglVertexAttrib3dv(p0: number, p1: number): void; - glVertexAttrib3dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttrib3dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttrib4fv(p0: number, p1: number): void; - glVertexAttrib4fv(p0: number, p1: java.nio.FloatBuffer): void; - glVertexAttrib4fv(p0: number, p1: kotlin.FloatArray): void; - nglVertexAttrib4sv(p0: number, p1: number): void; - glVertexAttrib4sv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttrib4sv(p0: number, p1: Array): void; - nglVertexAttrib4dv(p0: number, p1: number): void; - glVertexAttrib4dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttrib4dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttrib4iv(p0: number, p1: number): void; - glVertexAttrib4iv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttrib4iv(p0: number, p1: Array): void; - nglVertexAttrib4bv(p0: number, p1: number): void; - glVertexAttrib4bv(p0: number, p1: java.nio.ByteBuffer): void; - nglVertexAttrib4ubv(p0: number, p1: number): void; - glVertexAttrib4ubv(p0: number, p1: java.nio.ByteBuffer): void; - nglVertexAttrib4usv(p0: number, p1: number): void; - glVertexAttrib4usv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttrib4usv(p0: number, p1: Array): void; - nglVertexAttrib4uiv(p0: number, p1: number): void; - glVertexAttrib4uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttrib4uiv(p0: number, p1: Array): void; - nglVertexAttrib4Nbv(p0: number, p1: number): void; - glVertexAttrib4Nbv(p0: number, p1: java.nio.ByteBuffer): void; - nglVertexAttrib4Nsv(p0: number, p1: number): void; - glVertexAttrib4Nsv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttrib4Nsv(p0: number, p1: Array): void; - nglVertexAttrib4Niv(p0: number, p1: number): void; - glVertexAttrib4Niv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttrib4Niv(p0: number, p1: Array): void; - nglVertexAttrib4Nubv(p0: number, p1: number): void; - glVertexAttrib4Nubv(p0: number, p1: java.nio.ByteBuffer): void; - nglVertexAttrib4Nusv(p0: number, p1: number): void; - glVertexAttrib4Nusv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttrib4Nusv(p0: number, p1: Array): void; - nglVertexAttrib4Nuiv(p0: number, p1: number): void; - glVertexAttrib4Nuiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttrib4Nuiv(p0: number, p1: Array): void; - nglVertexAttribPointer(p0: number, p1: number, p2: number, p3: boolean, p4: number, p5: number): void; - glVertexAttribPointer(p0: number, p1: number, p2: number, p3: boolean, p4: number, p5: java.nio.ByteBuffer): void; - glVertexAttribPointer(p0: number, p1: number, p2: number, p3: boolean, p4: number, p5: number): void; - glVertexAttribPointer(p0: number, p1: number, p2: number, p3: boolean, p4: number, p5: java.nio.ShortBuffer): void; - glVertexAttribPointer(p0: number, p1: number, p2: number, p3: boolean, p4: number, p5: java.nio.IntBuffer): void; - glVertexAttribPointer(p0: number, p1: number, p2: number, p3: boolean, p4: number, p5: java.nio.FloatBuffer): void; - glEnableVertexAttribArray(p0: number): void; - glDisableVertexAttribArray(p0: number): void; - nglBindAttribLocation(p0: number, p1: number, p2: number): void; - glBindAttribLocation(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glBindAttribLocation(p0: number, p1: number, p2: kotlin.CharSequence): void; - nglGetActiveAttrib(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glGetActiveAttrib(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.IntBuffer, p4: java.nio.IntBuffer, p5: java.nio.ByteBuffer): void; - glGetActiveAttrib(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer, p4: java.nio.IntBuffer): string; - glGetActiveAttrib(p0: number, p1: number, p2: java.nio.IntBuffer, p3: java.nio.IntBuffer): string; - glGetActiveAttrib(p0: number, p1: number, p2: Array, p3: Array, p4: Array, p5: java.nio.ByteBuffer): void; - nglGetAttribLocation(p0: number, p1: number): number; - glGetAttribLocation(p0: number, p1: java.nio.ByteBuffer): number; - glGetAttribLocation(p0: number, p1: kotlin.CharSequence): number; - nglGetVertexAttribiv(p0: number, p1: number, p2: number): void; - glGetVertexAttribiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetVertexAttribiv(p0: number, p1: number, p2: Array): void; - glGetVertexAttribi(p0: number, p1: number): number; - nglGetVertexAttribfv(p0: number, p1: number, p2: number): void; - glGetVertexAttribfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetVertexAttribfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglGetVertexAttribdv(p0: number, p1: number, p2: number): void; - glGetVertexAttribdv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetVertexAttribdv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglGetVertexAttribPointerv(p0: number, p1: number, p2: number): void; - glGetVertexAttribPointerv(p0: number, p1: number, p2: org.lwjgl.PointerBuffer): void; - glGetVertexAttribPointer(p0: number, p1: number): number; - nglDrawBuffers(p0: number, p1: number): void; - glDrawBuffers(p0: java.nio.IntBuffer): void; - glDrawBuffers(p0: number): void; - glDrawBuffers(p0: Array): void; - glBlendEquationSeparate(p0: number, p1: number): void; - glStencilOpSeparate(p0: number, p1: number, p2: number, p3: number): void; - glStencilFuncSeparate(p0: number, p1: number, p2: number, p3: number): void; - glStencilMaskSeparate(p0: number, p1: number): void; - } - interface GL20 extends org.lwjgl.opengl.GL15 { - } - const GL21: { - GL_CURRENT_RASTER_SECONDARY_COLOR: number; - GL_FLOAT_MAT2x3: number; - GL_FLOAT_MAT2x4: number; - GL_FLOAT_MAT3x2: number; - GL_FLOAT_MAT3x4: number; - GL_FLOAT_MAT4x2: number; - GL_FLOAT_MAT4x3: number; - GL_PIXEL_PACK_BUFFER: number; - GL_PIXEL_UNPACK_BUFFER: number; - GL_PIXEL_PACK_BUFFER_BINDING: number; - GL_PIXEL_UNPACK_BUFFER_BINDING: number; - GL_SRGB: number; - GL_SRGB8: number; - GL_SRGB_ALPHA: number; - GL_SRGB8_ALPHA8: number; - GL_SLUMINANCE_ALPHA: number; - GL_SLUMINANCE8_ALPHA8: number; - GL_SLUMINANCE: number; - GL_SLUMINANCE8: number; - GL_COMPRESSED_SRGB: number; - GL_COMPRESSED_SRGB_ALPHA: number; - GL_COMPRESSED_SLUMINANCE: number; - GL_COMPRESSED_SLUMINANCE_ALPHA: number; - nglUniformMatrix2x3fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix2x3fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix2x3fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglUniformMatrix3x2fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix3x2fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix3x2fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglUniformMatrix2x4fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix2x4fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix2x4fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglUniformMatrix4x2fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix4x2fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix4x2fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglUniformMatrix3x4fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix3x4fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix3x4fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - nglUniformMatrix4x3fv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix4x3fv(p0: number, p1: boolean, p2: java.nio.FloatBuffer): void; - glUniformMatrix4x3fv(p0: number, p1: boolean, p2: kotlin.FloatArray): void; - } - interface GL21 extends org.lwjgl.opengl.GL20 { - } - const GL30: { - GL_MAJOR_VERSION: number; - GL_MINOR_VERSION: number; - GL_NUM_EXTENSIONS: number; - GL_CONTEXT_FLAGS: number; - GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT: number; - GL_COMPARE_REF_TO_TEXTURE: number; - GL_CLIP_DISTANCE0: number; - GL_CLIP_DISTANCE1: number; - GL_CLIP_DISTANCE2: number; - GL_CLIP_DISTANCE3: number; - GL_CLIP_DISTANCE4: number; - GL_CLIP_DISTANCE5: number; - GL_CLIP_DISTANCE6: number; - GL_CLIP_DISTANCE7: number; - GL_MAX_CLIP_DISTANCES: number; - GL_MAX_VARYING_COMPONENTS: number; - GL_VERTEX_ATTRIB_ARRAY_INTEGER: number; - GL_SAMPLER_1D_ARRAY: number; - GL_SAMPLER_2D_ARRAY: number; - GL_SAMPLER_1D_ARRAY_SHADOW: number; - GL_SAMPLER_2D_ARRAY_SHADOW: number; - GL_SAMPLER_CUBE_SHADOW: number; - GL_UNSIGNED_INT_VEC2: number; - GL_UNSIGNED_INT_VEC3: number; - GL_UNSIGNED_INT_VEC4: number; - GL_INT_SAMPLER_1D: number; - GL_INT_SAMPLER_2D: number; - GL_INT_SAMPLER_3D: number; - GL_INT_SAMPLER_CUBE: number; - GL_INT_SAMPLER_1D_ARRAY: number; - GL_INT_SAMPLER_2D_ARRAY: number; - GL_UNSIGNED_INT_SAMPLER_1D: number; - GL_UNSIGNED_INT_SAMPLER_2D: number; - GL_UNSIGNED_INT_SAMPLER_3D: number; - GL_UNSIGNED_INT_SAMPLER_CUBE: number; - GL_UNSIGNED_INT_SAMPLER_1D_ARRAY: number; - GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: number; - GL_MIN_PROGRAM_TEXEL_OFFSET: number; - GL_MAX_PROGRAM_TEXEL_OFFSET: number; - GL_QUERY_WAIT: number; - GL_QUERY_NO_WAIT: number; - GL_QUERY_BY_REGION_WAIT: number; - GL_QUERY_BY_REGION_NO_WAIT: number; - GL_MAP_READ_BIT: number; - GL_MAP_WRITE_BIT: number; - GL_MAP_INVALIDATE_RANGE_BIT: number; - GL_MAP_INVALIDATE_BUFFER_BIT: number; - GL_MAP_FLUSH_EXPLICIT_BIT: number; - GL_MAP_UNSYNCHRONIZED_BIT: number; - GL_BUFFER_ACCESS_FLAGS: number; - GL_BUFFER_MAP_LENGTH: number; - GL_BUFFER_MAP_OFFSET: number; - GL_CLAMP_VERTEX_COLOR: number; - GL_CLAMP_FRAGMENT_COLOR: number; - GL_CLAMP_READ_COLOR: number; - GL_FIXED_ONLY: number; - GL_DEPTH_COMPONENT32F: number; - GL_DEPTH32F_STENCIL8: number; - GL_FLOAT_32_UNSIGNED_INT_24_8_REV: number; - GL_TEXTURE_RED_TYPE: number; - GL_TEXTURE_GREEN_TYPE: number; - GL_TEXTURE_BLUE_TYPE: number; - GL_TEXTURE_ALPHA_TYPE: number; - GL_TEXTURE_LUMINANCE_TYPE: number; - GL_TEXTURE_INTENSITY_TYPE: number; - GL_TEXTURE_DEPTH_TYPE: number; - GL_UNSIGNED_NORMALIZED: number; - GL_RGBA32F: number; - GL_RGB32F: number; - GL_RGBA16F: number; - GL_RGB16F: number; - GL_R11F_G11F_B10F: number; - GL_UNSIGNED_INT_10F_11F_11F_REV: number; - GL_RGB9_E5: number; - GL_UNSIGNED_INT_5_9_9_9_REV: number; - GL_TEXTURE_SHARED_SIZE: number; - GL_FRAMEBUFFER: number; - GL_READ_FRAMEBUFFER: number; - GL_DRAW_FRAMEBUFFER: number; - GL_RENDERBUFFER: number; - GL_STENCIL_INDEX1: number; - GL_STENCIL_INDEX4: number; - GL_STENCIL_INDEX8: number; - GL_STENCIL_INDEX16: number; - GL_RENDERBUFFER_WIDTH: number; - GL_RENDERBUFFER_HEIGHT: number; - GL_RENDERBUFFER_INTERNAL_FORMAT: number; - GL_RENDERBUFFER_RED_SIZE: number; - GL_RENDERBUFFER_GREEN_SIZE: number; - GL_RENDERBUFFER_BLUE_SIZE: number; - GL_RENDERBUFFER_ALPHA_SIZE: number; - GL_RENDERBUFFER_DEPTH_SIZE: number; - GL_RENDERBUFFER_STENCIL_SIZE: number; - GL_RENDERBUFFER_SAMPLES: number; - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number; - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number; - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number; - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number; - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: number; - GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: number; - GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: number; - GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: number; - GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: number; - GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: number; - GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: number; - GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: number; - GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: number; - GL_FRAMEBUFFER_DEFAULT: number; - GL_INDEX: number; - GL_COLOR_ATTACHMENT0: number; - GL_COLOR_ATTACHMENT1: number; - GL_COLOR_ATTACHMENT2: number; - GL_COLOR_ATTACHMENT3: number; - GL_COLOR_ATTACHMENT4: number; - GL_COLOR_ATTACHMENT5: number; - GL_COLOR_ATTACHMENT6: number; - GL_COLOR_ATTACHMENT7: number; - GL_COLOR_ATTACHMENT8: number; - GL_COLOR_ATTACHMENT9: number; - GL_COLOR_ATTACHMENT10: number; - GL_COLOR_ATTACHMENT11: number; - GL_COLOR_ATTACHMENT12: number; - GL_COLOR_ATTACHMENT13: number; - GL_COLOR_ATTACHMENT14: number; - GL_COLOR_ATTACHMENT15: number; - GL_COLOR_ATTACHMENT16: number; - GL_COLOR_ATTACHMENT17: number; - GL_COLOR_ATTACHMENT18: number; - GL_COLOR_ATTACHMENT19: number; - GL_COLOR_ATTACHMENT20: number; - GL_COLOR_ATTACHMENT21: number; - GL_COLOR_ATTACHMENT22: number; - GL_COLOR_ATTACHMENT23: number; - GL_COLOR_ATTACHMENT24: number; - GL_COLOR_ATTACHMENT25: number; - GL_COLOR_ATTACHMENT26: number; - GL_COLOR_ATTACHMENT27: number; - GL_COLOR_ATTACHMENT28: number; - GL_COLOR_ATTACHMENT29: number; - GL_COLOR_ATTACHMENT30: number; - GL_COLOR_ATTACHMENT31: number; - GL_DEPTH_ATTACHMENT: number; - GL_STENCIL_ATTACHMENT: number; - GL_DEPTH_STENCIL_ATTACHMENT: number; - GL_MAX_SAMPLES: number; - GL_FRAMEBUFFER_COMPLETE: number; - GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number; - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number; - GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: number; - GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: number; - GL_FRAMEBUFFER_UNSUPPORTED: number; - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: number; - GL_FRAMEBUFFER_UNDEFINED: number; - GL_FRAMEBUFFER_BINDING: number; - GL_DRAW_FRAMEBUFFER_BINDING: number; - GL_READ_FRAMEBUFFER_BINDING: number; - GL_RENDERBUFFER_BINDING: number; - GL_MAX_COLOR_ATTACHMENTS: number; - GL_MAX_RENDERBUFFER_SIZE: number; - GL_INVALID_FRAMEBUFFER_OPERATION: number; - GL_DEPTH_STENCIL: number; - GL_UNSIGNED_INT_24_8: number; - GL_DEPTH24_STENCIL8: number; - GL_TEXTURE_STENCIL_SIZE: number; - GL_HALF_FLOAT: number; - GL_RGBA32UI: number; - GL_RGB32UI: number; - GL_RGBA16UI: number; - GL_RGB16UI: number; - GL_RGBA8UI: number; - GL_RGB8UI: number; - GL_RGBA32I: number; - GL_RGB32I: number; - GL_RGBA16I: number; - GL_RGB16I: number; - GL_RGBA8I: number; - GL_RGB8I: number; - GL_RED_INTEGER: number; - GL_GREEN_INTEGER: number; - GL_BLUE_INTEGER: number; - GL_ALPHA_INTEGER: number; - GL_RGB_INTEGER: number; - GL_RGBA_INTEGER: number; - GL_BGR_INTEGER: number; - GL_BGRA_INTEGER: number; - GL_TEXTURE_1D_ARRAY: number; - GL_TEXTURE_2D_ARRAY: number; - GL_PROXY_TEXTURE_2D_ARRAY: number; - GL_PROXY_TEXTURE_1D_ARRAY: number; - GL_TEXTURE_BINDING_1D_ARRAY: number; - GL_TEXTURE_BINDING_2D_ARRAY: number; - GL_MAX_ARRAY_TEXTURE_LAYERS: number; - GL_COMPRESSED_RED_RGTC1: number; - GL_COMPRESSED_SIGNED_RED_RGTC1: number; - GL_COMPRESSED_RG_RGTC2: number; - GL_COMPRESSED_SIGNED_RG_RGTC2: number; - GL_R8: number; - GL_R16: number; - GL_RG8: number; - GL_RG16: number; - GL_R16F: number; - GL_R32F: number; - GL_RG16F: number; - GL_RG32F: number; - GL_R8I: number; - GL_R8UI: number; - GL_R16I: number; - GL_R16UI: number; - GL_R32I: number; - GL_R32UI: number; - GL_RG8I: number; - GL_RG8UI: number; - GL_RG16I: number; - GL_RG16UI: number; - GL_RG32I: number; - GL_RG32UI: number; - GL_RG: number; - GL_COMPRESSED_RED: number; - GL_COMPRESSED_RG: number; - GL_RG_INTEGER: number; - GL_TRANSFORM_FEEDBACK_BUFFER: number; - GL_TRANSFORM_FEEDBACK_BUFFER_START: number; - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: number; - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: number; - GL_INTERLEAVED_ATTRIBS: number; - GL_SEPARATE_ATTRIBS: number; - GL_PRIMITIVES_GENERATED: number; - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: number; - GL_RASTERIZER_DISCARD: number; - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: number; - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: number; - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: number; - GL_TRANSFORM_FEEDBACK_VARYINGS: number; - GL_TRANSFORM_FEEDBACK_BUFFER_MODE: number; - GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: number; - GL_VERTEX_ARRAY_BINDING: number; - GL_FRAMEBUFFER_SRGB: number; - nglGetStringi(p0: number, p1: number): number; - glGetStringi(p0: number, p1: number): string | null | undefined; - nglClearBufferiv(p0: number, p1: number, p2: number): void; - glClearBufferiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glClearBufferiv(p0: number, p1: number, p2: Array): void; - nglClearBufferuiv(p0: number, p1: number, p2: number): void; - glClearBufferuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glClearBufferuiv(p0: number, p1: number, p2: Array): void; - nglClearBufferfv(p0: number, p1: number, p2: number): void; - glClearBufferfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glClearBufferfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glClearBufferfi(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttribI1i(p0: number, p1: number): void; - glVertexAttribI2i(p0: number, p1: number, p2: number): void; - glVertexAttribI3i(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttribI4i(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttribI1ui(p0: number, p1: number): void; - glVertexAttribI2ui(p0: number, p1: number, p2: number): void; - glVertexAttribI3ui(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttribI4ui(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglVertexAttribI1iv(p0: number, p1: number): void; - glVertexAttribI1iv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI1iv(p0: number, p1: Array): void; - nglVertexAttribI2iv(p0: number, p1: number): void; - glVertexAttribI2iv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI2iv(p0: number, p1: Array): void; - nglVertexAttribI3iv(p0: number, p1: number): void; - glVertexAttribI3iv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI3iv(p0: number, p1: Array): void; - nglVertexAttribI4iv(p0: number, p1: number): void; - glVertexAttribI4iv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI4iv(p0: number, p1: Array): void; - nglVertexAttribI1uiv(p0: number, p1: number): void; - glVertexAttribI1uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI1uiv(p0: number, p1: Array): void; - nglVertexAttribI2uiv(p0: number, p1: number): void; - glVertexAttribI2uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI2uiv(p0: number, p1: Array): void; - nglVertexAttribI3uiv(p0: number, p1: number): void; - glVertexAttribI3uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI3uiv(p0: number, p1: Array): void; - nglVertexAttribI4uiv(p0: number, p1: number): void; - glVertexAttribI4uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexAttribI4uiv(p0: number, p1: Array): void; - nglVertexAttribI4bv(p0: number, p1: number): void; - glVertexAttribI4bv(p0: number, p1: java.nio.ByteBuffer): void; - nglVertexAttribI4sv(p0: number, p1: number): void; - glVertexAttribI4sv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttribI4sv(p0: number, p1: Array): void; - nglVertexAttribI4ubv(p0: number, p1: number): void; - glVertexAttribI4ubv(p0: number, p1: java.nio.ByteBuffer): void; - nglVertexAttribI4usv(p0: number, p1: number): void; - glVertexAttribI4usv(p0: number, p1: java.nio.ShortBuffer): void; - glVertexAttribI4usv(p0: number, p1: Array): void; - nglVertexAttribIPointer(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttribIPointer(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glVertexAttribIPointer(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttribIPointer(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer): void; - glVertexAttribIPointer(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer): void; - nglGetVertexAttribIiv(p0: number, p1: number, p2: number): void; - glGetVertexAttribIiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetVertexAttribIiv(p0: number, p1: number, p2: Array): void; - glGetVertexAttribIi(p0: number, p1: number): number; - nglGetVertexAttribIuiv(p0: number, p1: number, p2: number): void; - glGetVertexAttribIuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetVertexAttribIuiv(p0: number, p1: number, p2: Array): void; - glGetVertexAttribIui(p0: number, p1: number): number; - glUniform1ui(p0: number, p1: number): void; - glUniform2ui(p0: number, p1: number, p2: number): void; - glUniform3ui(p0: number, p1: number, p2: number, p3: number): void; - glUniform4ui(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglUniform1uiv(p0: number, p1: number, p2: number): void; - glUniform1uiv(p0: number, p1: java.nio.IntBuffer): void; - glUniform1uiv(p0: number, p1: Array): void; - nglUniform2uiv(p0: number, p1: number, p2: number): void; - glUniform2uiv(p0: number, p1: java.nio.IntBuffer): void; - glUniform2uiv(p0: number, p1: Array): void; - nglUniform3uiv(p0: number, p1: number, p2: number): void; - glUniform3uiv(p0: number, p1: java.nio.IntBuffer): void; - glUniform3uiv(p0: number, p1: Array): void; - nglUniform4uiv(p0: number, p1: number, p2: number): void; - glUniform4uiv(p0: number, p1: java.nio.IntBuffer): void; - glUniform4uiv(p0: number, p1: Array): void; - nglGetUniformuiv(p0: number, p1: number, p2: number): void; - glGetUniformuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetUniformuiv(p0: number, p1: number, p2: Array): void; - glGetUniformui(p0: number, p1: number): number; - nglBindFragDataLocation(p0: number, p1: number, p2: number): void; - glBindFragDataLocation(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glBindFragDataLocation(p0: number, p1: number, p2: kotlin.CharSequence): void; - nglGetFragDataLocation(p0: number, p1: number): number; - glGetFragDataLocation(p0: number, p1: java.nio.ByteBuffer): number; - glGetFragDataLocation(p0: number, p1: kotlin.CharSequence): number; - glBeginConditionalRender(p0: number, p1: number): void; - glEndConditionalRender(): void; - nglMapBufferRange(p0: number, p1: number, p2: number, p3: number): number; - glMapBufferRange(p0: number, p1: number, p2: number, p3: number): java.nio.ByteBuffer | null | undefined; - glMapBufferRange(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer | null | undefined): java.nio.ByteBuffer | null | undefined; - glFlushMappedBufferRange(p0: number, p1: number, p2: number): void; - glClampColor(p0: number, p1: number): void; - glIsRenderbuffer(p0: number): boolean; - glBindRenderbuffer(p0: number, p1: number): void; - nglDeleteRenderbuffers(p0: number, p1: number): void; - glDeleteRenderbuffers(p0: java.nio.IntBuffer): void; - glDeleteRenderbuffers(p0: number): void; - glDeleteRenderbuffers(p0: Array): void; - nglGenRenderbuffers(p0: number, p1: number): void; - glGenRenderbuffers(p0: java.nio.IntBuffer): void; - glGenRenderbuffers(): number; - glGenRenderbuffers(p0: Array): void; - glRenderbufferStorage(p0: number, p1: number, p2: number, p3: number): void; - glRenderbufferStorageMultisample(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglGetRenderbufferParameteriv(p0: number, p1: number, p2: number): void; - glGetRenderbufferParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetRenderbufferParameteriv(p0: number, p1: number, p2: Array): void; - glGetRenderbufferParameteri(p0: number, p1: number): number; - glIsFramebuffer(p0: number): boolean; - glBindFramebuffer(p0: number, p1: number): void; - nglDeleteFramebuffers(p0: number, p1: number): void; - glDeleteFramebuffers(p0: java.nio.IntBuffer): void; - glDeleteFramebuffers(p0: number): void; - glDeleteFramebuffers(p0: Array): void; - nglGenFramebuffers(p0: number, p1: number): void; - glGenFramebuffers(p0: java.nio.IntBuffer): void; - glGenFramebuffers(): number; - glGenFramebuffers(p0: Array): void; - glCheckFramebufferStatus(p0: number): number; - glFramebufferTexture1D(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glFramebufferTexture2D(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glFramebufferTexture3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glFramebufferTextureLayer(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glFramebufferRenderbuffer(p0: number, p1: number, p2: number, p3: number): void; - nglGetFramebufferAttachmentParameteriv(p0: number, p1: number, p2: number, p3: number): void; - glGetFramebufferAttachmentParameteriv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetFramebufferAttachmentParameteriv(p0: number, p1: number, p2: number, p3: Array): void; - glGetFramebufferAttachmentParameteri(p0: number, p1: number, p2: number): number; - glBlitFramebuffer(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): void; - glGenerateMipmap(p0: number): void; - nglTexParameterIiv(p0: number, p1: number, p2: number): void; - glTexParameterIiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTexParameterIiv(p0: number, p1: number, p2: Array): void; - glTexParameterIi(p0: number, p1: number, p2: number): void; - nglTexParameterIuiv(p0: number, p1: number, p2: number): void; - glTexParameterIuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTexParameterIuiv(p0: number, p1: number, p2: Array): void; - glTexParameterIui(p0: number, p1: number, p2: number): void; - nglGetTexParameterIiv(p0: number, p1: number, p2: number): void; - glGetTexParameterIiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTexParameterIiv(p0: number, p1: number, p2: Array): void; - glGetTexParameterIi(p0: number, p1: number): number; - nglGetTexParameterIuiv(p0: number, p1: number, p2: number): void; - glGetTexParameterIuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTexParameterIuiv(p0: number, p1: number, p2: Array): void; - glGetTexParameterIui(p0: number, p1: number): number; - glColorMaski(p0: number, p1: boolean, p2: boolean, p3: boolean, p4: boolean): void; - nglGetBooleani_v(p0: number, p1: number, p2: number): void; - glGetBooleani_v(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glGetBooleani(p0: number, p1: number): boolean; - nglGetIntegeri_v(p0: number, p1: number, p2: number): void; - glGetIntegeri_v(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetIntegeri_v(p0: number, p1: number, p2: Array): void; - glGetIntegeri(p0: number, p1: number): number; - glEnablei(p0: number, p1: number): void; - glDisablei(p0: number, p1: number): void; - glIsEnabledi(p0: number, p1: number): boolean; - glBindBufferRange(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glBindBufferBase(p0: number, p1: number, p2: number): void; - glBeginTransformFeedback(p0: number): void; - glEndTransformFeedback(): void; - nglTransformFeedbackVaryings(p0: number, p1: number, p2: number, p3: number): void; - glTransformFeedbackVaryings(p0: number, p1: org.lwjgl.PointerBuffer, p2: number): void; - glTransformFeedbackVaryings(p0: number, p1: Array, p2: number): void; - glTransformFeedbackVaryings(p0: number, p1: kotlin.CharSequence, p2: number): void; - nglGetTransformFeedbackVarying(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glGetTransformFeedbackVarying(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.IntBuffer, p4: java.nio.IntBuffer, p5: java.nio.ByteBuffer): void; - glGetTransformFeedbackVarying(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer, p4: java.nio.IntBuffer): string; - glGetTransformFeedbackVarying(p0: number, p1: number, p2: java.nio.IntBuffer, p3: java.nio.IntBuffer): string; - glGetTransformFeedbackVarying(p0: number, p1: number, p2: Array, p3: Array, p4: Array, p5: java.nio.ByteBuffer): void; - glBindVertexArray(p0: number): void; - nglDeleteVertexArrays(p0: number, p1: number): void; - glDeleteVertexArrays(p0: java.nio.IntBuffer): void; - glDeleteVertexArrays(p0: number): void; - glDeleteVertexArrays(p0: Array): void; - nglGenVertexArrays(p0: number, p1: number): void; - glGenVertexArrays(p0: java.nio.IntBuffer): void; - glGenVertexArrays(): number; - glGenVertexArrays(p0: Array): void; - glIsVertexArray(p0: number): boolean; - } - interface GL30 extends org.lwjgl.opengl.GL21 { - } - const GL31: { - GL_R8_SNORM: number; - GL_RG8_SNORM: number; - GL_RGB8_SNORM: number; - GL_RGBA8_SNORM: number; - GL_R16_SNORM: number; - GL_RG16_SNORM: number; - GL_RGB16_SNORM: number; - GL_RGBA16_SNORM: number; - GL_SIGNED_NORMALIZED: number; - GL_SAMPLER_BUFFER: number; - GL_INT_SAMPLER_2D_RECT: number; - GL_INT_SAMPLER_BUFFER: number; - GL_UNSIGNED_INT_SAMPLER_2D_RECT: number; - GL_UNSIGNED_INT_SAMPLER_BUFFER: number; - GL_COPY_READ_BUFFER: number; - GL_COPY_WRITE_BUFFER: number; - GL_PRIMITIVE_RESTART: number; - GL_PRIMITIVE_RESTART_INDEX: number; - GL_TEXTURE_BUFFER: number; - GL_MAX_TEXTURE_BUFFER_SIZE: number; - GL_TEXTURE_BINDING_BUFFER: number; - GL_TEXTURE_BUFFER_DATA_STORE_BINDING: number; - GL_TEXTURE_RECTANGLE: number; - GL_TEXTURE_BINDING_RECTANGLE: number; - GL_PROXY_TEXTURE_RECTANGLE: number; - GL_MAX_RECTANGLE_TEXTURE_SIZE: number; - GL_SAMPLER_2D_RECT: number; - GL_SAMPLER_2D_RECT_SHADOW: number; - GL_UNIFORM_BUFFER: number; - GL_UNIFORM_BUFFER_BINDING: number; - GL_UNIFORM_BUFFER_START: number; - GL_UNIFORM_BUFFER_SIZE: number; - GL_MAX_VERTEX_UNIFORM_BLOCKS: number; - GL_MAX_GEOMETRY_UNIFORM_BLOCKS: number; - GL_MAX_FRAGMENT_UNIFORM_BLOCKS: number; - GL_MAX_COMBINED_UNIFORM_BLOCKS: number; - GL_MAX_UNIFORM_BUFFER_BINDINGS: number; - GL_MAX_UNIFORM_BLOCK_SIZE: number; - GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: number; - GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS: number; - GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: number; - GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: number; - GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: number; - GL_ACTIVE_UNIFORM_BLOCKS: number; - GL_UNIFORM_TYPE: number; - GL_UNIFORM_SIZE: number; - GL_UNIFORM_NAME_LENGTH: number; - GL_UNIFORM_BLOCK_INDEX: number; - GL_UNIFORM_OFFSET: number; - GL_UNIFORM_ARRAY_STRIDE: number; - GL_UNIFORM_MATRIX_STRIDE: number; - GL_UNIFORM_IS_ROW_MAJOR: number; - GL_UNIFORM_BLOCK_BINDING: number; - GL_UNIFORM_BLOCK_DATA_SIZE: number; - GL_UNIFORM_BLOCK_NAME_LENGTH: number; - GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: number; - GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: number; - GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: number; - GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER: number; - GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: number; - GL_INVALID_INDEX: number; - glDrawArraysInstanced(p0: number, p1: number, p2: number, p3: number): void; - nglDrawElementsInstanced(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glDrawElementsInstanced(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glDrawElementsInstanced(p0: number, p1: number, p2: java.nio.ByteBuffer, p3: number): void; - glDrawElementsInstanced(p0: number, p1: java.nio.ByteBuffer, p2: number): void; - glDrawElementsInstanced(p0: number, p1: java.nio.ShortBuffer, p2: number): void; - glDrawElementsInstanced(p0: number, p1: java.nio.IntBuffer, p2: number): void; - glCopyBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glPrimitiveRestartIndex(p0: number): void; - glTexBuffer(p0: number, p1: number, p2: number): void; - nglGetUniformIndices(p0: number, p1: number, p2: number, p3: number): void; - glGetUniformIndices(p0: number, p1: org.lwjgl.PointerBuffer, p2: java.nio.IntBuffer): void; - glGetUniformIndices(p0: number, p1: Array, p2: java.nio.IntBuffer): void; - glGetUniformIndices(p0: number, p1: kotlin.CharSequence): number; - glGetUniformIndices(p0: number, p1: org.lwjgl.PointerBuffer, p2: Array): void; - nglGetActiveUniformsiv(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetActiveUniformsiv(p0: number, p1: java.nio.IntBuffer, p2: number, p3: java.nio.IntBuffer): void; - glGetActiveUniformsiv(p0: number, p1: Array, p2: number, p3: Array): void; - glGetActiveUniformsi(p0: number, p1: number, p2: number): number; - nglGetActiveUniformName(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetActiveUniformName(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.ByteBuffer): void; - glGetActiveUniformName(p0: number, p1: number, p2: number): string; - glGetActiveUniformName(p0: number, p1: number): string; - glGetActiveUniformName(p0: number, p1: number, p2: Array, p3: java.nio.ByteBuffer): void; - nglGetUniformBlockIndex(p0: number, p1: number): number; - glGetUniformBlockIndex(p0: number, p1: java.nio.ByteBuffer): number; - glGetUniformBlockIndex(p0: number, p1: kotlin.CharSequence): number; - nglGetActiveUniformBlockiv(p0: number, p1: number, p2: number, p3: number): void; - glGetActiveUniformBlockiv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetActiveUniformBlockiv(p0: number, p1: number, p2: number, p3: Array): void; - glGetActiveUniformBlocki(p0: number, p1: number, p2: number): number; - nglGetActiveUniformBlockName(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetActiveUniformBlockName(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.ByteBuffer): void; - glGetActiveUniformBlockName(p0: number, p1: number, p2: number): string; - glGetActiveUniformBlockName(p0: number, p1: number): string; - glGetActiveUniformBlockName(p0: number, p1: number, p2: Array, p3: java.nio.ByteBuffer): void; - glUniformBlockBinding(p0: number, p1: number, p2: number): void; - } - interface GL31 extends org.lwjgl.opengl.GL30 { - } - const GL32: { - GL_CONTEXT_PROFILE_MASK: number; - GL_CONTEXT_CORE_PROFILE_BIT: number; - GL_CONTEXT_COMPATIBILITY_PROFILE_BIT: number; - GL_MAX_VERTEX_OUTPUT_COMPONENTS: number; - GL_MAX_GEOMETRY_INPUT_COMPONENTS: number; - GL_MAX_GEOMETRY_OUTPUT_COMPONENTS: number; - GL_MAX_FRAGMENT_INPUT_COMPONENTS: number; - GL_FIRST_VERTEX_CONVENTION: number; - GL_LAST_VERTEX_CONVENTION: number; - GL_PROVOKING_VERTEX: number; - GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: number; - GL_TEXTURE_CUBE_MAP_SEAMLESS: number; - GL_SAMPLE_POSITION: number; - GL_SAMPLE_MASK: number; - GL_SAMPLE_MASK_VALUE: number; - GL_TEXTURE_2D_MULTISAMPLE: number; - GL_PROXY_TEXTURE_2D_MULTISAMPLE: number; - GL_TEXTURE_2D_MULTISAMPLE_ARRAY: number; - GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY: number; - GL_MAX_SAMPLE_MASK_WORDS: number; - GL_MAX_COLOR_TEXTURE_SAMPLES: number; - GL_MAX_DEPTH_TEXTURE_SAMPLES: number; - GL_MAX_INTEGER_SAMPLES: number; - GL_TEXTURE_BINDING_2D_MULTISAMPLE: number; - GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: number; - GL_TEXTURE_SAMPLES: number; - GL_TEXTURE_FIXED_SAMPLE_LOCATIONS: number; - GL_SAMPLER_2D_MULTISAMPLE: number; - GL_INT_SAMPLER_2D_MULTISAMPLE: number; - GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: number; - GL_SAMPLER_2D_MULTISAMPLE_ARRAY: number; - GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: number; - GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: number; - GL_DEPTH_CLAMP: number; - GL_GEOMETRY_SHADER: number; - GL_GEOMETRY_VERTICES_OUT: number; - GL_GEOMETRY_INPUT_TYPE: number; - GL_GEOMETRY_OUTPUT_TYPE: number; - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS: number; - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS: number; - GL_MAX_GEOMETRY_OUTPUT_VERTICES: number; - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: number; - GL_LINES_ADJACENCY: number; - GL_LINE_STRIP_ADJACENCY: number; - GL_TRIANGLES_ADJACENCY: number; - GL_TRIANGLE_STRIP_ADJACENCY: number; - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: number; - GL_FRAMEBUFFER_ATTACHMENT_LAYERED: number; - GL_PROGRAM_POINT_SIZE: number; - GL_MAX_SERVER_WAIT_TIMEOUT: number; - GL_OBJECT_TYPE: number; - GL_SYNC_CONDITION: number; - GL_SYNC_STATUS: number; - GL_SYNC_FLAGS: number; - GL_SYNC_FENCE: number; - GL_SYNC_GPU_COMMANDS_COMPLETE: number; - GL_UNSIGNALED: number; - GL_SIGNALED: number; - GL_SYNC_FLUSH_COMMANDS_BIT: number; - GL_TIMEOUT_IGNORED: number; - GL_ALREADY_SIGNALED: number; - GL_TIMEOUT_EXPIRED: number; - GL_CONDITION_SATISFIED: number; - GL_WAIT_FAILED: number; - nglGetBufferParameteri64v(p0: number, p1: number, p2: number): void; - glGetBufferParameteri64v(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glGetBufferParameteri64v(p0: number, p1: number, p2: Array): void; - glGetBufferParameteri64(p0: number, p1: number): number; - nglDrawElementsBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glDrawElementsBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glDrawElementsBaseVertex(p0: number, p1: number, p2: java.nio.ByteBuffer, p3: number): void; - glDrawElementsBaseVertex(p0: number, p1: java.nio.ByteBuffer, p2: number): void; - glDrawElementsBaseVertex(p0: number, p1: java.nio.ShortBuffer, p2: number): void; - glDrawElementsBaseVertex(p0: number, p1: java.nio.IntBuffer, p2: number): void; - nglDrawRangeElementsBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glDrawRangeElementsBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glDrawRangeElementsBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer, p5: number): void; - glDrawRangeElementsBaseVertex(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer, p4: number): void; - glDrawRangeElementsBaseVertex(p0: number, p1: number, p2: number, p3: java.nio.ShortBuffer, p4: number): void; - glDrawRangeElementsBaseVertex(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer, p4: number): void; - nglDrawElementsInstancedBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDrawElementsInstancedBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDrawElementsInstancedBaseVertex(p0: number, p1: number, p2: java.nio.ByteBuffer, p3: number, p4: number): void; - glDrawElementsInstancedBaseVertex(p0: number, p1: java.nio.ByteBuffer, p2: number, p3: number): void; - glDrawElementsInstancedBaseVertex(p0: number, p1: java.nio.ShortBuffer, p2: number, p3: number): void; - glDrawElementsInstancedBaseVertex(p0: number, p1: java.nio.IntBuffer, p2: number, p3: number): void; - nglMultiDrawElementsBaseVertex(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glMultiDrawElementsBaseVertex(p0: number, p1: java.nio.IntBuffer, p2: number, p3: org.lwjgl.PointerBuffer, p4: java.nio.IntBuffer): void; - glMultiDrawElementsBaseVertex(p0: number, p1: Array, p2: number, p3: org.lwjgl.PointerBuffer, p4: Array): void; - glProvokingVertex(p0: number): void; - glTexImage2DMultisample(p0: number, p1: number, p2: number, p3: number, p4: number, p5: boolean): void; - glTexImage3DMultisample(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: boolean): void; - nglGetMultisamplefv(p0: number, p1: number, p2: number): void; - glGetMultisamplefv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetMultisamplefv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetMultisamplef(p0: number, p1: number): number; - glSampleMaski(p0: number, p1: number): void; - glFramebufferTexture(p0: number, p1: number, p2: number, p3: number): void; - glFenceSync(p0: number, p1: number): number; - nglIsSync(p0: number): boolean; - glIsSync(p0: number): boolean; - glDeleteSync(p0: number): void; - nglClientWaitSync(p0: number, p1: number, p2: number): number; - glClientWaitSync(p0: number, p1: number, p2: number): number; - nglWaitSync(p0: number, p1: number, p2: number): void; - glWaitSync(p0: number, p1: number, p2: number): void; - nglGetInteger64v(p0: number, p1: number): void; - glGetInteger64v(p0: number, p1: java.nio.LongBuffer): void; - glGetInteger64v(p0: number, p1: Array): void; - glGetInteger64(p0: number): number; - nglGetInteger64i_v(p0: number, p1: number, p2: number): void; - glGetInteger64i_v(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glGetInteger64i_v(p0: number, p1: number, p2: Array): void; - glGetInteger64i(p0: number, p1: number): number; - nglGetSynciv(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetSynciv(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.IntBuffer): void; - glGetSynciv(p0: number, p1: number, p2: Array, p3: Array): void; - glGetSynci(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined): number; - } - interface GL32 extends org.lwjgl.opengl.GL31 { - } - const GL33: { - GL_SRC1_COLOR: number; - GL_ONE_MINUS_SRC1_COLOR: number; - GL_ONE_MINUS_SRC1_ALPHA: number; - GL_MAX_DUAL_SOURCE_DRAW_BUFFERS: number; - GL_ANY_SAMPLES_PASSED: number; - GL_SAMPLER_BINDING: number; - GL_RGB10_A2UI: number; - GL_TEXTURE_SWIZZLE_R: number; - GL_TEXTURE_SWIZZLE_G: number; - GL_TEXTURE_SWIZZLE_B: number; - GL_TEXTURE_SWIZZLE_A: number; - GL_TEXTURE_SWIZZLE_RGBA: number; - GL_TIME_ELAPSED: number; - GL_TIMESTAMP: number; - GL_VERTEX_ATTRIB_ARRAY_DIVISOR: number; - GL_INT_2_10_10_10_REV: number; - nglBindFragDataLocationIndexed(p0: number, p1: number, p2: number, p3: number): void; - glBindFragDataLocationIndexed(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - glBindFragDataLocationIndexed(p0: number, p1: number, p2: number, p3: kotlin.CharSequence): void; - nglGetFragDataIndex(p0: number, p1: number): number; - glGetFragDataIndex(p0: number, p1: java.nio.ByteBuffer): number; - glGetFragDataIndex(p0: number, p1: kotlin.CharSequence): number; - nglGenSamplers(p0: number, p1: number): void; - glGenSamplers(p0: java.nio.IntBuffer): void; - glGenSamplers(): number; - glGenSamplers(p0: Array): void; - nglDeleteSamplers(p0: number, p1: number): void; - glDeleteSamplers(p0: java.nio.IntBuffer): void; - glDeleteSamplers(p0: number): void; - glDeleteSamplers(p0: Array): void; - glIsSampler(p0: number): boolean; - glBindSampler(p0: number, p1: number): void; - glSamplerParameteri(p0: number, p1: number, p2: number): void; - glSamplerParameterf(p0: number, p1: number, p2: number): void; - nglSamplerParameteriv(p0: number, p1: number, p2: number): void; - glSamplerParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glSamplerParameteriv(p0: number, p1: number, p2: Array): void; - nglSamplerParameterfv(p0: number, p1: number, p2: number): void; - glSamplerParameterfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glSamplerParameterfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglSamplerParameterIiv(p0: number, p1: number, p2: number): void; - glSamplerParameterIiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glSamplerParameterIiv(p0: number, p1: number, p2: Array): void; - nglSamplerParameterIuiv(p0: number, p1: number, p2: number): void; - glSamplerParameterIuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glSamplerParameterIuiv(p0: number, p1: number, p2: Array): void; - nglGetSamplerParameteriv(p0: number, p1: number, p2: number): void; - glGetSamplerParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetSamplerParameteriv(p0: number, p1: number, p2: Array): void; - glGetSamplerParameteri(p0: number, p1: number): number; - nglGetSamplerParameterfv(p0: number, p1: number, p2: number): void; - glGetSamplerParameterfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetSamplerParameterfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetSamplerParameterf(p0: number, p1: number): number; - nglGetSamplerParameterIiv(p0: number, p1: number, p2: number): void; - glGetSamplerParameterIiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetSamplerParameterIiv(p0: number, p1: number, p2: Array): void; - glGetSamplerParameterIi(p0: number, p1: number): number; - nglGetSamplerParameterIuiv(p0: number, p1: number, p2: number): void; - glGetSamplerParameterIuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetSamplerParameterIuiv(p0: number, p1: number, p2: Array): void; - glGetSamplerParameterIui(p0: number, p1: number): number; - glQueryCounter(p0: number, p1: number): void; - nglGetQueryObjecti64v(p0: number, p1: number, p2: number): void; - glGetQueryObjecti64v(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glGetQueryObjecti64v(p0: number, p1: number, p2: number): void; - glGetQueryObjecti64v(p0: number, p1: number, p2: Array): void; - glGetQueryObjecti64(p0: number, p1: number): number; - nglGetQueryObjectui64v(p0: number, p1: number, p2: number): void; - glGetQueryObjectui64v(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glGetQueryObjectui64v(p0: number, p1: number, p2: number): void; - glGetQueryObjectui64v(p0: number, p1: number, p2: Array): void; - glGetQueryObjectui64(p0: number, p1: number): number; - glVertexAttribDivisor(p0: number, p1: number): void; - glVertexP2ui(p0: number, p1: number): void; - glVertexP3ui(p0: number, p1: number): void; - glVertexP4ui(p0: number, p1: number): void; - nglVertexP2uiv(p0: number, p1: number): void; - glVertexP2uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexP2uiv(p0: number, p1: Array): void; - nglVertexP3uiv(p0: number, p1: number): void; - glVertexP3uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexP3uiv(p0: number, p1: Array): void; - nglVertexP4uiv(p0: number, p1: number): void; - glVertexP4uiv(p0: number, p1: java.nio.IntBuffer): void; - glVertexP4uiv(p0: number, p1: Array): void; - glTexCoordP1ui(p0: number, p1: number): void; - glTexCoordP2ui(p0: number, p1: number): void; - glTexCoordP3ui(p0: number, p1: number): void; - glTexCoordP4ui(p0: number, p1: number): void; - nglTexCoordP1uiv(p0: number, p1: number): void; - glTexCoordP1uiv(p0: number, p1: java.nio.IntBuffer): void; - glTexCoordP1uiv(p0: number, p1: Array): void; - nglTexCoordP2uiv(p0: number, p1: number): void; - glTexCoordP2uiv(p0: number, p1: java.nio.IntBuffer): void; - glTexCoordP2uiv(p0: number, p1: Array): void; - nglTexCoordP3uiv(p0: number, p1: number): void; - glTexCoordP3uiv(p0: number, p1: java.nio.IntBuffer): void; - glTexCoordP3uiv(p0: number, p1: Array): void; - nglTexCoordP4uiv(p0: number, p1: number): void; - glTexCoordP4uiv(p0: number, p1: java.nio.IntBuffer): void; - glTexCoordP4uiv(p0: number, p1: Array): void; - glMultiTexCoordP1ui(p0: number, p1: number, p2: number): void; - glMultiTexCoordP2ui(p0: number, p1: number, p2: number): void; - glMultiTexCoordP3ui(p0: number, p1: number, p2: number): void; - glMultiTexCoordP4ui(p0: number, p1: number, p2: number): void; - nglMultiTexCoordP1uiv(p0: number, p1: number, p2: number): void; - glMultiTexCoordP1uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glMultiTexCoordP1uiv(p0: number, p1: number, p2: Array): void; - nglMultiTexCoordP2uiv(p0: number, p1: number, p2: number): void; - glMultiTexCoordP2uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glMultiTexCoordP2uiv(p0: number, p1: number, p2: Array): void; - nglMultiTexCoordP3uiv(p0: number, p1: number, p2: number): void; - glMultiTexCoordP3uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glMultiTexCoordP3uiv(p0: number, p1: number, p2: Array): void; - nglMultiTexCoordP4uiv(p0: number, p1: number, p2: number): void; - glMultiTexCoordP4uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glMultiTexCoordP4uiv(p0: number, p1: number, p2: Array): void; - glNormalP3ui(p0: number, p1: number): void; - nglNormalP3uiv(p0: number, p1: number): void; - glNormalP3uiv(p0: number, p1: java.nio.IntBuffer): void; - glNormalP3uiv(p0: number, p1: Array): void; - glColorP3ui(p0: number, p1: number): void; - glColorP4ui(p0: number, p1: number): void; - nglColorP3uiv(p0: number, p1: number): void; - glColorP3uiv(p0: number, p1: java.nio.IntBuffer): void; - glColorP3uiv(p0: number, p1: Array): void; - nglColorP4uiv(p0: number, p1: number): void; - glColorP4uiv(p0: number, p1: java.nio.IntBuffer): void; - glColorP4uiv(p0: number, p1: Array): void; - glSecondaryColorP3ui(p0: number, p1: number): void; - nglSecondaryColorP3uiv(p0: number, p1: number): void; - glSecondaryColorP3uiv(p0: number, p1: java.nio.IntBuffer): void; - glSecondaryColorP3uiv(p0: number, p1: Array): void; - glVertexAttribP1ui(p0: number, p1: number, p2: boolean, p3: number): void; - glVertexAttribP2ui(p0: number, p1: number, p2: boolean, p3: number): void; - glVertexAttribP3ui(p0: number, p1: number, p2: boolean, p3: number): void; - glVertexAttribP4ui(p0: number, p1: number, p2: boolean, p3: number): void; - nglVertexAttribP1uiv(p0: number, p1: number, p2: boolean, p3: number): void; - glVertexAttribP1uiv(p0: number, p1: number, p2: boolean, p3: java.nio.IntBuffer): void; - glVertexAttribP1uiv(p0: number, p1: number, p2: boolean, p3: Array): void; - nglVertexAttribP2uiv(p0: number, p1: number, p2: boolean, p3: number): void; - glVertexAttribP2uiv(p0: number, p1: number, p2: boolean, p3: java.nio.IntBuffer): void; - glVertexAttribP2uiv(p0: number, p1: number, p2: boolean, p3: Array): void; - nglVertexAttribP3uiv(p0: number, p1: number, p2: boolean, p3: number): void; - glVertexAttribP3uiv(p0: number, p1: number, p2: boolean, p3: java.nio.IntBuffer): void; - glVertexAttribP3uiv(p0: number, p1: number, p2: boolean, p3: Array): void; - nglVertexAttribP4uiv(p0: number, p1: number, p2: boolean, p3: number): void; - glVertexAttribP4uiv(p0: number, p1: number, p2: boolean, p3: java.nio.IntBuffer): void; - glVertexAttribP4uiv(p0: number, p1: number, p2: boolean, p3: Array): void; - } - interface GL33 extends org.lwjgl.opengl.GL32 { - } - const GL40: { - GL_DRAW_INDIRECT_BUFFER: number; - GL_DRAW_INDIRECT_BUFFER_BINDING: number; - GL_GEOMETRY_SHADER_INVOCATIONS: number; - GL_MAX_GEOMETRY_SHADER_INVOCATIONS: number; - GL_MIN_FRAGMENT_INTERPOLATION_OFFSET: number; - GL_MAX_FRAGMENT_INTERPOLATION_OFFSET: number; - GL_FRAGMENT_INTERPOLATION_OFFSET_BITS: number; - GL_DOUBLE_VEC2: number; - GL_DOUBLE_VEC3: number; - GL_DOUBLE_VEC4: number; - GL_DOUBLE_MAT2: number; - GL_DOUBLE_MAT3: number; - GL_DOUBLE_MAT4: number; - GL_DOUBLE_MAT2x3: number; - GL_DOUBLE_MAT2x4: number; - GL_DOUBLE_MAT3x2: number; - GL_DOUBLE_MAT3x4: number; - GL_DOUBLE_MAT4x2: number; - GL_DOUBLE_MAT4x3: number; - GL_SAMPLE_SHADING: number; - GL_MIN_SAMPLE_SHADING_VALUE: number; - GL_ACTIVE_SUBROUTINES: number; - GL_ACTIVE_SUBROUTINE_UNIFORMS: number; - GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS: number; - GL_ACTIVE_SUBROUTINE_MAX_LENGTH: number; - GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH: number; - GL_MAX_SUBROUTINES: number; - GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS: number; - GL_NUM_COMPATIBLE_SUBROUTINES: number; - GL_COMPATIBLE_SUBROUTINES: number; - GL_PATCHES: number; - GL_PATCH_VERTICES: number; - GL_PATCH_DEFAULT_INNER_LEVEL: number; - GL_PATCH_DEFAULT_OUTER_LEVEL: number; - GL_TESS_CONTROL_OUTPUT_VERTICES: number; - GL_TESS_GEN_MODE: number; - GL_TESS_GEN_SPACING: number; - GL_TESS_GEN_VERTEX_ORDER: number; - GL_TESS_GEN_POINT_MODE: number; - GL_ISOLINES: number; - GL_FRACTIONAL_ODD: number; - GL_FRACTIONAL_EVEN: number; - GL_MAX_PATCH_VERTICES: number; - GL_MAX_TESS_GEN_LEVEL: number; - GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS: number; - GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS: number; - GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS: number; - GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS: number; - GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS: number; - GL_MAX_TESS_PATCH_COMPONENTS: number; - GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS: number; - GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS: number; - GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS: number; - GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS: number; - GL_MAX_TESS_CONTROL_INPUT_COMPONENTS: number; - GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS: number; - GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS: number; - GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS: number; - GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER: number; - GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER: number; - GL_TESS_EVALUATION_SHADER: number; - GL_TESS_CONTROL_SHADER: number; - GL_TEXTURE_CUBE_MAP_ARRAY: number; - GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: number; - GL_PROXY_TEXTURE_CUBE_MAP_ARRAY: number; - GL_SAMPLER_CUBE_MAP_ARRAY: number; - GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: number; - GL_INT_SAMPLER_CUBE_MAP_ARRAY: number; - GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: number; - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET: number; - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET: number; - GL_TRANSFORM_FEEDBACK: number; - GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED: number; - GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE: number; - GL_TRANSFORM_FEEDBACK_BINDING: number; - GL_MAX_TRANSFORM_FEEDBACK_BUFFERS: number; - GL_MAX_VERTEX_STREAMS: number; - glBlendEquationi(p0: number, p1: number): void; - glBlendEquationSeparatei(p0: number, p1: number, p2: number): void; - glBlendFunci(p0: number, p1: number, p2: number): void; - glBlendFuncSeparatei(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglDrawArraysIndirect(p0: number, p1: number): void; - glDrawArraysIndirect(p0: number, p1: java.nio.ByteBuffer): void; - glDrawArraysIndirect(p0: number, p1: number): void; - glDrawArraysIndirect(p0: number, p1: java.nio.IntBuffer): void; - glDrawArraysIndirect(p0: number, p1: Array): void; - nglDrawElementsIndirect(p0: number, p1: number, p2: number): void; - glDrawElementsIndirect(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glDrawElementsIndirect(p0: number, p1: number, p2: number): void; - glDrawElementsIndirect(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glDrawElementsIndirect(p0: number, p1: number, p2: Array): void; - glUniform1d(p0: number, p1: number): void; - glUniform2d(p0: number, p1: number, p2: number): void; - glUniform3d(p0: number, p1: number, p2: number, p3: number): void; - glUniform4d(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglUniform1dv(p0: number, p1: number, p2: number): void; - glUniform1dv(p0: number, p1: java.nio.DoubleBuffer): void; - glUniform1dv(p0: number, p1: kotlin.DoubleArray): void; - nglUniform2dv(p0: number, p1: number, p2: number): void; - glUniform2dv(p0: number, p1: java.nio.DoubleBuffer): void; - glUniform2dv(p0: number, p1: kotlin.DoubleArray): void; - nglUniform3dv(p0: number, p1: number, p2: number): void; - glUniform3dv(p0: number, p1: java.nio.DoubleBuffer): void; - glUniform3dv(p0: number, p1: kotlin.DoubleArray): void; - nglUniform4dv(p0: number, p1: number, p2: number): void; - glUniform4dv(p0: number, p1: java.nio.DoubleBuffer): void; - glUniform4dv(p0: number, p1: kotlin.DoubleArray): void; - nglUniformMatrix2dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix2dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix2dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix3dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix3dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix3dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix4dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix4dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix4dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix2x3dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix2x3dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix2x3dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix2x4dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix2x4dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix2x4dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix3x2dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix3x2dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix3x2dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix3x4dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix3x4dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix3x4dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix4x2dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix4x2dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix4x2dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglUniformMatrix4x3dv(p0: number, p1: number, p2: boolean, p3: number): void; - glUniformMatrix4x3dv(p0: number, p1: boolean, p2: java.nio.DoubleBuffer): void; - glUniformMatrix4x3dv(p0: number, p1: boolean, p2: kotlin.DoubleArray): void; - nglGetUniformdv(p0: number, p1: number, p2: number): void; - glGetUniformdv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetUniformdv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glGetUniformd(p0: number, p1: number): number; - glMinSampleShading(p0: number): void; - nglGetSubroutineUniformLocation(p0: number, p1: number, p2: number): number; - glGetSubroutineUniformLocation(p0: number, p1: number, p2: java.nio.ByteBuffer): number; - glGetSubroutineUniformLocation(p0: number, p1: number, p2: kotlin.CharSequence): number; - nglGetSubroutineIndex(p0: number, p1: number, p2: number): number; - glGetSubroutineIndex(p0: number, p1: number, p2: java.nio.ByteBuffer): number; - glGetSubroutineIndex(p0: number, p1: number, p2: kotlin.CharSequence): number; - nglGetActiveSubroutineUniformiv(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetActiveSubroutineUniformiv(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer): void; - glGetActiveSubroutineUniformiv(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glGetActiveSubroutineUniformi(p0: number, p1: number, p2: number, p3: number): number; - nglGetActiveSubroutineUniformName(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glGetActiveSubroutineUniformName(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer | null | undefined, p4: java.nio.ByteBuffer): void; - glGetActiveSubroutineUniformName(p0: number, p1: number, p2: number, p3: number): string; - glGetActiveSubroutineUniformName(p0: number, p1: number, p2: number): string; - glGetActiveSubroutineUniformName(p0: number, p1: number, p2: number, p3: Array, p4: java.nio.ByteBuffer): void; - nglGetActiveSubroutineName(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glGetActiveSubroutineName(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer | null | undefined, p4: java.nio.ByteBuffer): void; - glGetActiveSubroutineName(p0: number, p1: number, p2: number, p3: number): string; - glGetActiveSubroutineName(p0: number, p1: number, p2: number): string; - glGetActiveSubroutineName(p0: number, p1: number, p2: number, p3: Array, p4: java.nio.ByteBuffer): void; - nglUniformSubroutinesuiv(p0: number, p1: number, p2: number): void; - glUniformSubroutinesuiv(p0: number, p1: java.nio.IntBuffer): void; - glUniformSubroutinesuiv(p0: number, p1: Array): void; - glUniformSubroutinesui(p0: number, p1: number): void; - nglGetUniformSubroutineuiv(p0: number, p1: number, p2: number): void; - glGetUniformSubroutineuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetUniformSubroutineuiv(p0: number, p1: number, p2: Array): void; - glGetUniformSubroutineui(p0: number, p1: number): number; - nglGetProgramStageiv(p0: number, p1: number, p2: number, p3: number): void; - glGetProgramStageiv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetProgramStageiv(p0: number, p1: number, p2: number, p3: Array): void; - glGetProgramStagei(p0: number, p1: number, p2: number): number; - glPatchParameteri(p0: number, p1: number): void; - nglPatchParameterfv(p0: number, p1: number): void; - glPatchParameterfv(p0: number, p1: java.nio.FloatBuffer): void; - glPatchParameterfv(p0: number, p1: kotlin.FloatArray): void; - glBindTransformFeedback(p0: number, p1: number): void; - nglDeleteTransformFeedbacks(p0: number, p1: number): void; - glDeleteTransformFeedbacks(p0: java.nio.IntBuffer): void; - glDeleteTransformFeedbacks(p0: number): void; - glDeleteTransformFeedbacks(p0: Array): void; - nglGenTransformFeedbacks(p0: number, p1: number): void; - glGenTransformFeedbacks(p0: java.nio.IntBuffer): void; - glGenTransformFeedbacks(): number; - glGenTransformFeedbacks(p0: Array): void; - glIsTransformFeedback(p0: number): boolean; - glPauseTransformFeedback(): void; - glResumeTransformFeedback(): void; - glDrawTransformFeedback(p0: number, p1: number): void; - glDrawTransformFeedbackStream(p0: number, p1: number, p2: number): void; - glBeginQueryIndexed(p0: number, p1: number, p2: number): void; - glEndQueryIndexed(p0: number, p1: number): void; - nglGetQueryIndexediv(p0: number, p1: number, p2: number, p3: number): void; - glGetQueryIndexediv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetQueryIndexediv(p0: number, p1: number, p2: number, p3: Array): void; - glGetQueryIndexedi(p0: number, p1: number, p2: number): number; - } - interface GL40 extends org.lwjgl.opengl.GL33 { - } - const GL41: { - GL_SHADER_COMPILER: number; - GL_SHADER_BINARY_FORMATS: number; - GL_NUM_SHADER_BINARY_FORMATS: number; - GL_MAX_VERTEX_UNIFORM_VECTORS: number; - GL_MAX_VARYING_VECTORS: number; - GL_MAX_FRAGMENT_UNIFORM_VECTORS: number; - GL_IMPLEMENTATION_COLOR_READ_TYPE: number; - GL_IMPLEMENTATION_COLOR_READ_FORMAT: number; - GL_FIXED: number; - GL_LOW_FLOAT: number; - GL_MEDIUM_FLOAT: number; - GL_HIGH_FLOAT: number; - GL_LOW_INT: number; - GL_MEDIUM_INT: number; - GL_HIGH_INT: number; - GL_RGB565: number; - GL_PROGRAM_BINARY_RETRIEVABLE_HINT: number; - GL_PROGRAM_BINARY_LENGTH: number; - GL_NUM_PROGRAM_BINARY_FORMATS: number; - GL_PROGRAM_BINARY_FORMATS: number; - GL_VERTEX_SHADER_BIT: number; - GL_FRAGMENT_SHADER_BIT: number; - GL_GEOMETRY_SHADER_BIT: number; - GL_TESS_CONTROL_SHADER_BIT: number; - GL_TESS_EVALUATION_SHADER_BIT: number; - GL_ALL_SHADER_BITS: number; - GL_PROGRAM_SEPARABLE: number; - GL_ACTIVE_PROGRAM: number; - GL_PROGRAM_PIPELINE_BINDING: number; - GL_MAX_VIEWPORTS: number; - GL_VIEWPORT_SUBPIXEL_BITS: number; - GL_VIEWPORT_BOUNDS_RANGE: number; - GL_LAYER_PROVOKING_VERTEX: number; - GL_VIEWPORT_INDEX_PROVOKING_VERTEX: number; - GL_UNDEFINED_VERTEX: number; - glReleaseShaderCompiler(): void; - nglShaderBinary(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glShaderBinary(p0: java.nio.IntBuffer, p1: number, p2: java.nio.ByteBuffer): void; - glShaderBinary(p0: Array, p1: number, p2: java.nio.ByteBuffer): void; - nglGetShaderPrecisionFormat(p0: number, p1: number, p2: number, p3: number): void; - glGetShaderPrecisionFormat(p0: number, p1: number, p2: java.nio.IntBuffer, p3: java.nio.IntBuffer): void; - glGetShaderPrecisionFormat(p0: number, p1: number, p2: java.nio.IntBuffer): number; - glGetShaderPrecisionFormat(p0: number, p1: number, p2: Array, p3: Array): void; - glDepthRangef(p0: number, p1: number): void; - glClearDepthf(p0: number): void; - nglGetProgramBinary(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetProgramBinary(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.IntBuffer, p3: java.nio.ByteBuffer): void; - glGetProgramBinary(p0: number, p1: Array, p2: Array, p3: java.nio.ByteBuffer): void; - nglProgramBinary(p0: number, p1: number, p2: number, p3: number): void; - glProgramBinary(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glProgramParameteri(p0: number, p1: number, p2: number): void; - glUseProgramStages(p0: number, p1: number, p2: number): void; - glActiveShaderProgram(p0: number, p1: number): void; - nglCreateShaderProgramv(p0: number, p1: number, p2: number): number; - glCreateShaderProgramv(p0: number, p1: org.lwjgl.PointerBuffer): number; - glCreateShaderProgramv(p0: number, p1: kotlin.CharSequence): number; - glCreateShaderProgramv(p0: number, p1: kotlin.CharSequence): number; - glBindProgramPipeline(p0: number): void; - nglDeleteProgramPipelines(p0: number, p1: number): void; - glDeleteProgramPipelines(p0: java.nio.IntBuffer): void; - glDeleteProgramPipelines(p0: number): void; - glDeleteProgramPipelines(p0: Array): void; - nglGenProgramPipelines(p0: number, p1: number): void; - glGenProgramPipelines(p0: java.nio.IntBuffer): void; - glGenProgramPipelines(): number; - glGenProgramPipelines(p0: Array): void; - glIsProgramPipeline(p0: number): boolean; - nglGetProgramPipelineiv(p0: number, p1: number, p2: number): void; - glGetProgramPipelineiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetProgramPipelineiv(p0: number, p1: number, p2: Array): void; - glGetProgramPipelinei(p0: number, p1: number): number; - glProgramUniform1i(p0: number, p1: number, p2: number): void; - glProgramUniform2i(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3i(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glProgramUniform4i(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glProgramUniform1ui(p0: number, p1: number, p2: number): void; - glProgramUniform2ui(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3ui(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glProgramUniform4ui(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glProgramUniform1f(p0: number, p1: number, p2: number): void; - glProgramUniform2f(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3f(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glProgramUniform4f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glProgramUniform1d(p0: number, p1: number, p2: number): void; - glProgramUniform2d(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3d(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glProgramUniform4d(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - nglProgramUniform1iv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform1iv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform1iv(p0: number, p1: number, p2: Array): void; - nglProgramUniform2iv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform2iv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform2iv(p0: number, p1: number, p2: Array): void; - nglProgramUniform3iv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3iv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform3iv(p0: number, p1: number, p2: Array): void; - nglProgramUniform4iv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform4iv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform4iv(p0: number, p1: number, p2: Array): void; - nglProgramUniform1uiv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform1uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform1uiv(p0: number, p1: number, p2: Array): void; - nglProgramUniform2uiv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform2uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform2uiv(p0: number, p1: number, p2: Array): void; - nglProgramUniform3uiv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform3uiv(p0: number, p1: number, p2: Array): void; - nglProgramUniform4uiv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform4uiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glProgramUniform4uiv(p0: number, p1: number, p2: Array): void; - nglProgramUniform1fv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform1fv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glProgramUniform1fv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglProgramUniform2fv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform2fv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glProgramUniform2fv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglProgramUniform3fv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3fv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glProgramUniform3fv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglProgramUniform4fv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform4fv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glProgramUniform4fv(p0: number, p1: number, p2: kotlin.FloatArray): void; - nglProgramUniform1dv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform1dv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glProgramUniform1dv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglProgramUniform2dv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform2dv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glProgramUniform2dv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglProgramUniform3dv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform3dv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glProgramUniform3dv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglProgramUniform4dv(p0: number, p1: number, p2: number, p3: number): void; - glProgramUniform4dv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glProgramUniform4dv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglProgramUniformMatrix2fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix2fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix2fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix3fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix3fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix3fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix4fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix4fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix4fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix2dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix2dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix2dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix3dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix3dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix3dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix4dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix4dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix4dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix2x3fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix2x3fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix2x3fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix3x2fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix3x2fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix3x2fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix2x4fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix2x4fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix2x4fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix4x2fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix4x2fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix4x2fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix3x4fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix3x4fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix3x4fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix4x3fv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix4x3fv(p0: number, p1: number, p2: boolean, p3: java.nio.FloatBuffer): void; - glProgramUniformMatrix4x3fv(p0: number, p1: number, p2: boolean, p3: kotlin.FloatArray): void; - nglProgramUniformMatrix2x3dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix2x3dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix2x3dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix3x2dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix3x2dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix3x2dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix2x4dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix2x4dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix2x4dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix4x2dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix4x2dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix4x2dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix3x4dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix3x4dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix3x4dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - nglProgramUniformMatrix4x3dv(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glProgramUniformMatrix4x3dv(p0: number, p1: number, p2: boolean, p3: java.nio.DoubleBuffer): void; - glProgramUniformMatrix4x3dv(p0: number, p1: number, p2: boolean, p3: kotlin.DoubleArray): void; - glValidateProgramPipeline(p0: number): void; - nglGetProgramPipelineInfoLog(p0: number, p1: number, p2: number, p3: number): void; - glGetProgramPipelineInfoLog(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.ByteBuffer): void; - glGetProgramPipelineInfoLog(p0: number, p1: number): string; - glGetProgramPipelineInfoLog(p0: number): string; - glGetProgramPipelineInfoLog(p0: number, p1: Array, p2: java.nio.ByteBuffer): void; - glVertexAttribL1d(p0: number, p1: number): void; - glVertexAttribL2d(p0: number, p1: number, p2: number): void; - glVertexAttribL3d(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttribL4d(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglVertexAttribL1dv(p0: number, p1: number): void; - glVertexAttribL1dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttribL1dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttribL2dv(p0: number, p1: number): void; - glVertexAttribL2dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttribL2dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttribL3dv(p0: number, p1: number): void; - glVertexAttribL3dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttribL3dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttribL4dv(p0: number, p1: number): void; - glVertexAttribL4dv(p0: number, p1: java.nio.DoubleBuffer): void; - glVertexAttribL4dv(p0: number, p1: kotlin.DoubleArray): void; - nglVertexAttribLPointer(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttribLPointer(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glVertexAttribLPointer(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexAttribLPointer(p0: number, p1: number, p2: number, p3: java.nio.DoubleBuffer): void; - nglGetVertexAttribLdv(p0: number, p1: number, p2: number): void; - glGetVertexAttribLdv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetVertexAttribLdv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglViewportArrayv(p0: number, p1: number, p2: number): void; - glViewportArrayv(p0: number, p1: java.nio.FloatBuffer): void; - glViewportArrayv(p0: number, p1: kotlin.FloatArray): void; - glViewportIndexedf(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglViewportIndexedfv(p0: number, p1: number): void; - glViewportIndexedfv(p0: number, p1: java.nio.FloatBuffer): void; - glViewportIndexedfv(p0: number, p1: kotlin.FloatArray): void; - nglScissorArrayv(p0: number, p1: number, p2: number): void; - glScissorArrayv(p0: number, p1: java.nio.IntBuffer): void; - glScissorArrayv(p0: number, p1: Array): void; - glScissorIndexed(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglScissorIndexedv(p0: number, p1: number): void; - glScissorIndexedv(p0: number, p1: java.nio.IntBuffer): void; - glScissorIndexedv(p0: number, p1: Array): void; - nglDepthRangeArrayv(p0: number, p1: number, p2: number): void; - glDepthRangeArrayv(p0: number, p1: java.nio.DoubleBuffer): void; - glDepthRangeArrayv(p0: number, p1: kotlin.DoubleArray): void; - glDepthRangeIndexed(p0: number, p1: number, p2: number): void; - nglGetFloati_v(p0: number, p1: number, p2: number): void; - glGetFloati_v(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetFloati_v(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetFloati(p0: number, p1: number): number; - nglGetDoublei_v(p0: number, p1: number, p2: number): void; - glGetDoublei_v(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetDoublei_v(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glGetDoublei(p0: number, p1: number): number; - } - interface GL41 extends org.lwjgl.opengl.GL40 { - } - const GL42: { - GL_COPY_READ_BUFFER_BINDING: number; - GL_COPY_WRITE_BUFFER_BINDING: number; - GL_TRANSFORM_FEEDBACK_ACTIVE: number; - GL_TRANSFORM_FEEDBACK_PAUSED: number; - GL_COMPRESSED_RGBA_BPTC_UNORM: number; - GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM: number; - GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT: number; - GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT: number; - GL_UNPACK_COMPRESSED_BLOCK_WIDTH: number; - GL_UNPACK_COMPRESSED_BLOCK_HEIGHT: number; - GL_UNPACK_COMPRESSED_BLOCK_DEPTH: number; - GL_UNPACK_COMPRESSED_BLOCK_SIZE: number; - GL_PACK_COMPRESSED_BLOCK_WIDTH: number; - GL_PACK_COMPRESSED_BLOCK_HEIGHT: number; - GL_PACK_COMPRESSED_BLOCK_DEPTH: number; - GL_PACK_COMPRESSED_BLOCK_SIZE: number; - GL_ATOMIC_COUNTER_BUFFER: number; - GL_ATOMIC_COUNTER_BUFFER_BINDING: number; - GL_ATOMIC_COUNTER_BUFFER_START: number; - GL_ATOMIC_COUNTER_BUFFER_SIZE: number; - GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE: number; - GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS: number; - GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES: number; - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER: number; - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER: number; - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER: number; - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER: number; - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER: number; - GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS: number; - GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS: number; - GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS: number; - GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS: number; - GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS: number; - GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS: number; - GL_MAX_VERTEX_ATOMIC_COUNTERS: number; - GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS: number; - GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS: number; - GL_MAX_GEOMETRY_ATOMIC_COUNTERS: number; - GL_MAX_FRAGMENT_ATOMIC_COUNTERS: number; - GL_MAX_COMBINED_ATOMIC_COUNTERS: number; - GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE: number; - GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS: number; - GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: number; - GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX: number; - GL_UNSIGNED_INT_ATOMIC_COUNTER: number; - GL_TEXTURE_IMMUTABLE_FORMAT: number; - GL_MAX_IMAGE_UNITS: number; - GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS: number; - GL_MAX_IMAGE_SAMPLES: number; - GL_MAX_VERTEX_IMAGE_UNIFORMS: number; - GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS: number; - GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS: number; - GL_MAX_GEOMETRY_IMAGE_UNIFORMS: number; - GL_MAX_FRAGMENT_IMAGE_UNIFORMS: number; - GL_MAX_COMBINED_IMAGE_UNIFORMS: number; - GL_IMAGE_BINDING_NAME: number; - GL_IMAGE_BINDING_LEVEL: number; - GL_IMAGE_BINDING_LAYERED: number; - GL_IMAGE_BINDING_LAYER: number; - GL_IMAGE_BINDING_ACCESS: number; - GL_IMAGE_BINDING_FORMAT: number; - GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT: number; - GL_ELEMENT_ARRAY_BARRIER_BIT: number; - GL_UNIFORM_BARRIER_BIT: number; - GL_TEXTURE_FETCH_BARRIER_BIT: number; - GL_SHADER_IMAGE_ACCESS_BARRIER_BIT: number; - GL_COMMAND_BARRIER_BIT: number; - GL_PIXEL_BUFFER_BARRIER_BIT: number; - GL_TEXTURE_UPDATE_BARRIER_BIT: number; - GL_BUFFER_UPDATE_BARRIER_BIT: number; - GL_FRAMEBUFFER_BARRIER_BIT: number; - GL_TRANSFORM_FEEDBACK_BARRIER_BIT: number; - GL_ATOMIC_COUNTER_BARRIER_BIT: number; - GL_ALL_BARRIER_BITS: number; - GL_IMAGE_1D: number; - GL_IMAGE_2D: number; - GL_IMAGE_3D: number; - GL_IMAGE_2D_RECT: number; - GL_IMAGE_CUBE: number; - GL_IMAGE_BUFFER: number; - GL_IMAGE_1D_ARRAY: number; - GL_IMAGE_2D_ARRAY: number; - GL_IMAGE_CUBE_MAP_ARRAY: number; - GL_IMAGE_2D_MULTISAMPLE: number; - GL_IMAGE_2D_MULTISAMPLE_ARRAY: number; - GL_INT_IMAGE_1D: number; - GL_INT_IMAGE_2D: number; - GL_INT_IMAGE_3D: number; - GL_INT_IMAGE_2D_RECT: number; - GL_INT_IMAGE_CUBE: number; - GL_INT_IMAGE_BUFFER: number; - GL_INT_IMAGE_1D_ARRAY: number; - GL_INT_IMAGE_2D_ARRAY: number; - GL_INT_IMAGE_CUBE_MAP_ARRAY: number; - GL_INT_IMAGE_2D_MULTISAMPLE: number; - GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY: number; - GL_UNSIGNED_INT_IMAGE_1D: number; - GL_UNSIGNED_INT_IMAGE_2D: number; - GL_UNSIGNED_INT_IMAGE_3D: number; - GL_UNSIGNED_INT_IMAGE_2D_RECT: number; - GL_UNSIGNED_INT_IMAGE_CUBE: number; - GL_UNSIGNED_INT_IMAGE_BUFFER: number; - GL_UNSIGNED_INT_IMAGE_1D_ARRAY: number; - GL_UNSIGNED_INT_IMAGE_2D_ARRAY: number; - GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY: number; - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE: number; - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY: number; - GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: number; - GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE: number; - GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS: number; - GL_NUM_SAMPLE_COUNTS: number; - GL_MIN_MAP_BUFFER_ALIGNMENT: number; - nglGetActiveAtomicCounterBufferiv(p0: number, p1: number, p2: number, p3: number): void; - glGetActiveAtomicCounterBufferiv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetActiveAtomicCounterBufferiv(p0: number, p1: number, p2: number, p3: Array): void; - glGetActiveAtomicCounterBufferi(p0: number, p1: number, p2: number): number; - glTexStorage1D(p0: number, p1: number, p2: number, p3: number): void; - glTexStorage2D(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glTexStorage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDrawTransformFeedbackInstanced(p0: number, p1: number, p2: number): void; - glDrawTransformFeedbackStreamInstanced(p0: number, p1: number, p2: number, p3: number): void; - glDrawArraysInstancedBaseInstance(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglDrawElementsInstancedBaseInstance(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDrawElementsInstancedBaseInstance(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDrawElementsInstancedBaseInstance(p0: number, p1: number, p2: java.nio.ByteBuffer, p3: number, p4: number): void; - glDrawElementsInstancedBaseInstance(p0: number, p1: java.nio.ByteBuffer, p2: number, p3: number): void; - glDrawElementsInstancedBaseInstance(p0: number, p1: java.nio.ShortBuffer, p2: number, p3: number): void; - glDrawElementsInstancedBaseInstance(p0: number, p1: java.nio.IntBuffer, p2: number, p3: number): void; - nglDrawElementsInstancedBaseVertexBaseInstance(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glDrawElementsInstancedBaseVertexBaseInstance(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glDrawElementsInstancedBaseVertexBaseInstance(p0: number, p1: number, p2: java.nio.ByteBuffer, p3: number, p4: number, p5: number): void; - glDrawElementsInstancedBaseVertexBaseInstance(p0: number, p1: java.nio.ByteBuffer, p2: number, p3: number, p4: number): void; - glDrawElementsInstancedBaseVertexBaseInstance(p0: number, p1: java.nio.ShortBuffer, p2: number, p3: number, p4: number): void; - glDrawElementsInstancedBaseVertexBaseInstance(p0: number, p1: java.nio.IntBuffer, p2: number, p3: number, p4: number): void; - glBindImageTexture(p0: number, p1: number, p2: number, p3: boolean, p4: number, p5: number, p6: number): void; - glMemoryBarrier(p0: number): void; - nglGetInternalformativ(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetInternalformativ(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetInternalformativ(p0: number, p1: number, p2: number, p3: Array): void; - glGetInternalformati(p0: number, p1: number, p2: number): number; - } - interface GL42 extends org.lwjgl.opengl.GL41 { - } - const GL43: { - GL_NUM_SHADING_LANGUAGE_VERSIONS: number; - GL_VERTEX_ATTRIB_ARRAY_LONG: number; - GL_COMPRESSED_RGB8_ETC2: number; - GL_COMPRESSED_SRGB8_ETC2: number; - GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: number; - GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: number; - GL_COMPRESSED_RGBA8_ETC2_EAC: number; - GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: number; - GL_COMPRESSED_R11_EAC: number; - GL_COMPRESSED_SIGNED_R11_EAC: number; - GL_COMPRESSED_RG11_EAC: number; - GL_COMPRESSED_SIGNED_RG11_EAC: number; - GL_PRIMITIVE_RESTART_FIXED_INDEX: number; - GL_ANY_SAMPLES_PASSED_CONSERVATIVE: number; - GL_MAX_ELEMENT_INDEX: number; - GL_TEXTURE_IMMUTABLE_LEVELS: number; - GL_COMPUTE_SHADER: number; - GL_MAX_COMPUTE_UNIFORM_BLOCKS: number; - GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS: number; - GL_MAX_COMPUTE_IMAGE_UNIFORMS: number; - GL_MAX_COMPUTE_SHARED_MEMORY_SIZE: number; - GL_MAX_COMPUTE_UNIFORM_COMPONENTS: number; - GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS: number; - GL_MAX_COMPUTE_ATOMIC_COUNTERS: number; - GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS: number; - GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS: number; - GL_MAX_COMPUTE_WORK_GROUP_COUNT: number; - GL_MAX_COMPUTE_WORK_GROUP_SIZE: number; - GL_COMPUTE_WORK_GROUP_SIZE: number; - GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER: number; - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER: number; - GL_DISPATCH_INDIRECT_BUFFER: number; - GL_DISPATCH_INDIRECT_BUFFER_BINDING: number; - GL_COMPUTE_SHADER_BIT: number; - GL_DEBUG_OUTPUT: number; - GL_DEBUG_OUTPUT_SYNCHRONOUS: number; - GL_CONTEXT_FLAG_DEBUG_BIT: number; - GL_MAX_DEBUG_MESSAGE_LENGTH: number; - GL_MAX_DEBUG_LOGGED_MESSAGES: number; - GL_DEBUG_LOGGED_MESSAGES: number; - GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH: number; - GL_MAX_DEBUG_GROUP_STACK_DEPTH: number; - GL_DEBUG_GROUP_STACK_DEPTH: number; - GL_MAX_LABEL_LENGTH: number; - GL_DEBUG_CALLBACK_FUNCTION: number; - GL_DEBUG_CALLBACK_USER_PARAM: number; - GL_DEBUG_SOURCE_API: number; - GL_DEBUG_SOURCE_WINDOW_SYSTEM: number; - GL_DEBUG_SOURCE_SHADER_COMPILER: number; - GL_DEBUG_SOURCE_THIRD_PARTY: number; - GL_DEBUG_SOURCE_APPLICATION: number; - GL_DEBUG_SOURCE_OTHER: number; - GL_DEBUG_TYPE_ERROR: number; - GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: number; - GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: number; - GL_DEBUG_TYPE_PORTABILITY: number; - GL_DEBUG_TYPE_PERFORMANCE: number; - GL_DEBUG_TYPE_OTHER: number; - GL_DEBUG_TYPE_MARKER: number; - GL_DEBUG_TYPE_PUSH_GROUP: number; - GL_DEBUG_TYPE_POP_GROUP: number; - GL_DEBUG_SEVERITY_HIGH: number; - GL_DEBUG_SEVERITY_MEDIUM: number; - GL_DEBUG_SEVERITY_LOW: number; - GL_DEBUG_SEVERITY_NOTIFICATION: number; - GL_BUFFER: number; - GL_SHADER: number; - GL_PROGRAM: number; - GL_QUERY: number; - GL_PROGRAM_PIPELINE: number; - GL_SAMPLER: number; - GL_DISPLAY_LIST: number; - GL_MAX_UNIFORM_LOCATIONS: number; - GL_FRAMEBUFFER_DEFAULT_WIDTH: number; - GL_FRAMEBUFFER_DEFAULT_HEIGHT: number; - GL_FRAMEBUFFER_DEFAULT_LAYERS: number; - GL_FRAMEBUFFER_DEFAULT_SAMPLES: number; - GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS: number; - GL_MAX_FRAMEBUFFER_WIDTH: number; - GL_MAX_FRAMEBUFFER_HEIGHT: number; - GL_MAX_FRAMEBUFFER_LAYERS: number; - GL_MAX_FRAMEBUFFER_SAMPLES: number; - GL_INTERNALFORMAT_SUPPORTED: number; - GL_INTERNALFORMAT_PREFERRED: number; - GL_INTERNALFORMAT_RED_SIZE: number; - GL_INTERNALFORMAT_GREEN_SIZE: number; - GL_INTERNALFORMAT_BLUE_SIZE: number; - GL_INTERNALFORMAT_ALPHA_SIZE: number; - GL_INTERNALFORMAT_DEPTH_SIZE: number; - GL_INTERNALFORMAT_STENCIL_SIZE: number; - GL_INTERNALFORMAT_SHARED_SIZE: number; - GL_INTERNALFORMAT_RED_TYPE: number; - GL_INTERNALFORMAT_GREEN_TYPE: number; - GL_INTERNALFORMAT_BLUE_TYPE: number; - GL_INTERNALFORMAT_ALPHA_TYPE: number; - GL_INTERNALFORMAT_DEPTH_TYPE: number; - GL_INTERNALFORMAT_STENCIL_TYPE: number; - GL_MAX_WIDTH: number; - GL_MAX_HEIGHT: number; - GL_MAX_DEPTH: number; - GL_MAX_LAYERS: number; - GL_MAX_COMBINED_DIMENSIONS: number; - GL_COLOR_COMPONENTS: number; - GL_DEPTH_COMPONENTS: number; - GL_STENCIL_COMPONENTS: number; - GL_COLOR_RENDERABLE: number; - GL_DEPTH_RENDERABLE: number; - GL_STENCIL_RENDERABLE: number; - GL_FRAMEBUFFER_RENDERABLE: number; - GL_FRAMEBUFFER_RENDERABLE_LAYERED: number; - GL_FRAMEBUFFER_BLEND: number; - GL_READ_PIXELS: number; - GL_READ_PIXELS_FORMAT: number; - GL_READ_PIXELS_TYPE: number; - GL_TEXTURE_IMAGE_FORMAT: number; - GL_TEXTURE_IMAGE_TYPE: number; - GL_GET_TEXTURE_IMAGE_FORMAT: number; - GL_GET_TEXTURE_IMAGE_TYPE: number; - GL_MIPMAP: number; - GL_MANUAL_GENERATE_MIPMAP: number; - GL_AUTO_GENERATE_MIPMAP: number; - GL_COLOR_ENCODING: number; - GL_SRGB_READ: number; - GL_SRGB_WRITE: number; - GL_FILTER: number; - GL_VERTEX_TEXTURE: number; - GL_TESS_CONTROL_TEXTURE: number; - GL_TESS_EVALUATION_TEXTURE: number; - GL_GEOMETRY_TEXTURE: number; - GL_FRAGMENT_TEXTURE: number; - GL_COMPUTE_TEXTURE: number; - GL_TEXTURE_SHADOW: number; - GL_TEXTURE_GATHER: number; - GL_TEXTURE_GATHER_SHADOW: number; - GL_SHADER_IMAGE_LOAD: number; - GL_SHADER_IMAGE_STORE: number; - GL_SHADER_IMAGE_ATOMIC: number; - GL_IMAGE_TEXEL_SIZE: number; - GL_IMAGE_COMPATIBILITY_CLASS: number; - GL_IMAGE_PIXEL_FORMAT: number; - GL_IMAGE_PIXEL_TYPE: number; - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: number; - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: number; - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: number; - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: number; - GL_TEXTURE_COMPRESSED_BLOCK_WIDTH: number; - GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT: number; - GL_TEXTURE_COMPRESSED_BLOCK_SIZE: number; - GL_CLEAR_BUFFER: number; - GL_TEXTURE_VIEW: number; - GL_VIEW_COMPATIBILITY_CLASS: number; - GL_FULL_SUPPORT: number; - GL_CAVEAT_SUPPORT: number; - GL_IMAGE_CLASS_4_X_32: number; - GL_IMAGE_CLASS_2_X_32: number; - GL_IMAGE_CLASS_1_X_32: number; - GL_IMAGE_CLASS_4_X_16: number; - GL_IMAGE_CLASS_2_X_16: number; - GL_IMAGE_CLASS_1_X_16: number; - GL_IMAGE_CLASS_4_X_8: number; - GL_IMAGE_CLASS_2_X_8: number; - GL_IMAGE_CLASS_1_X_8: number; - GL_IMAGE_CLASS_11_11_10: number; - GL_IMAGE_CLASS_10_10_10_2: number; - GL_VIEW_CLASS_128_BITS: number; - GL_VIEW_CLASS_96_BITS: number; - GL_VIEW_CLASS_64_BITS: number; - GL_VIEW_CLASS_48_BITS: number; - GL_VIEW_CLASS_32_BITS: number; - GL_VIEW_CLASS_24_BITS: number; - GL_VIEW_CLASS_16_BITS: number; - GL_VIEW_CLASS_8_BITS: number; - GL_VIEW_CLASS_S3TC_DXT1_RGB: number; - GL_VIEW_CLASS_S3TC_DXT1_RGBA: number; - GL_VIEW_CLASS_S3TC_DXT3_RGBA: number; - GL_VIEW_CLASS_S3TC_DXT5_RGBA: number; - GL_VIEW_CLASS_RGTC1_RED: number; - GL_VIEW_CLASS_RGTC2_RG: number; - GL_VIEW_CLASS_BPTC_UNORM: number; - GL_VIEW_CLASS_BPTC_FLOAT: number; - GL_UNIFORM: number; - GL_UNIFORM_BLOCK: number; - GL_PROGRAM_INPUT: number; - GL_PROGRAM_OUTPUT: number; - GL_BUFFER_VARIABLE: number; - GL_SHADER_STORAGE_BLOCK: number; - GL_VERTEX_SUBROUTINE: number; - GL_TESS_CONTROL_SUBROUTINE: number; - GL_TESS_EVALUATION_SUBROUTINE: number; - GL_GEOMETRY_SUBROUTINE: number; - GL_FRAGMENT_SUBROUTINE: number; - GL_COMPUTE_SUBROUTINE: number; - GL_VERTEX_SUBROUTINE_UNIFORM: number; - GL_TESS_CONTROL_SUBROUTINE_UNIFORM: number; - GL_TESS_EVALUATION_SUBROUTINE_UNIFORM: number; - GL_GEOMETRY_SUBROUTINE_UNIFORM: number; - GL_FRAGMENT_SUBROUTINE_UNIFORM: number; - GL_COMPUTE_SUBROUTINE_UNIFORM: number; - GL_TRANSFORM_FEEDBACK_VARYING: number; - GL_ACTIVE_RESOURCES: number; - GL_MAX_NAME_LENGTH: number; - GL_MAX_NUM_ACTIVE_VARIABLES: number; - GL_MAX_NUM_COMPATIBLE_SUBROUTINES: number; - GL_NAME_LENGTH: number; - GL_TYPE: number; - GL_ARRAY_SIZE: number; - GL_OFFSET: number; - GL_BLOCK_INDEX: number; - GL_ARRAY_STRIDE: number; - GL_MATRIX_STRIDE: number; - GL_IS_ROW_MAJOR: number; - GL_ATOMIC_COUNTER_BUFFER_INDEX: number; - GL_BUFFER_BINDING: number; - GL_BUFFER_DATA_SIZE: number; - GL_NUM_ACTIVE_VARIABLES: number; - GL_ACTIVE_VARIABLES: number; - GL_REFERENCED_BY_VERTEX_SHADER: number; - GL_REFERENCED_BY_TESS_CONTROL_SHADER: number; - GL_REFERENCED_BY_TESS_EVALUATION_SHADER: number; - GL_REFERENCED_BY_GEOMETRY_SHADER: number; - GL_REFERENCED_BY_FRAGMENT_SHADER: number; - GL_REFERENCED_BY_COMPUTE_SHADER: number; - GL_TOP_LEVEL_ARRAY_SIZE: number; - GL_TOP_LEVEL_ARRAY_STRIDE: number; - GL_LOCATION: number; - GL_LOCATION_INDEX: number; - GL_IS_PER_PATCH: number; - GL_SHADER_STORAGE_BUFFER: number; - GL_SHADER_STORAGE_BUFFER_BINDING: number; - GL_SHADER_STORAGE_BUFFER_START: number; - GL_SHADER_STORAGE_BUFFER_SIZE: number; - GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: number; - GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS: number; - GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS: number; - GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS: number; - GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS: number; - GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS: number; - GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS: number; - GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS: number; - GL_MAX_SHADER_STORAGE_BLOCK_SIZE: number; - GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT: number; - GL_SHADER_STORAGE_BARRIER_BIT: number; - GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: number; - GL_DEPTH_STENCIL_TEXTURE_MODE: number; - GL_TEXTURE_BUFFER_OFFSET: number; - GL_TEXTURE_BUFFER_SIZE: number; - GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT: number; - GL_TEXTURE_VIEW_MIN_LEVEL: number; - GL_TEXTURE_VIEW_NUM_LEVELS: number; - GL_TEXTURE_VIEW_MIN_LAYER: number; - GL_TEXTURE_VIEW_NUM_LAYERS: number; - GL_VERTEX_ATTRIB_BINDING: number; - GL_VERTEX_ATTRIB_RELATIVE_OFFSET: number; - GL_VERTEX_BINDING_DIVISOR: number; - GL_VERTEX_BINDING_OFFSET: number; - GL_VERTEX_BINDING_STRIDE: number; - GL_VERTEX_BINDING_BUFFER: number; - GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET: number; - GL_MAX_VERTEX_ATTRIB_BINDINGS: number; - nglClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer | null | undefined): void; - glClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer | null | undefined): void; - glClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer | null | undefined): void; - glClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.FloatBuffer | null | undefined): void; - glClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glClearBufferData(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray | null | undefined): void; - nglClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer | null | undefined): void; - glClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ShortBuffer | null | undefined): void; - glClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.IntBuffer | null | undefined): void; - glClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.FloatBuffer | null | undefined): void; - glClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glClearBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.FloatArray | null | undefined): void; - glDispatchCompute(p0: number, p1: number, p2: number): void; - glDispatchComputeIndirect(p0: number): void; - glCopyImageSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number, p12: number, p13: number, p14: number): void; - nglDebugMessageControl(p0: number, p1: number, p2: number, p3: number, p4: number, p5: boolean): void; - glDebugMessageControl(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer | null | undefined, p4: boolean): void; - glDebugMessageControl(p0: number, p1: number, p2: number, p3: number, p4: boolean): void; - glDebugMessageControl(p0: number, p1: number, p2: number, p3: Array, p4: boolean): void; - nglDebugMessageInsert(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glDebugMessageInsert(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glDebugMessageInsert(p0: number, p1: number, p2: number, p3: number, p4: kotlin.CharSequence): void; - nglDebugMessageCallback(p0: number, p1: number): void; - glDebugMessageCallback(p0: org.lwjgl.opengl.GLDebugMessageCallbackI | null | undefined, p1: number): void; - nglGetDebugMessageLog(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): number; - glGetDebugMessageLog(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.IntBuffer | null | undefined, p4: java.nio.IntBuffer | null | undefined, p5: java.nio.IntBuffer | null | undefined, p6: java.nio.ByteBuffer | null | undefined): number; - glGetDebugMessageLog(p0: number, p1: Array, p2: Array, p3: Array, p4: Array, p5: Array, p6: java.nio.ByteBuffer | null | undefined): number; - nglPushDebugGroup(p0: number, p1: number, p2: number, p3: number): void; - glPushDebugGroup(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glPushDebugGroup(p0: number, p1: number, p2: kotlin.CharSequence): void; - glPopDebugGroup(): void; - nglObjectLabel(p0: number, p1: number, p2: number, p3: number): void; - glObjectLabel(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glObjectLabel(p0: number, p1: number, p2: kotlin.CharSequence): void; - nglGetObjectLabel(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetObjectLabel(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: java.nio.ByteBuffer): void; - glGetObjectLabel(p0: number, p1: number, p2: number): string; - glGetObjectLabel(p0: number, p1: number): string; - glGetObjectLabel(p0: number, p1: number, p2: Array, p3: java.nio.ByteBuffer): void; - nglObjectPtrLabel(p0: number, p1: number, p2: number): void; - glObjectPtrLabel(p0: number, p1: java.nio.ByteBuffer): void; - glObjectPtrLabel(p0: number, p1: kotlin.CharSequence): void; - nglGetObjectPtrLabel(p0: number, p1: number, p2: number, p3: number): void; - glGetObjectPtrLabel(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: java.nio.ByteBuffer): void; - glGetObjectPtrLabel(p0: number, p1: number): string; - glGetObjectPtrLabel(p0: number): string; - glGetObjectPtrLabel(p0: number, p1: Array, p2: java.nio.ByteBuffer): void; - glFramebufferParameteri(p0: number, p1: number, p2: number): void; - nglGetFramebufferParameteriv(p0: number, p1: number, p2: number): void; - glGetFramebufferParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetFramebufferParameteriv(p0: number, p1: number, p2: Array): void; - glGetFramebufferParameteri(p0: number, p1: number): number; - nglGetInternalformati64v(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetInternalformati64v(p0: number, p1: number, p2: number, p3: java.nio.LongBuffer): void; - glGetInternalformati64v(p0: number, p1: number, p2: number, p3: Array): void; - glGetInternalformati64(p0: number, p1: number, p2: number): number; - glInvalidateTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glInvalidateTexImage(p0: number, p1: number): void; - glInvalidateBufferSubData(p0: number, p1: number, p2: number): void; - glInvalidateBufferData(p0: number): void; - nglInvalidateFramebuffer(p0: number, p1: number, p2: number): void; - glInvalidateFramebuffer(p0: number, p1: java.nio.IntBuffer): void; - glInvalidateFramebuffer(p0: number, p1: number): void; - glInvalidateFramebuffer(p0: number, p1: Array): void; - nglInvalidateSubFramebuffer(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glInvalidateSubFramebuffer(p0: number, p1: java.nio.IntBuffer, p2: number, p3: number, p4: number, p5: number): void; - glInvalidateSubFramebuffer(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glInvalidateSubFramebuffer(p0: number, p1: Array, p2: number, p3: number, p4: number, p5: number): void; - nglMultiDrawArraysIndirect(p0: number, p1: number, p2: number, p3: number): void; - glMultiDrawArraysIndirect(p0: number, p1: java.nio.ByteBuffer, p2: number, p3: number): void; - glMultiDrawArraysIndirect(p0: number, p1: number, p2: number, p3: number): void; - glMultiDrawArraysIndirect(p0: number, p1: java.nio.IntBuffer, p2: number, p3: number): void; - glMultiDrawArraysIndirect(p0: number, p1: Array, p2: number, p3: number): void; - nglMultiDrawElementsIndirect(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glMultiDrawElementsIndirect(p0: number, p1: number, p2: java.nio.ByteBuffer, p3: number, p4: number): void; - glMultiDrawElementsIndirect(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glMultiDrawElementsIndirect(p0: number, p1: number, p2: java.nio.IntBuffer, p3: number, p4: number): void; - glMultiDrawElementsIndirect(p0: number, p1: number, p2: Array, p3: number, p4: number): void; - nglGetProgramInterfaceiv(p0: number, p1: number, p2: number, p3: number): void; - glGetProgramInterfaceiv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetProgramInterfaceiv(p0: number, p1: number, p2: number, p3: Array): void; - glGetProgramInterfacei(p0: number, p1: number, p2: number): number; - nglGetProgramResourceIndex(p0: number, p1: number, p2: number): number; - glGetProgramResourceIndex(p0: number, p1: number, p2: java.nio.ByteBuffer): number; - glGetProgramResourceIndex(p0: number, p1: number, p2: kotlin.CharSequence): number; - nglGetProgramResourceName(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glGetProgramResourceName(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer | null | undefined, p4: java.nio.ByteBuffer): void; - glGetProgramResourceName(p0: number, p1: number, p2: number, p3: number): string; - glGetProgramResourceName(p0: number, p1: number, p2: number): string; - glGetProgramResourceName(p0: number, p1: number, p2: number, p3: Array, p4: java.nio.ByteBuffer): void; - nglGetProgramResourceiv(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glGetProgramResourceiv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer, p4: java.nio.IntBuffer | null | undefined, p5: java.nio.IntBuffer): void; - glGetProgramResourceiv(p0: number, p1: number, p2: number, p3: Array, p4: Array, p5: Array): void; - nglGetProgramResourceLocation(p0: number, p1: number, p2: number): number; - glGetProgramResourceLocation(p0: number, p1: number, p2: java.nio.ByteBuffer): number; - glGetProgramResourceLocation(p0: number, p1: number, p2: kotlin.CharSequence): number; - nglGetProgramResourceLocationIndex(p0: number, p1: number, p2: number): number; - glGetProgramResourceLocationIndex(p0: number, p1: number, p2: java.nio.ByteBuffer): number; - glGetProgramResourceLocationIndex(p0: number, p1: number, p2: kotlin.CharSequence): number; - glShaderStorageBlockBinding(p0: number, p1: number, p2: number): void; - glTexBufferRange(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glTexStorage2DMultisample(p0: number, p1: number, p2: number, p3: number, p4: number, p5: boolean): void; - glTexStorage3DMultisample(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: boolean): void; - glTextureView(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glBindVertexBuffer(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttribFormat(p0: number, p1: number, p2: number, p3: boolean, p4: number): void; - glVertexAttribIFormat(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttribLFormat(p0: number, p1: number, p2: number, p3: number): void; - glVertexAttribBinding(p0: number, p1: number): void; - glVertexBindingDivisor(p0: number, p1: number): void; - } - interface GL43 extends org.lwjgl.opengl.GL42 { - } - const GLDebugMessageCallbackI: { - DESCRIPTOR: org.lwjgl.system.Callback$Descriptor; - } - interface GLDebugMessageCallbackI extends org.lwjgl.system.CallbackI { - invoke(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - (p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - } - const GL44: { - GL_MAX_VERTEX_ATTRIB_STRIDE: number; - GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED: number; - GL_TEXTURE_BUFFER_BINDING: number; - GL_MAP_PERSISTENT_BIT: number; - GL_MAP_COHERENT_BIT: number; - GL_DYNAMIC_STORAGE_BIT: number; - GL_CLIENT_STORAGE_BIT: number; - GL_BUFFER_IMMUTABLE_STORAGE: number; - GL_BUFFER_STORAGE_FLAGS: number; - GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT: number; - GL_CLEAR_TEXTURE: number; - GL_LOCATION_COMPONENT: number; - GL_TRANSFORM_FEEDBACK_BUFFER_INDEX: number; - GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE: number; - GL_QUERY_RESULT_NO_WAIT: number; - GL_QUERY_BUFFER: number; - GL_QUERY_BUFFER_BINDING: number; - GL_QUERY_BUFFER_BARRIER_BIT: number; - GL_MIRROR_CLAMP_TO_EDGE: number; - nglBufferStorage(p0: number, p1: number, p2: number, p3: number): void; - glBufferStorage(p0: number, p1: number, p2: number): void; - glBufferStorage(p0: number, p1: java.nio.ByteBuffer, p2: number): void; - glBufferStorage(p0: number, p1: java.nio.ShortBuffer, p2: number): void; - glBufferStorage(p0: number, p1: java.nio.IntBuffer, p2: number): void; - glBufferStorage(p0: number, p1: java.nio.FloatBuffer, p2: number): void; - glBufferStorage(p0: number, p1: java.nio.DoubleBuffer, p2: number): void; - glBufferStorage(p0: number, p1: Array, p2: number): void; - glBufferStorage(p0: number, p1: Array, p2: number): void; - glBufferStorage(p0: number, p1: kotlin.FloatArray, p2: number): void; - glBufferStorage(p0: number, p1: kotlin.DoubleArray, p2: number): void; - nglClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ByteBuffer | null | undefined): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ShortBuffer | null | undefined): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.IntBuffer | null | undefined): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.FloatBuffer | null | undefined): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.DoubleBuffer | null | undefined): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.FloatArray | null | undefined): void; - glClearTexSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.DoubleArray | null | undefined): void; - nglClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer | null | undefined): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer | null | undefined): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer | null | undefined): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.FloatBuffer | null | undefined): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.DoubleBuffer | null | undefined): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray | null | undefined): void; - glClearTexImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.DoubleArray | null | undefined): void; - nglBindBuffersBase(p0: number, p1: number, p2: number, p3: number): void; - glBindBuffersBase(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined): void; - glBindBuffersBase(p0: number, p1: number, p2: Array): void; - nglBindBuffersRange(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glBindBuffersRange(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: org.lwjgl.PointerBuffer | null | undefined, p4: org.lwjgl.PointerBuffer | null | undefined): void; - glBindBuffersRange(p0: number, p1: number, p2: Array, p3: org.lwjgl.PointerBuffer | null | undefined, p4: org.lwjgl.PointerBuffer | null | undefined): void; - nglBindTextures(p0: number, p1: number, p2: number): void; - glBindTextures(p0: number, p1: java.nio.IntBuffer | null | undefined): void; - glBindTextures(p0: number, p1: Array): void; - nglBindSamplers(p0: number, p1: number, p2: number): void; - glBindSamplers(p0: number, p1: java.nio.IntBuffer | null | undefined): void; - glBindSamplers(p0: number, p1: Array): void; - nglBindImageTextures(p0: number, p1: number, p2: number): void; - glBindImageTextures(p0: number, p1: java.nio.IntBuffer | null | undefined): void; - glBindImageTextures(p0: number, p1: Array): void; - nglBindVertexBuffers(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glBindVertexBuffers(p0: number, p1: java.nio.IntBuffer | null | undefined, p2: org.lwjgl.PointerBuffer | null | undefined, p3: java.nio.IntBuffer | null | undefined): void; - glBindVertexBuffers(p0: number, p1: Array, p2: org.lwjgl.PointerBuffer | null | undefined, p3: Array): void; - } - interface GL44 extends org.lwjgl.opengl.GL43 { - } - const GL45: { - GL_NEGATIVE_ONE_TO_ONE: number; - GL_ZERO_TO_ONE: number; - GL_CLIP_ORIGIN: number; - GL_CLIP_DEPTH_MODE: number; - GL_QUERY_WAIT_INVERTED: number; - GL_QUERY_NO_WAIT_INVERTED: number; - GL_QUERY_BY_REGION_WAIT_INVERTED: number; - GL_QUERY_BY_REGION_NO_WAIT_INVERTED: number; - GL_MAX_CULL_DISTANCES: number; - GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES: number; - GL_TEXTURE_TARGET: number; - GL_QUERY_TARGET: number; - GL_CONTEXT_RELEASE_BEHAVIOR: number; - GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH: number; - GL_GUILTY_CONTEXT_RESET: number; - GL_INNOCENT_CONTEXT_RESET: number; - GL_UNKNOWN_CONTEXT_RESET: number; - GL_RESET_NOTIFICATION_STRATEGY: number; - GL_LOSE_CONTEXT_ON_RESET: number; - GL_NO_RESET_NOTIFICATION: number; - GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT: number; - GL_CONTEXT_LOST: number; - glClipControl(p0: number, p1: number): void; - nglCreateTransformFeedbacks(p0: number, p1: number): void; - glCreateTransformFeedbacks(p0: java.nio.IntBuffer): void; - glCreateTransformFeedbacks(): number; - glCreateTransformFeedbacks(p0: Array): void; - glTransformFeedbackBufferBase(p0: number, p1: number, p2: number): void; - glTransformFeedbackBufferRange(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglGetTransformFeedbackiv(p0: number, p1: number, p2: number): void; - glGetTransformFeedbackiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTransformFeedbackiv(p0: number, p1: number, p2: Array): void; - glGetTransformFeedbacki(p0: number, p1: number): number; - glGetTransformFeedbacki(p0: number, p1: number, p2: number): number; - nglGetTransformFeedbacki_v(p0: number, p1: number, p2: number, p3: number): void; - glGetTransformFeedbacki_v(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetTransformFeedbacki_v(p0: number, p1: number, p2: number, p3: Array): void; - nglGetTransformFeedbacki64_v(p0: number, p1: number, p2: number, p3: number): void; - glGetTransformFeedbacki64_v(p0: number, p1: number, p2: number, p3: java.nio.LongBuffer): void; - glGetTransformFeedbacki64_v(p0: number, p1: number, p2: number, p3: Array): void; - glGetTransformFeedbacki64(p0: number, p1: number, p2: number): number; - nglCreateBuffers(p0: number, p1: number): void; - glCreateBuffers(p0: java.nio.IntBuffer): void; - glCreateBuffers(): number; - glCreateBuffers(p0: Array): void; - nglNamedBufferStorage(p0: number, p1: number, p2: number, p3: number): void; - glNamedBufferStorage(p0: number, p1: number, p2: number): void; - glNamedBufferStorage(p0: number, p1: java.nio.ByteBuffer, p2: number): void; - glNamedBufferStorage(p0: number, p1: java.nio.ShortBuffer, p2: number): void; - glNamedBufferStorage(p0: number, p1: java.nio.IntBuffer, p2: number): void; - glNamedBufferStorage(p0: number, p1: java.nio.FloatBuffer, p2: number): void; - glNamedBufferStorage(p0: number, p1: java.nio.DoubleBuffer, p2: number): void; - glNamedBufferStorage(p0: number, p1: Array, p2: number): void; - glNamedBufferStorage(p0: number, p1: Array, p2: number): void; - glNamedBufferStorage(p0: number, p1: kotlin.FloatArray, p2: number): void; - glNamedBufferStorage(p0: number, p1: kotlin.DoubleArray, p2: number): void; - nglNamedBufferData(p0: number, p1: number, p2: number, p3: number): void; - glNamedBufferData(p0: number, p1: number, p2: number): void; - glNamedBufferData(p0: number, p1: java.nio.ByteBuffer, p2: number): void; - glNamedBufferData(p0: number, p1: java.nio.ShortBuffer, p2: number): void; - glNamedBufferData(p0: number, p1: java.nio.IntBuffer, p2: number): void; - glNamedBufferData(p0: number, p1: java.nio.LongBuffer, p2: number): void; - glNamedBufferData(p0: number, p1: java.nio.FloatBuffer, p2: number): void; - glNamedBufferData(p0: number, p1: java.nio.DoubleBuffer, p2: number): void; - glNamedBufferData(p0: number, p1: Array, p2: number): void; - glNamedBufferData(p0: number, p1: Array, p2: number): void; - glNamedBufferData(p0: number, p1: Array, p2: number): void; - glNamedBufferData(p0: number, p1: kotlin.FloatArray, p2: number): void; - glNamedBufferData(p0: number, p1: kotlin.DoubleArray, p2: number): void; - nglNamedBufferSubData(p0: number, p1: number, p2: number, p3: number): void; - glNamedBufferSubData(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glNamedBufferSubData(p0: number, p1: number, p2: java.nio.ShortBuffer): void; - glNamedBufferSubData(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glNamedBufferSubData(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glNamedBufferSubData(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glNamedBufferSubData(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glNamedBufferSubData(p0: number, p1: number, p2: Array): void; - glNamedBufferSubData(p0: number, p1: number, p2: Array): void; - glNamedBufferSubData(p0: number, p1: number, p2: Array): void; - glNamedBufferSubData(p0: number, p1: number, p2: kotlin.FloatArray): void; - glNamedBufferSubData(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glCopyNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer | null | undefined): void; - glClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer | null | undefined): void; - glClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer | null | undefined): void; - glClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: java.nio.FloatBuffer | null | undefined): void; - glClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glClearNamedBufferData(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray | null | undefined): void; - nglClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer | null | undefined): void; - glClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ShortBuffer | null | undefined): void; - glClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.IntBuffer | null | undefined): void; - glClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.FloatBuffer | null | undefined): void; - glClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glClearNamedBufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.FloatArray | null | undefined): void; - nglMapNamedBuffer(p0: number, p1: number): number; - glMapNamedBuffer(p0: number, p1: number): java.nio.ByteBuffer | null | undefined; - glMapNamedBuffer(p0: number, p1: number, p2: java.nio.ByteBuffer | null | undefined): java.nio.ByteBuffer | null | undefined; - glMapNamedBuffer(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer | null | undefined): java.nio.ByteBuffer | null | undefined; - nglMapNamedBufferRange(p0: number, p1: number, p2: number, p3: number): number; - glMapNamedBufferRange(p0: number, p1: number, p2: number, p3: number): java.nio.ByteBuffer | null | undefined; - glMapNamedBufferRange(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer | null | undefined): java.nio.ByteBuffer | null | undefined; - glUnmapNamedBuffer(p0: number): boolean; - glFlushMappedNamedBufferRange(p0: number, p1: number, p2: number): void; - nglGetNamedBufferParameteriv(p0: number, p1: number, p2: number): void; - glGetNamedBufferParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetNamedBufferParameteriv(p0: number, p1: number, p2: Array): void; - glGetNamedBufferParameteri(p0: number, p1: number): number; - nglGetNamedBufferParameteri64v(p0: number, p1: number, p2: number): void; - glGetNamedBufferParameteri64v(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glGetNamedBufferParameteri64v(p0: number, p1: number, p2: Array): void; - glGetNamedBufferParameteri64(p0: number, p1: number): number; - nglGetNamedBufferPointerv(p0: number, p1: number, p2: number): void; - glGetNamedBufferPointerv(p0: number, p1: number, p2: org.lwjgl.PointerBuffer): void; - glGetNamedBufferPointer(p0: number, p1: number): number; - nglGetNamedBufferSubData(p0: number, p1: number, p2: number, p3: number): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: java.nio.ShortBuffer): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: java.nio.LongBuffer): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: Array): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: Array): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: Array): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetNamedBufferSubData(p0: number, p1: number, p2: kotlin.DoubleArray): void; - nglCreateFramebuffers(p0: number, p1: number): void; - glCreateFramebuffers(p0: java.nio.IntBuffer): void; - glCreateFramebuffers(): number; - glCreateFramebuffers(p0: Array): void; - glNamedFramebufferRenderbuffer(p0: number, p1: number, p2: number, p3: number): void; - glNamedFramebufferParameteri(p0: number, p1: number, p2: number): void; - glNamedFramebufferTexture(p0: number, p1: number, p2: number, p3: number): void; - glNamedFramebufferTextureLayer(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glNamedFramebufferDrawBuffer(p0: number, p1: number): void; - nglNamedFramebufferDrawBuffers(p0: number, p1: number, p2: number): void; - glNamedFramebufferDrawBuffers(p0: number, p1: java.nio.IntBuffer): void; - glNamedFramebufferDrawBuffers(p0: number, p1: number): void; - glNamedFramebufferDrawBuffers(p0: number, p1: Array): void; - glNamedFramebufferReadBuffer(p0: number, p1: number): void; - nglInvalidateNamedFramebufferData(p0: number, p1: number, p2: number): void; - glInvalidateNamedFramebufferData(p0: number, p1: java.nio.IntBuffer): void; - glInvalidateNamedFramebufferData(p0: number, p1: number): void; - glInvalidateNamedFramebufferData(p0: number, p1: Array): void; - nglInvalidateNamedFramebufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glInvalidateNamedFramebufferSubData(p0: number, p1: java.nio.IntBuffer, p2: number, p3: number, p4: number, p5: number): void; - glInvalidateNamedFramebufferSubData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glInvalidateNamedFramebufferSubData(p0: number, p1: Array, p2: number, p3: number, p4: number, p5: number): void; - nglClearNamedFramebufferiv(p0: number, p1: number, p2: number, p3: number): void; - glClearNamedFramebufferiv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glClearNamedFramebufferiv(p0: number, p1: number, p2: number, p3: Array): void; - nglClearNamedFramebufferuiv(p0: number, p1: number, p2: number, p3: number): void; - glClearNamedFramebufferuiv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glClearNamedFramebufferuiv(p0: number, p1: number, p2: number, p3: Array): void; - nglClearNamedFramebufferfv(p0: number, p1: number, p2: number, p3: number): void; - glClearNamedFramebufferfv(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glClearNamedFramebufferfv(p0: number, p1: number, p2: number, p3: kotlin.FloatArray): void; - glClearNamedFramebufferfi(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glBlitNamedFramebuffer(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number): void; - glCheckNamedFramebufferStatus(p0: number, p1: number): number; - nglGetNamedFramebufferParameteriv(p0: number, p1: number, p2: number): void; - glGetNamedFramebufferParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetNamedFramebufferParameteriv(p0: number, p1: number, p2: Array): void; - glGetNamedFramebufferParameteri(p0: number, p1: number): number; - nglGetNamedFramebufferAttachmentParameteriv(p0: number, p1: number, p2: number, p3: number): void; - glGetNamedFramebufferAttachmentParameteriv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetNamedFramebufferAttachmentParameteriv(p0: number, p1: number, p2: number, p3: Array): void; - glGetNamedFramebufferAttachmentParameteri(p0: number, p1: number, p2: number): number; - nglCreateRenderbuffers(p0: number, p1: number): void; - glCreateRenderbuffers(p0: java.nio.IntBuffer): void; - glCreateRenderbuffers(): number; - glCreateRenderbuffers(p0: Array): void; - glNamedRenderbufferStorage(p0: number, p1: number, p2: number, p3: number): void; - glNamedRenderbufferStorageMultisample(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglGetNamedRenderbufferParameteriv(p0: number, p1: number, p2: number): void; - glGetNamedRenderbufferParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetNamedRenderbufferParameteriv(p0: number, p1: number, p2: Array): void; - glGetNamedRenderbufferParameteri(p0: number, p1: number): number; - nglCreateTextures(p0: number, p1: number, p2: number): void; - glCreateTextures(p0: number, p1: java.nio.IntBuffer): void; - glCreateTextures(p0: number): number; - glCreateTextures(p0: number, p1: Array): void; - glTextureBuffer(p0: number, p1: number, p2: number): void; - glTextureBufferRange(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glTextureStorage1D(p0: number, p1: number, p2: number, p3: number): void; - glTextureStorage2D(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glTextureStorage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glTextureStorage2DMultisample(p0: number, p1: number, p2: number, p3: number, p4: number, p5: boolean): void; - glTextureStorage3DMultisample(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: boolean): void; - nglTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ShortBuffer): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.IntBuffer): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.FloatBuffer): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.DoubleBuffer): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.FloatArray): void; - glTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.DoubleArray): void; - nglTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ByteBuffer): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ShortBuffer): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.IntBuffer): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.FloatBuffer): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.DoubleBuffer): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.FloatArray): void; - glTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.DoubleArray): void; - nglTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ByteBuffer): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ShortBuffer): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.IntBuffer): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.FloatBuffer): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.DoubleBuffer): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.FloatArray): void; - glTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.DoubleArray): void; - nglCompressedTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glCompressedTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; - glCompressedTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: java.nio.ByteBuffer): void; - nglCompressedTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glCompressedTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glCompressedTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.ByteBuffer): void; - nglCompressedTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glCompressedTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): void; - glCompressedTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: java.nio.ByteBuffer): void; - glCopyTextureSubImage1D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glCopyTextureSubImage2D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glCopyTextureSubImage3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; - glTextureParameterf(p0: number, p1: number, p2: number): void; - nglTextureParameterfv(p0: number, p1: number, p2: number): void; - glTextureParameterfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glTextureParameterfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glTextureParameteri(p0: number, p1: number, p2: number): void; - nglTextureParameterIiv(p0: number, p1: number, p2: number): void; - glTextureParameterIiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTextureParameterIiv(p0: number, p1: number, p2: Array): void; - glTextureParameterIi(p0: number, p1: number, p2: number): void; - nglTextureParameterIuiv(p0: number, p1: number, p2: number): void; - glTextureParameterIuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTextureParameterIuiv(p0: number, p1: number, p2: Array): void; - glTextureParameterIui(p0: number, p1: number, p2: number): void; - nglTextureParameteriv(p0: number, p1: number, p2: number): void; - glTextureParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glTextureParameteriv(p0: number, p1: number, p2: Array): void; - glGenerateTextureMipmap(p0: number): void; - glBindTextureUnit(p0: number, p1: number): void; - nglGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.FloatBuffer): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.DoubleBuffer): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): void; - glGetTextureImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.DoubleArray): void; - nglGetCompressedTextureImage(p0: number, p1: number, p2: number, p3: number): void; - glGetCompressedTextureImage(p0: number, p1: number, p2: number, p3: number): void; - glGetCompressedTextureImage(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - nglGetTextureLevelParameterfv(p0: number, p1: number, p2: number, p3: number): void; - glGetTextureLevelParameterfv(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glGetTextureLevelParameterfv(p0: number, p1: number, p2: number, p3: kotlin.FloatArray): void; - glGetTextureLevelParameterf(p0: number, p1: number, p2: number): number; - nglGetTextureLevelParameteriv(p0: number, p1: number, p2: number, p3: number): void; - glGetTextureLevelParameteriv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetTextureLevelParameteriv(p0: number, p1: number, p2: number, p3: Array): void; - glGetTextureLevelParameteri(p0: number, p1: number, p2: number): number; - nglGetTextureParameterfv(p0: number, p1: number, p2: number): void; - glGetTextureParameterfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetTextureParameterfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetTextureParameterf(p0: number, p1: number): number; - nglGetTextureParameterIiv(p0: number, p1: number, p2: number): void; - glGetTextureParameterIiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTextureParameterIiv(p0: number, p1: number, p2: Array): void; - glGetTextureParameterIi(p0: number, p1: number): number; - nglGetTextureParameterIuiv(p0: number, p1: number, p2: number): void; - glGetTextureParameterIuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTextureParameterIuiv(p0: number, p1: number, p2: Array): void; - glGetTextureParameterIui(p0: number, p1: number): number; - nglGetTextureParameteriv(p0: number, p1: number, p2: number): void; - glGetTextureParameteriv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetTextureParameteriv(p0: number, p1: number, p2: Array): void; - glGetTextureParameteri(p0: number, p1: number): number; - nglCreateVertexArrays(p0: number, p1: number): void; - glCreateVertexArrays(p0: java.nio.IntBuffer): void; - glCreateVertexArrays(): number; - glCreateVertexArrays(p0: Array): void; - glDisableVertexArrayAttrib(p0: number, p1: number): void; - glEnableVertexArrayAttrib(p0: number, p1: number): void; - glVertexArrayElementBuffer(p0: number, p1: number): void; - glVertexArrayVertexBuffer(p0: number, p1: number, p2: number, p3: number, p4: number): void; - nglVertexArrayVertexBuffers(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glVertexArrayVertexBuffers(p0: number, p1: number, p2: java.nio.IntBuffer | null | undefined, p3: org.lwjgl.PointerBuffer | null | undefined, p4: java.nio.IntBuffer | null | undefined): void; - glVertexArrayVertexBuffers(p0: number, p1: number, p2: Array, p3: org.lwjgl.PointerBuffer | null | undefined, p4: Array): void; - glVertexArrayAttribFormat(p0: number, p1: number, p2: number, p3: number, p4: boolean, p5: number): void; - glVertexArrayAttribIFormat(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexArrayAttribLFormat(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glVertexArrayAttribBinding(p0: number, p1: number, p2: number): void; - glVertexArrayBindingDivisor(p0: number, p1: number, p2: number): void; - nglGetVertexArrayiv(p0: number, p1: number, p2: number): void; - glGetVertexArrayiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetVertexArrayiv(p0: number, p1: number, p2: Array): void; - glGetVertexArrayi(p0: number, p1: number): number; - nglGetVertexArrayIndexediv(p0: number, p1: number, p2: number, p3: number): void; - glGetVertexArrayIndexediv(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetVertexArrayIndexediv(p0: number, p1: number, p2: number, p3: Array): void; - glGetVertexArrayIndexedi(p0: number, p1: number, p2: number): number; - nglGetVertexArrayIndexed64iv(p0: number, p1: number, p2: number, p3: number): void; - glGetVertexArrayIndexed64iv(p0: number, p1: number, p2: number, p3: java.nio.LongBuffer): void; - glGetVertexArrayIndexed64iv(p0: number, p1: number, p2: number, p3: Array): void; - glGetVertexArrayIndexed64i(p0: number, p1: number, p2: number): number; - nglCreateSamplers(p0: number, p1: number): void; - glCreateSamplers(p0: java.nio.IntBuffer): void; - glCreateSamplers(): number; - glCreateSamplers(p0: Array): void; - nglCreateProgramPipelines(p0: number, p1: number): void; - glCreateProgramPipelines(p0: java.nio.IntBuffer): void; - glCreateProgramPipelines(): number; - glCreateProgramPipelines(p0: Array): void; - nglCreateQueries(p0: number, p1: number, p2: number): void; - glCreateQueries(p0: number, p1: java.nio.IntBuffer): void; - glCreateQueries(p0: number): number; - glCreateQueries(p0: number, p1: Array): void; - glGetQueryBufferObjectiv(p0: number, p1: number, p2: number, p3: number): void; - glGetQueryBufferObjectuiv(p0: number, p1: number, p2: number, p3: number): void; - glGetQueryBufferObjecti64v(p0: number, p1: number, p2: number, p3: number): void; - glGetQueryBufferObjectui64v(p0: number, p1: number, p2: number, p3: number): void; - glMemoryBarrierByRegion(p0: number): void; - nglGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ByteBuffer): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.ShortBuffer): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.IntBuffer): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.FloatBuffer): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: java.nio.DoubleBuffer): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: Array): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.FloatArray): void; - glGetTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: kotlin.DoubleArray): void; - nglGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ByteBuffer): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.ShortBuffer): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.IntBuffer): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.FloatBuffer): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: java.nio.DoubleBuffer): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: Array): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.FloatArray): void; - glGetCompressedTextureSubImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: kotlin.DoubleArray): void; - glTextureBarrier(): void; - glGetGraphicsResetStatus(): number; - nglGetnMapdv(p0: number, p1: number, p2: number, p3: number): void; - glGetnMapdv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetnMapdv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glGetnMapd(p0: number, p1: number): number; - nglGetnMapfv(p0: number, p1: number, p2: number, p3: number): void; - glGetnMapfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetnMapfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetnMapf(p0: number, p1: number): number; - nglGetnMapiv(p0: number, p1: number, p2: number, p3: number): void; - glGetnMapiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetnMapiv(p0: number, p1: number, p2: Array): void; - glGetnMapi(p0: number, p1: number): number; - nglGetnPixelMapfv(p0: number, p1: number, p2: number): void; - glGetnPixelMapfv(p0: number, p1: java.nio.FloatBuffer): void; - glGetnPixelMapfv(p0: number, p1: kotlin.FloatArray): void; - nglGetnPixelMapuiv(p0: number, p1: number, p2: number): void; - glGetnPixelMapuiv(p0: number, p1: java.nio.IntBuffer): void; - glGetnPixelMapuiv(p0: number, p1: Array): void; - nglGetnPixelMapusv(p0: number, p1: number, p2: number): void; - glGetnPixelMapusv(p0: number, p1: java.nio.ShortBuffer): void; - glGetnPixelMapusv(p0: number, p1: Array): void; - nglGetnPolygonStipple(p0: number, p1: number): void; - glGetnPolygonStipple(p0: number, p1: number): void; - glGetnPolygonStipple(p0: java.nio.ByteBuffer): void; - nglGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.ShortBuffer): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.IntBuffer): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.FloatBuffer): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: java.nio.DoubleBuffer): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: Array): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): void; - glGetnTexImage(p0: number, p1: number, p2: number, p3: number, p4: kotlin.DoubleArray): void; - nglReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ByteBuffer): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.ShortBuffer): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.IntBuffer): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: java.nio.FloatBuffer): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): void; - glReadnPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.FloatArray): void; - nglGetnColorTable(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: java.nio.ShortBuffer): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: java.nio.IntBuffer): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: java.nio.FloatBuffer): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: Array): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: Array): void; - glGetnColorTable(p0: number, p1: number, p2: number, p3: kotlin.FloatArray): void; - nglGetnConvolutionFilter(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetnConvolutionFilter(p0: number, p1: number, p2: number, p3: number, p4: number): void; - glGetnConvolutionFilter(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer): void; - nglGetnSeparableFilter(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; - glGetnSeparableFilter(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: java.nio.ByteBuffer | null | undefined): void; - glGetnSeparableFilter(p0: number, p1: number, p2: number, p3: java.nio.ByteBuffer, p4: java.nio.ByteBuffer, p5: java.nio.ByteBuffer | null | undefined): void; - nglGetnHistogram(p0: number, p1: boolean, p2: number, p3: number, p4: number, p5: number): void; - glGetnHistogram(p0: number, p1: boolean, p2: number, p3: number, p4: number, p5: number): void; - glGetnHistogram(p0: number, p1: boolean, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - nglGetnMinmax(p0: number, p1: boolean, p2: number, p3: number, p4: number, p5: number): void; - glGetnMinmax(p0: number, p1: boolean, p2: number, p3: number, p4: number, p5: number): void; - glGetnMinmax(p0: number, p1: boolean, p2: number, p3: number, p4: java.nio.ByteBuffer): void; - nglGetnCompressedTexImage(p0: number, p1: number, p2: number, p3: number): void; - glGetnCompressedTexImage(p0: number, p1: number, p2: number, p3: number): void; - glGetnCompressedTexImage(p0: number, p1: number, p2: java.nio.ByteBuffer): void; - nglGetnUniformfv(p0: number, p1: number, p2: number, p3: number): void; - glGetnUniformfv(p0: number, p1: number, p2: java.nio.FloatBuffer): void; - glGetnUniformfv(p0: number, p1: number, p2: kotlin.FloatArray): void; - glGetnUniformf(p0: number, p1: number): number; - nglGetnUniformdv(p0: number, p1: number, p2: number, p3: number): void; - glGetnUniformdv(p0: number, p1: number, p2: java.nio.DoubleBuffer): void; - glGetnUniformdv(p0: number, p1: number, p2: kotlin.DoubleArray): void; - glGetnUniformd(p0: number, p1: number): number; - nglGetnUniformiv(p0: number, p1: number, p2: number, p3: number): void; - glGetnUniformiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetnUniformiv(p0: number, p1: number, p2: Array): void; - glGetnUniformi(p0: number, p1: number): number; - nglGetnUniformuiv(p0: number, p1: number, p2: number, p3: number): void; - glGetnUniformuiv(p0: number, p1: number, p2: java.nio.IntBuffer): void; - glGetnUniformuiv(p0: number, p1: number, p2: Array): void; - glGetnUniformui(p0: number, p1: number): number; - } - interface GL45 extends org.lwjgl.opengl.GL44 { - } - } - namespace system { - namespace libffi { - const FFICIF: { - Buffer: typeof org.lwjgl.system.libffi.FFICIF$Buffer; - SIZEOF: number; - ALIGNOF: number; - ABI: number; - NARGS: number; - ARG_TYPES: number; - RTYPE: number; - BYTES: number; - FLAGS: number; - new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFICIF; - create(): org.lwjgl.system.libffi.FFICIF; - create(p0: number): org.lwjgl.system.libffi.FFICIF; - create(p0: number): org.lwjgl.system.libffi.FFICIF$Buffer; - create(p0: number, p1: number): org.lwjgl.system.libffi.FFICIF$Buffer; - malloc(): org.lwjgl.system.libffi.FFICIF; - malloc(p0: number): org.lwjgl.system.libffi.FFICIF$Buffer; - malloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF; - malloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF$Buffer; - calloc(): org.lwjgl.system.libffi.FFICIF; - calloc(p0: number): org.lwjgl.system.libffi.FFICIF$Buffer; - calloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF; - calloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF$Buffer; - createSafe(p0: number): org.lwjgl.system.libffi.FFICIF | null | undefined; - createSafe(p0: number, p1: number): org.lwjgl.system.libffi.FFICIF$Buffer | null | undefined; - nabi(p0: number): number; - nnargs(p0: number): number; - narg_types(p0: number): org.lwjgl.PointerBuffer; - nrtype(p0: number): org.lwjgl.system.libffi.FFIType; - nbytes(p0: number): number; - nflags(p0: number): number; - } - interface FFICIF extends org.lwjgl.system.Struct, org.lwjgl.system.NativeResource { - abi(): number; - nargs(): number; - arg_types(): org.lwjgl.PointerBuffer; - rtype(): org.lwjgl.system.libffi.FFIType; - bytes(): number; - flags(): number; - } - const FFIType: { - Buffer: typeof org.lwjgl.system.libffi.FFIType$Buffer; - SIZEOF: number; - ALIGNOF: number; - SIZE: number; - ALIGNMENT: number; - TYPE: number; - ELEMENTS: number; - new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFIType; - create(): org.lwjgl.system.libffi.FFIType; - create(p0: number): org.lwjgl.system.libffi.FFIType; - create(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; - create(p0: number, p1: number): org.lwjgl.system.libffi.FFIType$Buffer; - malloc(): org.lwjgl.system.libffi.FFIType; - malloc(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; - malloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType; - malloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType$Buffer; - calloc(): org.lwjgl.system.libffi.FFIType; - calloc(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; - calloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType; - calloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType$Buffer; - createSafe(p0: number): org.lwjgl.system.libffi.FFIType | null | undefined; - createSafe(p0: number, p1: number): org.lwjgl.system.libffi.FFIType$Buffer | null | undefined; - nsize(p0: number): number; - nsize(p0: number, p1: number): void; - nalignment(p0: number): number; - nalignment(p0: number, p1: number): void; - ntype(p0: number): number; - ntype(p0: number, p1: number): void; - nelements(p0: number, p1: number): org.lwjgl.PointerBuffer | null | undefined; - nelements(p0: number, p1: org.lwjgl.PointerBuffer | null | undefined): void; - } - interface FFIType extends org.lwjgl.system.Struct, org.lwjgl.system.NativeResource { - size(): number; - size(p0: number): org.lwjgl.system.libffi.FFIType; - alignment(): number; - alignment(p0: number): org.lwjgl.system.libffi.FFIType; - type(): number; - type(p0: number): org.lwjgl.system.libffi.FFIType; - elements(p0: number): org.lwjgl.PointerBuffer | null | undefined; - elements(p0: org.lwjgl.PointerBuffer | null | undefined): org.lwjgl.system.libffi.FFIType; - set(p0: number, p1: number, p2: number, p3: org.lwjgl.PointerBuffer | null | undefined): org.lwjgl.system.libffi.FFIType; - set(p0: org.lwjgl.system.libffi.FFIType): org.lwjgl.system.libffi.FFIType; - } - const FFIType$Buffer: { - new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFIType$Buffer; - new(p0: number, p1: number): org.lwjgl.system.libffi.FFIType$Buffer; - } - interface FFIType$Buffer extends org.lwjgl.system.StructBuffer, org.lwjgl.system.NativeResource { - size(): number; - size(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; - alignment(): number; - alignment(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; - type(): number; - type(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; - elements(p0: number): org.lwjgl.PointerBuffer | null | undefined; - elements(p0: org.lwjgl.PointerBuffer | null | undefined): org.lwjgl.system.libffi.FFIType$Buffer; - } - const FFICIF$Buffer: { - new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFICIF$Buffer; - new(p0: number, p1: number): org.lwjgl.system.libffi.FFICIF$Buffer; - } - interface FFICIF$Buffer extends org.lwjgl.system.StructBuffer, org.lwjgl.system.NativeResource { - abi(): number; - nargs(): number; - arg_types(): org.lwjgl.PointerBuffer; - rtype(): org.lwjgl.system.libffi.FFIType; - bytes(): number; - flags(): number; - } - } - interface CustomBuffer extends org.lwjgl.system.Pointer$Default { - mark(): SELF; - position(): number; - position(p0: number): SELF; - limit(): number; - limit(p0: number): SELF; - capacity(): number; - sizeof(): number; - address0(): number; - address(p0: number): number; - free(): void; - reset(): SELF; - clear(): SELF; - flip(): SELF; - rewind(): SELF; - remaining(): number; - hasRemaining(): boolean; - slice(): SELF; - slice(p0: number, p1: number): SELF; - duplicate(): SELF; - put(p0: SELF): SELF; - compact(): SELF; - } - interface Pointer$Default extends org.lwjgl.system.Pointer { - } - const Pointer: { - Default: typeof org.lwjgl.system.Pointer$Default; - POINTER_SIZE: number; - POINTER_SHIFT: number; - CLONG_SIZE: number; - CLONG_SHIFT: number; - BITS32: boolean; - BITS64: boolean; - } - interface Pointer { - address(): number; - } - interface CallbackI extends org.lwjgl.system.Pointer { - getDescriptor(): org.lwjgl.system.Callback$Descriptor; - callback(p0: number, p1: number): void; - } - const Callback$Descriptor: { - new(p0: java.lang.invoke.MethodHandles$Lookup, p1: org.lwjgl.system.libffi.FFICIF): org.lwjgl.system.Callback$Descriptor; - } - interface Callback$Descriptor { + negate(p0: org.joml.Vector2L): org.joml.Vector2L; + min(p0: org.joml.Vector2Lc, p1: org.joml.Vector2L): org.joml.Vector2L; + max(p0: org.joml.Vector2Lc, p1: org.joml.Vector2L): org.joml.Vector2L; + maxComponent(): number; + minComponent(): number; + absolute(p0: org.joml.Vector2L): org.joml.Vector2L; + } + const Matrix3x2fStack: { + new(p0: number): org.joml.Matrix3x2fStack; + new(): org.joml.Matrix3x2fStack; + } + interface Matrix3x2fStack extends org.joml.Matrix3x2f { + clear(): org.joml.Matrix3x2fStack; + pushMatrix(): org.joml.Matrix3x2fStack; + popMatrix(): org.joml.Matrix3x2fStack; + } + } + namespace slf4j { + namespace event { + const Level: { + ERROR: org.slf4j.event.Level; + WARN: org.slf4j.event.Level; + INFO: org.slf4j.event.Level; + DEBUG: org.slf4j.event.Level; + TRACE: org.slf4j.event.Level; + entries: kotlin.enums.EnumEntries; + intToLevel(p0: number): org.slf4j.event.Level; + values(): Array; + valueOf(value: string): org.slf4j.event.Level; } - const Struct: { - validate(p0: number, p1: number, p2: number, p3: org.lwjgl.system.Struct$StructValidation): void; - validate(p0: number, p1: number, p2: number, p3: org.lwjgl.system.Struct$StructValidation): void; + interface Level extends kotlin.Enum { + toInt(): number; } - interface Struct extends org.lwjgl.system.Pointer$Default { - sizeof(): number; - clear(): void; - free(): void; - isNull(p0: number): boolean; + } + namespace spi { + interface LoggingEventBuilder { + setCause(p0: kotlin.Throwable): org.slf4j.spi.LoggingEventBuilder; + addMarker(p0: org.slf4j.Marker): org.slf4j.spi.LoggingEventBuilder; + addArgument(p0: any): org.slf4j.spi.LoggingEventBuilder; + addArgument(p0: unknown): org.slf4j.spi.LoggingEventBuilder; + addKeyValue(p0: string, p1: any): org.slf4j.spi.LoggingEventBuilder; + addKeyValue(p0: string, p1: unknown): org.slf4j.spi.LoggingEventBuilder; + setMessage(p0: string): org.slf4j.spi.LoggingEventBuilder; + setMessage(p0: unknown): org.slf4j.spi.LoggingEventBuilder; + log(): void; + log(p0: string): void; + log(p0: string, p1: any): void; + log(p0: string, p1: any, p2: any): void; + log(p0: string, p1: any): void; + log(p0: unknown): void; } - interface StructBuffer extends org.lwjgl.system.CustomBuffer, kotlin.collections.MutableIterable { - get(): T; - get(p0: T): SELF; - get(p0: number): T; - get(p0: number, p1: T): SELF; - put(p0: T): SELF; - put(p0: number, p1: T): SELF; - apply(p0: unknown): SELF; - apply(p0: number, p1: unknown): SELF; - stream(): java.util.stream.Stream; - parallelStream(): java.util.stream.Stream; + } + const Logger: { + ROOT_LOGGER_NAME: string; + } + interface Logger { + getName(): string; + makeLoggingEventBuilder(p0: org.slf4j.event.Level): org.slf4j.spi.LoggingEventBuilder; + atLevel(p0: org.slf4j.event.Level): org.slf4j.spi.LoggingEventBuilder; + isEnabledForLevel(p0: org.slf4j.event.Level): boolean; + isTraceEnabled(): boolean; + isTraceEnabled(p0: org.slf4j.Marker): boolean; + trace(p0: string): void; + trace(p0: string, p1: any): void; + trace(p0: string, p1: any, p2: any): void; + trace(p0: string, p1: any): void; + trace(p0: string, p1: kotlin.Throwable): void; + trace(p0: org.slf4j.Marker, p1: string): void; + trace(p0: org.slf4j.Marker, p1: string, p2: any): void; + trace(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; + trace(p0: org.slf4j.Marker, p1: string, p2: any): void; + trace(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; + atTrace(): org.slf4j.spi.LoggingEventBuilder; + isDebugEnabled(): boolean; + isDebugEnabled(p0: org.slf4j.Marker): boolean; + debug(p0: string): void; + debug(p0: string, p1: any): void; + debug(p0: string, p1: any, p2: any): void; + debug(p0: string, p1: any): void; + debug(p0: string, p1: kotlin.Throwable): void; + debug(p0: org.slf4j.Marker, p1: string): void; + debug(p0: org.slf4j.Marker, p1: string, p2: any): void; + debug(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; + debug(p0: org.slf4j.Marker, p1: string, p2: any): void; + debug(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; + atDebug(): org.slf4j.spi.LoggingEventBuilder; + isInfoEnabled(): boolean; + isInfoEnabled(p0: org.slf4j.Marker): boolean; + info(p0: string): void; + info(p0: string, p1: any): void; + info(p0: string, p1: any, p2: any): void; + info(p0: string, p1: any): void; + info(p0: string, p1: kotlin.Throwable): void; + info(p0: org.slf4j.Marker, p1: string): void; + info(p0: org.slf4j.Marker, p1: string, p2: any): void; + info(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; + info(p0: org.slf4j.Marker, p1: string, p2: any): void; + info(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; + atInfo(): org.slf4j.spi.LoggingEventBuilder; + isWarnEnabled(): boolean; + isWarnEnabled(p0: org.slf4j.Marker): boolean; + warn(p0: string): void; + warn(p0: string, p1: any): void; + warn(p0: string, p1: any): void; + warn(p0: string, p1: any, p2: any): void; + warn(p0: string, p1: kotlin.Throwable): void; + warn(p0: org.slf4j.Marker, p1: string): void; + warn(p0: org.slf4j.Marker, p1: string, p2: any): void; + warn(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; + warn(p0: org.slf4j.Marker, p1: string, p2: any): void; + warn(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; + atWarn(): org.slf4j.spi.LoggingEventBuilder; + isErrorEnabled(): boolean; + isErrorEnabled(p0: org.slf4j.Marker): boolean; + error(p0: string): void; + error(p0: string, p1: any): void; + error(p0: string, p1: any, p2: any): void; + error(p0: string, p1: any): void; + error(p0: string, p1: kotlin.Throwable): void; + error(p0: org.slf4j.Marker, p1: string): void; + error(p0: org.slf4j.Marker, p1: string, p2: any): void; + error(p0: org.slf4j.Marker, p1: string, p2: any, p3: any): void; + error(p0: org.slf4j.Marker, p1: string, p2: any): void; + error(p0: org.slf4j.Marker, p1: string, p2: kotlin.Throwable): void; + atError(): org.slf4j.spi.LoggingEventBuilder; + } + const Marker: { + ANY_MARKER: string; + ANY_NON_NULL_MARKER: string; + } + interface Marker extends java.io.Serializable { + getName(): string; + add(p0: org.slf4j.Marker): void; + remove(p0: org.slf4j.Marker): boolean; + hasChildren(): boolean; + hasReferences(): boolean; + iterator(): kotlin.collections.MutableIterator; + contains(p0: org.slf4j.Marker): boolean; + contains(p0: string): boolean; + } + } + namespace apache { + namespace commons { + namespace io { } - interface Struct$StructValidation { - validate(p0: number): void; - (p0: number): void; + namespace lang3 { } - interface NativeResource extends java.lang.AutoCloseable { - free(): void; + } + } + namespace spongepowered { + namespace asm { + namespace mixin { + namespace injection { + namespace callback { + const CallbackInfo: { + new(p0: string, p1: boolean): org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + getCallInfoClassName(p0: org.objectweb.asm.Type): string; + } + interface CallbackInfo extends org.spongepowered.asm.mixin.injection.callback.Cancellable { + getId(): string; + } + interface Cancellable { + isCancellable(): boolean; + isCancelled(): boolean; + cancel(): void; + } + } + } } - const MemoryStack: { - create(): org.lwjgl.system.MemoryStack; - create(p0: number): org.lwjgl.system.MemoryStack; - create(p0: java.nio.ByteBuffer): org.lwjgl.system.MemoryStack; - ncreate(p0: number, p1: number): org.lwjgl.system.MemoryStack; - stackGet(): org.lwjgl.system.MemoryStack; - stackPush(): org.lwjgl.system.MemoryStack; - stackPop(): org.lwjgl.system.MemoryStack; - nstackMalloc(p0: number): number; - nstackMalloc(p0: number, p1: number): number; - nstackCalloc(p0: number, p1: number, p2: number): number; - stackMalloc(p0: number): java.nio.ByteBuffer; - stackCalloc(p0: number): java.nio.ByteBuffer; - stackBytes(p0: number): java.nio.ByteBuffer; - stackBytes(p0: number, p1: number): java.nio.ByteBuffer; - stackBytes(p0: number, p1: number, p2: number): java.nio.ByteBuffer; - stackBytes(p0: number, p1: number, p2: number, p3: number): java.nio.ByteBuffer; - stackBytes(p0: number): java.nio.ByteBuffer; - stackMallocShort(p0: number): java.nio.ShortBuffer; - stackCallocShort(p0: number): java.nio.ShortBuffer; - stackShorts(p0: number): java.nio.ShortBuffer; - stackShorts(p0: number, p1: number): java.nio.ShortBuffer; - stackShorts(p0: number, p1: number, p2: number): java.nio.ShortBuffer; - stackShorts(p0: number, p1: number, p2: number, p3: number): java.nio.ShortBuffer; - stackShorts(p0: number): java.nio.ShortBuffer; - stackMallocInt(p0: number): java.nio.IntBuffer; - stackCallocInt(p0: number): java.nio.IntBuffer; - stackInts(p0: number): java.nio.IntBuffer; - stackInts(p0: number, p1: number): java.nio.IntBuffer; - stackInts(p0: number, p1: number, p2: number): java.nio.IntBuffer; - stackInts(p0: number, p1: number, p2: number, p3: number): java.nio.IntBuffer; - stackInts(p0: number): java.nio.IntBuffer; - stackMallocLong(p0: number): java.nio.LongBuffer; - stackCallocLong(p0: number): java.nio.LongBuffer; - stackLongs(p0: number): java.nio.LongBuffer; - stackLongs(p0: number, p1: number): java.nio.LongBuffer; - stackLongs(p0: number, p1: number, p2: number): java.nio.LongBuffer; - stackLongs(p0: number, p1: number, p2: number, p3: number): java.nio.LongBuffer; - stackLongs(p0: number): java.nio.LongBuffer; - stackMallocCLong(p0: number): org.lwjgl.CLongBuffer; - stackCallocCLong(p0: number): org.lwjgl.CLongBuffer; - stackCLongs(p0: number): org.lwjgl.CLongBuffer; - stackCLongs(p0: number, p1: number): org.lwjgl.CLongBuffer; - stackCLongs(p0: number, p1: number, p2: number): org.lwjgl.CLongBuffer; - stackCLongs(p0: number, p1: number, p2: number, p3: number): org.lwjgl.CLongBuffer; - stackCLongs(p0: number): org.lwjgl.CLongBuffer; - stackMallocFloat(p0: number): java.nio.FloatBuffer; - stackCallocFloat(p0: number): java.nio.FloatBuffer; - stackFloats(p0: number): java.nio.FloatBuffer; - stackFloats(p0: number, p1: number): java.nio.FloatBuffer; - stackFloats(p0: number, p1: number, p2: number): java.nio.FloatBuffer; - stackFloats(p0: number, p1: number, p2: number, p3: number): java.nio.FloatBuffer; - stackFloats(p0: number): java.nio.FloatBuffer; - stackMallocDouble(p0: number): java.nio.DoubleBuffer; - stackCallocDouble(p0: number): java.nio.DoubleBuffer; - stackDoubles(p0: number): java.nio.DoubleBuffer; - stackDoubles(p0: number, p1: number): java.nio.DoubleBuffer; - stackDoubles(p0: number, p1: number, p2: number): java.nio.DoubleBuffer; - stackDoubles(p0: number, p1: number, p2: number, p3: number): java.nio.DoubleBuffer; - stackDoubles(p0: number): java.nio.DoubleBuffer; - stackMallocPointer(p0: number): org.lwjgl.PointerBuffer; - stackCallocPointer(p0: number): org.lwjgl.PointerBuffer; - stackPointers(p0: number): org.lwjgl.PointerBuffer; - stackPointers(p0: number, p1: number): org.lwjgl.PointerBuffer; - stackPointers(p0: number, p1: number, p2: number): org.lwjgl.PointerBuffer; - stackPointers(p0: number, p1: number, p2: number, p3: number): org.lwjgl.PointerBuffer; - stackPointers(p0: number): org.lwjgl.PointerBuffer; - stackPointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - stackPointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - stackPointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - stackPointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer, p3: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - stackPointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - stackASCII(p0: kotlin.CharSequence): java.nio.ByteBuffer; - stackASCII(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; - stackUTF8(p0: kotlin.CharSequence): java.nio.ByteBuffer; - stackUTF8(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; - stackUTF16(p0: kotlin.CharSequence): java.nio.ByteBuffer; - stackUTF16(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; - stackASCIISafe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; - stackASCIISafe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; - stackUTF8Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; - stackUTF8Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; - stackUTF16Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; - stackUTF16Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; + } + } + namespace objectweb { + namespace asm { + const Type: { + VOID: number; + BOOLEAN: number; + CHAR: number; + BYTE: number; + SHORT: number; + INT: number; + FLOAT: number; + LONG: number; + DOUBLE: number; + ARRAY: number; + OBJECT: number; + METHOD: number; + VOID_TYPE: org.objectweb.asm.Type; + BOOLEAN_TYPE: org.objectweb.asm.Type; + CHAR_TYPE: org.objectweb.asm.Type; + BYTE_TYPE: org.objectweb.asm.Type; + SHORT_TYPE: org.objectweb.asm.Type; + INT_TYPE: org.objectweb.asm.Type; + FLOAT_TYPE: org.objectweb.asm.Type; + LONG_TYPE: org.objectweb.asm.Type; + DOUBLE_TYPE: org.objectweb.asm.Type; + getType(p0: string): org.objectweb.asm.Type; + getType(p0: java.lang.Class): org.objectweb.asm.Type; + getType(p0: java.lang.reflect.Constructor): org.objectweb.asm.Type; + getType(p0: java.lang.reflect.Method): org.objectweb.asm.Type; + getObjectType(p0: string): org.objectweb.asm.Type; + getMethodType(p0: string): org.objectweb.asm.Type; + getMethodType(p0: org.objectweb.asm.Type, p1: org.objectweb.asm.Type): org.objectweb.asm.Type; + getArgumentTypes(p0: string): Array; + getArgumentTypes(p0: java.lang.reflect.Method): Array; + getReturnType(p0: string): org.objectweb.asm.Type; + getReturnType(p0: java.lang.reflect.Method): org.objectweb.asm.Type; + getInternalName(p0: java.lang.Class): string; + getDescriptor(p0: java.lang.Class): string; + getConstructorDescriptor(p0: java.lang.reflect.Constructor): string; + getMethodDescriptor(p0: org.objectweb.asm.Type, p1: org.objectweb.asm.Type): string; + getMethodDescriptor(p0: java.lang.reflect.Method): string; + getArgumentCount(p0: string): number; + getArgumentsAndReturnSizes(p0: string): number; } - interface MemoryStack extends org.lwjgl.system.Pointer$Default, java.lang.AutoCloseable { - push(): org.lwjgl.system.MemoryStack; - pop(): org.lwjgl.system.MemoryStack; - getAddress(): number; + interface Type { + getElementType(): org.objectweb.asm.Type; + getArgumentTypes(): Array; + getReturnType(): org.objectweb.asm.Type; + getClassName(): string; + getInternalName(): string; + getDescriptor(): string; + getSort(): number; + getDimensions(): number; getSize(): number; - getFrameIndex(): number; - getPointerAddress(): number; - getPointer(): number; - setPointer(p0: number): void; - nmalloc(p0: number): number; - nmalloc(p0: number, p1: number): number; - ncalloc(p0: number, p1: number, p2: number): number; - malloc(p0: number, p1: number): java.nio.ByteBuffer; - malloc(p0: number): java.nio.ByteBuffer; - calloc(p0: number, p1: number): java.nio.ByteBuffer; - calloc(p0: number): java.nio.ByteBuffer; - nbyte(p0: number): number; - bytes(p0: number): java.nio.ByteBuffer; - bytes(p0: number, p1: number): java.nio.ByteBuffer; - bytes(p0: number, p1: number, p2: number): java.nio.ByteBuffer; - bytes(p0: number, p1: number, p2: number, p3: number): java.nio.ByteBuffer; - bytes(p0: number): java.nio.ByteBuffer; - mallocShort(p0: number): java.nio.ShortBuffer; - callocShort(p0: number): java.nio.ShortBuffer; - nshort(p0: number): number; - shorts(p0: number): java.nio.ShortBuffer; - shorts(p0: number, p1: number): java.nio.ShortBuffer; - shorts(p0: number, p1: number, p2: number): java.nio.ShortBuffer; - shorts(p0: number, p1: number, p2: number, p3: number): java.nio.ShortBuffer; - shorts(p0: number): java.nio.ShortBuffer; - mallocInt(p0: number): java.nio.IntBuffer; - callocInt(p0: number): java.nio.IntBuffer; - nint(p0: number): number; - ints(p0: number): java.nio.IntBuffer; - ints(p0: number, p1: number): java.nio.IntBuffer; - ints(p0: number, p1: number, p2: number): java.nio.IntBuffer; - ints(p0: number, p1: number, p2: number, p3: number): java.nio.IntBuffer; - ints(p0: number): java.nio.IntBuffer; - mallocLong(p0: number): java.nio.LongBuffer; - callocLong(p0: number): java.nio.LongBuffer; - nlong(p0: number): number; - longs(p0: number): java.nio.LongBuffer; - longs(p0: number, p1: number): java.nio.LongBuffer; - longs(p0: number, p1: number, p2: number): java.nio.LongBuffer; - longs(p0: number, p1: number, p2: number, p3: number): java.nio.LongBuffer; - longs(p0: number): java.nio.LongBuffer; - mallocCLong(p0: number): org.lwjgl.CLongBuffer; - callocCLong(p0: number): org.lwjgl.CLongBuffer; - nclong(p0: number): number; - clongs(p0: number): org.lwjgl.CLongBuffer; - clongs(p0: number, p1: number): org.lwjgl.CLongBuffer; - clongs(p0: number, p1: number, p2: number): org.lwjgl.CLongBuffer; - clongs(p0: number, p1: number, p2: number, p3: number): org.lwjgl.CLongBuffer; - clongs(p0: number): org.lwjgl.CLongBuffer; - mallocFloat(p0: number): java.nio.FloatBuffer; - callocFloat(p0: number): java.nio.FloatBuffer; - nfloat(p0: number): number; - floats(p0: number): java.nio.FloatBuffer; - floats(p0: number, p1: number): java.nio.FloatBuffer; - floats(p0: number, p1: number, p2: number): java.nio.FloatBuffer; - floats(p0: number, p1: number, p2: number, p3: number): java.nio.FloatBuffer; - floats(p0: number): java.nio.FloatBuffer; - mallocDouble(p0: number): java.nio.DoubleBuffer; - callocDouble(p0: number): java.nio.DoubleBuffer; - ndouble(p0: number): number; - doubles(p0: number): java.nio.DoubleBuffer; - doubles(p0: number, p1: number): java.nio.DoubleBuffer; - doubles(p0: number, p1: number, p2: number): java.nio.DoubleBuffer; - doubles(p0: number, p1: number, p2: number, p3: number): java.nio.DoubleBuffer; - doubles(p0: number): java.nio.DoubleBuffer; - mallocPointer(p0: number): org.lwjgl.PointerBuffer; - callocPointer(p0: number): org.lwjgl.PointerBuffer; - npointer(p0: number): number; - npointer(p0: org.lwjgl.system.Pointer): number; - npointer(p0: java.nio.Buffer): number; - pointers(p0: number): org.lwjgl.PointerBuffer; - pointers(p0: number, p1: number): org.lwjgl.PointerBuffer; - pointers(p0: number, p1: number, p2: number): org.lwjgl.PointerBuffer; - pointers(p0: number, p1: number, p2: number, p3: number): org.lwjgl.PointerBuffer; - pointers(p0: number): org.lwjgl.PointerBuffer; - pointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - pointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - pointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - pointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer, p3: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - pointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; - pointers(p0: java.nio.Buffer): org.lwjgl.PointerBuffer; - pointers(p0: java.nio.Buffer, p1: java.nio.Buffer): org.lwjgl.PointerBuffer; - pointers(p0: java.nio.Buffer, p1: java.nio.Buffer, p2: java.nio.Buffer): org.lwjgl.PointerBuffer; - pointers(p0: java.nio.Buffer, p1: java.nio.Buffer, p2: java.nio.Buffer, p3: java.nio.Buffer): org.lwjgl.PointerBuffer; - pointers(p0: java.nio.Buffer): org.lwjgl.PointerBuffer; - pointersOfElements(p0: org.lwjgl.system.CustomBuffer): org.lwjgl.PointerBuffer; - ASCII(p0: kotlin.CharSequence): java.nio.ByteBuffer; - ASCII(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; - nASCII(p0: kotlin.CharSequence, p1: boolean): number; - ASCIISafe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; - ASCIISafe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; - nASCIISafe(p0: kotlin.CharSequence | null | undefined, p1: boolean): number; - UTF8(p0: kotlin.CharSequence): java.nio.ByteBuffer; - UTF8(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; - nUTF8(p0: kotlin.CharSequence, p1: boolean): number; - UTF8Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; - UTF8Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; - nUTF8Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): number; - UTF16(p0: kotlin.CharSequence): java.nio.ByteBuffer; - UTF16(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; - nUTF16(p0: kotlin.CharSequence, p1: boolean): number; - UTF16Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; - UTF16Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; - nUTF16Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): number; - } - const Callback: { - Descriptor: typeof org.lwjgl.system.Callback$Descriptor; - free(p0: number): void; - get(p0: number): T; - getSafe(p0: number): T; - } - interface Callback extends org.lwjgl.system.Pointer, org.lwjgl.system.NativeResource { + getArgumentCount(): number; + getArgumentsAndReturnSizes(): number; + getOpcode(p0: number): number; } } + } + namespace lwjgl { namespace util { namespace freetype { const FT_Face: { @@ -65187,29 +59476,421 @@ declare global { nnext(p0: number): org.lwjgl.util.freetype.FT_ListNode | null | undefined; ndata(p0: number, p1: number): java.nio.ByteBuffer; } - interface FT_ListNode extends org.lwjgl.system.Struct { - prev(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; - next(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; - data(p0: number): java.nio.ByteBuffer; + interface FT_ListNode extends org.lwjgl.system.Struct { + prev(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; + next(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; + data(p0: number): java.nio.ByteBuffer; + } + const FT_ListNode$Buffer: { + new(p0: java.nio.ByteBuffer): org.lwjgl.util.freetype.FT_ListNode$Buffer; + new(p0: number, p1: number): org.lwjgl.util.freetype.FT_ListNode$Buffer; + } + interface FT_ListNode$Buffer extends org.lwjgl.system.StructBuffer { + prev(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; + next(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; + data(p0: number): java.nio.ByteBuffer; + } + const FT_List$Buffer: { + new(p0: java.nio.ByteBuffer): org.lwjgl.util.freetype.FT_List$Buffer; + new(p0: number, p1: number): org.lwjgl.util.freetype.FT_List$Buffer; + } + interface FT_List$Buffer extends org.lwjgl.system.StructBuffer { + head(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; + tail(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; + } + } + } + namespace system { + namespace libffi { + const FFICIF: { + Buffer: typeof org.lwjgl.system.libffi.FFICIF$Buffer; + SIZEOF: number; + ALIGNOF: number; + ABI: number; + NARGS: number; + ARG_TYPES: number; + RTYPE: number; + BYTES: number; + FLAGS: number; + new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFICIF; + create(): org.lwjgl.system.libffi.FFICIF; + create(p0: number): org.lwjgl.system.libffi.FFICIF; + create(p0: number): org.lwjgl.system.libffi.FFICIF$Buffer; + create(p0: number, p1: number): org.lwjgl.system.libffi.FFICIF$Buffer; + malloc(): org.lwjgl.system.libffi.FFICIF; + malloc(p0: number): org.lwjgl.system.libffi.FFICIF$Buffer; + malloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF; + malloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF$Buffer; + calloc(): org.lwjgl.system.libffi.FFICIF; + calloc(p0: number): org.lwjgl.system.libffi.FFICIF$Buffer; + calloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF; + calloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFICIF$Buffer; + createSafe(p0: number): org.lwjgl.system.libffi.FFICIF | null | undefined; + createSafe(p0: number, p1: number): org.lwjgl.system.libffi.FFICIF$Buffer | null | undefined; + nabi(p0: number): number; + nnargs(p0: number): number; + narg_types(p0: number): org.lwjgl.PointerBuffer; + nrtype(p0: number): org.lwjgl.system.libffi.FFIType; + nbytes(p0: number): number; + nflags(p0: number): number; + } + interface FFICIF extends org.lwjgl.system.Struct, org.lwjgl.system.NativeResource { + abi(): number; + nargs(): number; + arg_types(): org.lwjgl.PointerBuffer; + rtype(): org.lwjgl.system.libffi.FFIType; + bytes(): number; + flags(): number; + } + const FFIType: { + Buffer: typeof org.lwjgl.system.libffi.FFIType$Buffer; + SIZEOF: number; + ALIGNOF: number; + SIZE: number; + ALIGNMENT: number; + TYPE: number; + ELEMENTS: number; + new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFIType; + create(): org.lwjgl.system.libffi.FFIType; + create(p0: number): org.lwjgl.system.libffi.FFIType; + create(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; + create(p0: number, p1: number): org.lwjgl.system.libffi.FFIType$Buffer; + malloc(): org.lwjgl.system.libffi.FFIType; + malloc(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; + malloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType; + malloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType$Buffer; + calloc(): org.lwjgl.system.libffi.FFIType; + calloc(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; + calloc(p0: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType; + calloc(p0: number, p1: org.lwjgl.system.MemoryStack): org.lwjgl.system.libffi.FFIType$Buffer; + createSafe(p0: number): org.lwjgl.system.libffi.FFIType | null | undefined; + createSafe(p0: number, p1: number): org.lwjgl.system.libffi.FFIType$Buffer | null | undefined; + nsize(p0: number): number; + nsize(p0: number, p1: number): void; + nalignment(p0: number): number; + nalignment(p0: number, p1: number): void; + ntype(p0: number): number; + ntype(p0: number, p1: number): void; + nelements(p0: number, p1: number): org.lwjgl.PointerBuffer | null | undefined; + nelements(p0: number, p1: org.lwjgl.PointerBuffer | null | undefined): void; + } + interface FFIType extends org.lwjgl.system.Struct, org.lwjgl.system.NativeResource { + size(): number; + size(p0: number): org.lwjgl.system.libffi.FFIType; + alignment(): number; + alignment(p0: number): org.lwjgl.system.libffi.FFIType; + type(): number; + type(p0: number): org.lwjgl.system.libffi.FFIType; + elements(p0: number): org.lwjgl.PointerBuffer | null | undefined; + elements(p0: org.lwjgl.PointerBuffer | null | undefined): org.lwjgl.system.libffi.FFIType; + set(p0: number, p1: number, p2: number, p3: org.lwjgl.PointerBuffer | null | undefined): org.lwjgl.system.libffi.FFIType; + set(p0: org.lwjgl.system.libffi.FFIType): org.lwjgl.system.libffi.FFIType; } - const FT_ListNode$Buffer: { - new(p0: java.nio.ByteBuffer): org.lwjgl.util.freetype.FT_ListNode$Buffer; - new(p0: number, p1: number): org.lwjgl.util.freetype.FT_ListNode$Buffer; + const FFIType$Buffer: { + new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFIType$Buffer; + new(p0: number, p1: number): org.lwjgl.system.libffi.FFIType$Buffer; } - interface FT_ListNode$Buffer extends org.lwjgl.system.StructBuffer { - prev(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; - next(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; - data(p0: number): java.nio.ByteBuffer; + interface FFIType$Buffer extends org.lwjgl.system.StructBuffer, org.lwjgl.system.NativeResource { + size(): number; + size(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; + alignment(): number; + alignment(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; + type(): number; + type(p0: number): org.lwjgl.system.libffi.FFIType$Buffer; + elements(p0: number): org.lwjgl.PointerBuffer | null | undefined; + elements(p0: org.lwjgl.PointerBuffer | null | undefined): org.lwjgl.system.libffi.FFIType$Buffer; } - const FT_List$Buffer: { - new(p0: java.nio.ByteBuffer): org.lwjgl.util.freetype.FT_List$Buffer; - new(p0: number, p1: number): org.lwjgl.util.freetype.FT_List$Buffer; + const FFICIF$Buffer: { + new(p0: java.nio.ByteBuffer): org.lwjgl.system.libffi.FFICIF$Buffer; + new(p0: number, p1: number): org.lwjgl.system.libffi.FFICIF$Buffer; } - interface FT_List$Buffer extends org.lwjgl.system.StructBuffer { - head(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; - tail(): org.lwjgl.util.freetype.FT_ListNode | null | undefined; + interface FFICIF$Buffer extends org.lwjgl.system.StructBuffer, org.lwjgl.system.NativeResource { + abi(): number; + nargs(): number; + arg_types(): org.lwjgl.PointerBuffer; + rtype(): org.lwjgl.system.libffi.FFIType; + bytes(): number; + flags(): number; } } + const Struct: { + validate(p0: number, p1: number, p2: number, p3: org.lwjgl.system.Struct$StructValidation): void; + validate(p0: number, p1: number, p2: number, p3: org.lwjgl.system.Struct$StructValidation): void; + } + interface Struct extends org.lwjgl.system.Pointer$Default { + sizeof(): number; + clear(): void; + free(): void; + isNull(p0: number): boolean; + } + interface Pointer$Default extends org.lwjgl.system.Pointer { + } + const Pointer: { + Default: typeof org.lwjgl.system.Pointer$Default; + POINTER_SIZE: number; + POINTER_SHIFT: number; + CLONG_SIZE: number; + CLONG_SHIFT: number; + BITS32: boolean; + BITS64: boolean; + } + interface Pointer { + address(): number; + } + interface StructBuffer extends org.lwjgl.system.CustomBuffer, kotlin.collections.MutableIterable { + get(): T; + get(p0: T): SELF; + get(p0: number): T; + get(p0: number, p1: T): SELF; + put(p0: T): SELF; + put(p0: number, p1: T): SELF; + apply(p0: unknown): SELF; + apply(p0: number, p1: unknown): SELF; + stream(): java.util.stream.Stream; + parallelStream(): java.util.stream.Stream; + } + interface CustomBuffer extends org.lwjgl.system.Pointer$Default { + mark(): SELF; + position(): number; + position(p0: number): SELF; + limit(): number; + limit(p0: number): SELF; + capacity(): number; + sizeof(): number; + address0(): number; + address(p0: number): number; + free(): void; + reset(): SELF; + clear(): SELF; + flip(): SELF; + rewind(): SELF; + remaining(): number; + hasRemaining(): boolean; + slice(): SELF; + slice(p0: number, p1: number): SELF; + duplicate(): SELF; + put(p0: SELF): SELF; + compact(): SELF; + } + interface Struct$StructValidation { + validate(p0: number): void; + (p0: number): void; + } + interface NativeResource extends java.lang.AutoCloseable { + free(): void; + } + const Callback: { + Descriptor: typeof org.lwjgl.system.Callback$Descriptor; + free(p0: number): void; + get(p0: number): T; + getSafe(p0: number): T; + } + interface Callback extends org.lwjgl.system.Pointer, org.lwjgl.system.NativeResource { + } + const Callback$Descriptor: { + new(p0: java.lang.invoke.MethodHandles$Lookup, p1: org.lwjgl.system.libffi.FFICIF): org.lwjgl.system.Callback$Descriptor; + } + interface Callback$Descriptor { + } + const MemoryStack: { + create(): org.lwjgl.system.MemoryStack; + create(p0: number): org.lwjgl.system.MemoryStack; + create(p0: java.nio.ByteBuffer): org.lwjgl.system.MemoryStack; + ncreate(p0: number, p1: number): org.lwjgl.system.MemoryStack; + stackGet(): org.lwjgl.system.MemoryStack; + stackPush(): org.lwjgl.system.MemoryStack; + stackPop(): org.lwjgl.system.MemoryStack; + nstackMalloc(p0: number): number; + nstackMalloc(p0: number, p1: number): number; + nstackCalloc(p0: number, p1: number, p2: number): number; + stackMalloc(p0: number): java.nio.ByteBuffer; + stackCalloc(p0: number): java.nio.ByteBuffer; + stackBytes(p0: number): java.nio.ByteBuffer; + stackBytes(p0: number, p1: number): java.nio.ByteBuffer; + stackBytes(p0: number, p1: number, p2: number): java.nio.ByteBuffer; + stackBytes(p0: number, p1: number, p2: number, p3: number): java.nio.ByteBuffer; + stackBytes(p0: number): java.nio.ByteBuffer; + stackMallocShort(p0: number): java.nio.ShortBuffer; + stackCallocShort(p0: number): java.nio.ShortBuffer; + stackShorts(p0: number): java.nio.ShortBuffer; + stackShorts(p0: number, p1: number): java.nio.ShortBuffer; + stackShorts(p0: number, p1: number, p2: number): java.nio.ShortBuffer; + stackShorts(p0: number, p1: number, p2: number, p3: number): java.nio.ShortBuffer; + stackShorts(p0: number): java.nio.ShortBuffer; + stackMallocInt(p0: number): java.nio.IntBuffer; + stackCallocInt(p0: number): java.nio.IntBuffer; + stackInts(p0: number): java.nio.IntBuffer; + stackInts(p0: number, p1: number): java.nio.IntBuffer; + stackInts(p0: number, p1: number, p2: number): java.nio.IntBuffer; + stackInts(p0: number, p1: number, p2: number, p3: number): java.nio.IntBuffer; + stackInts(p0: number): java.nio.IntBuffer; + stackMallocLong(p0: number): java.nio.LongBuffer; + stackCallocLong(p0: number): java.nio.LongBuffer; + stackLongs(p0: number): java.nio.LongBuffer; + stackLongs(p0: number, p1: number): java.nio.LongBuffer; + stackLongs(p0: number, p1: number, p2: number): java.nio.LongBuffer; + stackLongs(p0: number, p1: number, p2: number, p3: number): java.nio.LongBuffer; + stackLongs(p0: number): java.nio.LongBuffer; + stackMallocCLong(p0: number): org.lwjgl.CLongBuffer; + stackCallocCLong(p0: number): org.lwjgl.CLongBuffer; + stackCLongs(p0: number): org.lwjgl.CLongBuffer; + stackCLongs(p0: number, p1: number): org.lwjgl.CLongBuffer; + stackCLongs(p0: number, p1: number, p2: number): org.lwjgl.CLongBuffer; + stackCLongs(p0: number, p1: number, p2: number, p3: number): org.lwjgl.CLongBuffer; + stackCLongs(p0: number): org.lwjgl.CLongBuffer; + stackMallocFloat(p0: number): java.nio.FloatBuffer; + stackCallocFloat(p0: number): java.nio.FloatBuffer; + stackFloats(p0: number): java.nio.FloatBuffer; + stackFloats(p0: number, p1: number): java.nio.FloatBuffer; + stackFloats(p0: number, p1: number, p2: number): java.nio.FloatBuffer; + stackFloats(p0: number, p1: number, p2: number, p3: number): java.nio.FloatBuffer; + stackFloats(p0: number): java.nio.FloatBuffer; + stackMallocDouble(p0: number): java.nio.DoubleBuffer; + stackCallocDouble(p0: number): java.nio.DoubleBuffer; + stackDoubles(p0: number): java.nio.DoubleBuffer; + stackDoubles(p0: number, p1: number): java.nio.DoubleBuffer; + stackDoubles(p0: number, p1: number, p2: number): java.nio.DoubleBuffer; + stackDoubles(p0: number, p1: number, p2: number, p3: number): java.nio.DoubleBuffer; + stackDoubles(p0: number): java.nio.DoubleBuffer; + stackMallocPointer(p0: number): org.lwjgl.PointerBuffer; + stackCallocPointer(p0: number): org.lwjgl.PointerBuffer; + stackPointers(p0: number): org.lwjgl.PointerBuffer; + stackPointers(p0: number, p1: number): org.lwjgl.PointerBuffer; + stackPointers(p0: number, p1: number, p2: number): org.lwjgl.PointerBuffer; + stackPointers(p0: number, p1: number, p2: number, p3: number): org.lwjgl.PointerBuffer; + stackPointers(p0: number): org.lwjgl.PointerBuffer; + stackPointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + stackPointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + stackPointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + stackPointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer, p3: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + stackPointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + stackASCII(p0: kotlin.CharSequence): java.nio.ByteBuffer; + stackASCII(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; + stackUTF8(p0: kotlin.CharSequence): java.nio.ByteBuffer; + stackUTF8(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; + stackUTF16(p0: kotlin.CharSequence): java.nio.ByteBuffer; + stackUTF16(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; + stackASCIISafe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; + stackASCIISafe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; + stackUTF8Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; + stackUTF8Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; + stackUTF16Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; + stackUTF16Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; + } + interface MemoryStack extends org.lwjgl.system.Pointer$Default, java.lang.AutoCloseable { + push(): org.lwjgl.system.MemoryStack; + pop(): org.lwjgl.system.MemoryStack; + getAddress(): number; + getSize(): number; + getFrameIndex(): number; + getPointerAddress(): number; + getPointer(): number; + setPointer(p0: number): void; + nmalloc(p0: number): number; + nmalloc(p0: number, p1: number): number; + ncalloc(p0: number, p1: number, p2: number): number; + malloc(p0: number, p1: number): java.nio.ByteBuffer; + malloc(p0: number): java.nio.ByteBuffer; + calloc(p0: number, p1: number): java.nio.ByteBuffer; + calloc(p0: number): java.nio.ByteBuffer; + nbyte(p0: number): number; + bytes(p0: number): java.nio.ByteBuffer; + bytes(p0: number, p1: number): java.nio.ByteBuffer; + bytes(p0: number, p1: number, p2: number): java.nio.ByteBuffer; + bytes(p0: number, p1: number, p2: number, p3: number): java.nio.ByteBuffer; + bytes(p0: number): java.nio.ByteBuffer; + mallocShort(p0: number): java.nio.ShortBuffer; + callocShort(p0: number): java.nio.ShortBuffer; + nshort(p0: number): number; + shorts(p0: number): java.nio.ShortBuffer; + shorts(p0: number, p1: number): java.nio.ShortBuffer; + shorts(p0: number, p1: number, p2: number): java.nio.ShortBuffer; + shorts(p0: number, p1: number, p2: number, p3: number): java.nio.ShortBuffer; + shorts(p0: number): java.nio.ShortBuffer; + mallocInt(p0: number): java.nio.IntBuffer; + callocInt(p0: number): java.nio.IntBuffer; + nint(p0: number): number; + ints(p0: number): java.nio.IntBuffer; + ints(p0: number, p1: number): java.nio.IntBuffer; + ints(p0: number, p1: number, p2: number): java.nio.IntBuffer; + ints(p0: number, p1: number, p2: number, p3: number): java.nio.IntBuffer; + ints(p0: number): java.nio.IntBuffer; + mallocLong(p0: number): java.nio.LongBuffer; + callocLong(p0: number): java.nio.LongBuffer; + nlong(p0: number): number; + longs(p0: number): java.nio.LongBuffer; + longs(p0: number, p1: number): java.nio.LongBuffer; + longs(p0: number, p1: number, p2: number): java.nio.LongBuffer; + longs(p0: number, p1: number, p2: number, p3: number): java.nio.LongBuffer; + longs(p0: number): java.nio.LongBuffer; + mallocCLong(p0: number): org.lwjgl.CLongBuffer; + callocCLong(p0: number): org.lwjgl.CLongBuffer; + nclong(p0: number): number; + clongs(p0: number): org.lwjgl.CLongBuffer; + clongs(p0: number, p1: number): org.lwjgl.CLongBuffer; + clongs(p0: number, p1: number, p2: number): org.lwjgl.CLongBuffer; + clongs(p0: number, p1: number, p2: number, p3: number): org.lwjgl.CLongBuffer; + clongs(p0: number): org.lwjgl.CLongBuffer; + mallocFloat(p0: number): java.nio.FloatBuffer; + callocFloat(p0: number): java.nio.FloatBuffer; + nfloat(p0: number): number; + floats(p0: number): java.nio.FloatBuffer; + floats(p0: number, p1: number): java.nio.FloatBuffer; + floats(p0: number, p1: number, p2: number): java.nio.FloatBuffer; + floats(p0: number, p1: number, p2: number, p3: number): java.nio.FloatBuffer; + floats(p0: number): java.nio.FloatBuffer; + mallocDouble(p0: number): java.nio.DoubleBuffer; + callocDouble(p0: number): java.nio.DoubleBuffer; + ndouble(p0: number): number; + doubles(p0: number): java.nio.DoubleBuffer; + doubles(p0: number, p1: number): java.nio.DoubleBuffer; + doubles(p0: number, p1: number, p2: number): java.nio.DoubleBuffer; + doubles(p0: number, p1: number, p2: number, p3: number): java.nio.DoubleBuffer; + doubles(p0: number): java.nio.DoubleBuffer; + mallocPointer(p0: number): org.lwjgl.PointerBuffer; + callocPointer(p0: number): org.lwjgl.PointerBuffer; + npointer(p0: number): number; + npointer(p0: org.lwjgl.system.Pointer): number; + npointer(p0: java.nio.Buffer): number; + pointers(p0: number): org.lwjgl.PointerBuffer; + pointers(p0: number, p1: number): org.lwjgl.PointerBuffer; + pointers(p0: number, p1: number, p2: number): org.lwjgl.PointerBuffer; + pointers(p0: number, p1: number, p2: number, p3: number): org.lwjgl.PointerBuffer; + pointers(p0: number): org.lwjgl.PointerBuffer; + pointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + pointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + pointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + pointers(p0: org.lwjgl.system.Pointer, p1: org.lwjgl.system.Pointer, p2: org.lwjgl.system.Pointer, p3: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + pointers(p0: org.lwjgl.system.Pointer): org.lwjgl.PointerBuffer; + pointers(p0: java.nio.Buffer): org.lwjgl.PointerBuffer; + pointers(p0: java.nio.Buffer, p1: java.nio.Buffer): org.lwjgl.PointerBuffer; + pointers(p0: java.nio.Buffer, p1: java.nio.Buffer, p2: java.nio.Buffer): org.lwjgl.PointerBuffer; + pointers(p0: java.nio.Buffer, p1: java.nio.Buffer, p2: java.nio.Buffer, p3: java.nio.Buffer): org.lwjgl.PointerBuffer; + pointers(p0: java.nio.Buffer): org.lwjgl.PointerBuffer; + pointersOfElements(p0: org.lwjgl.system.CustomBuffer): org.lwjgl.PointerBuffer; + ASCII(p0: kotlin.CharSequence): java.nio.ByteBuffer; + ASCII(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; + nASCII(p0: kotlin.CharSequence, p1: boolean): number; + ASCIISafe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; + ASCIISafe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; + nASCIISafe(p0: kotlin.CharSequence | null | undefined, p1: boolean): number; + UTF8(p0: kotlin.CharSequence): java.nio.ByteBuffer; + UTF8(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; + nUTF8(p0: kotlin.CharSequence, p1: boolean): number; + UTF8Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; + UTF8Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; + nUTF8Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): number; + UTF16(p0: kotlin.CharSequence): java.nio.ByteBuffer; + UTF16(p0: kotlin.CharSequence, p1: boolean): java.nio.ByteBuffer; + nUTF16(p0: kotlin.CharSequence, p1: boolean): number; + UTF16Safe(p0: kotlin.CharSequence | null | undefined): java.nio.ByteBuffer | null | undefined; + UTF16Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): java.nio.ByteBuffer | null | undefined; + nUTF16Safe(p0: kotlin.CharSequence | null | undefined, p1: boolean): number; + } + interface CallbackI extends org.lwjgl.system.Pointer { + getDescriptor(): org.lwjgl.system.Callback$Descriptor; + callback(p0: number, p1: number): void; + } } namespace glfw { const GLFWVidMode$Buffer: { @@ -65330,87 +60011,6 @@ declare global { put(p0: Array, p1: number, p2: number): org.lwjgl.CLongBuffer; } } - namespace spongepowered { - namespace asm { - namespace mixin { - namespace injection { - namespace callback { - const CallbackInfo: { - new(p0: string, p1: boolean): org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - getCallInfoClassName(p0: org.objectweb.asm.Type): string; - } - interface CallbackInfo extends org.spongepowered.asm.mixin.injection.callback.Cancellable { - getId(): string; - } - interface Cancellable { - isCancellable(): boolean; - isCancelled(): boolean; - cancel(): void; - } - } - } - } - } - } - namespace objectweb { - namespace asm { - const Type: { - VOID: number; - BOOLEAN: number; - CHAR: number; - BYTE: number; - SHORT: number; - INT: number; - FLOAT: number; - LONG: number; - DOUBLE: number; - ARRAY: number; - OBJECT: number; - METHOD: number; - VOID_TYPE: org.objectweb.asm.Type; - BOOLEAN_TYPE: org.objectweb.asm.Type; - CHAR_TYPE: org.objectweb.asm.Type; - BYTE_TYPE: org.objectweb.asm.Type; - SHORT_TYPE: org.objectweb.asm.Type; - INT_TYPE: org.objectweb.asm.Type; - FLOAT_TYPE: org.objectweb.asm.Type; - LONG_TYPE: org.objectweb.asm.Type; - DOUBLE_TYPE: org.objectweb.asm.Type; - getType(p0: string): org.objectweb.asm.Type; - getType(p0: java.lang.Class): org.objectweb.asm.Type; - getType(p0: java.lang.reflect.Constructor): org.objectweb.asm.Type; - getType(p0: java.lang.reflect.Method): org.objectweb.asm.Type; - getObjectType(p0: string): org.objectweb.asm.Type; - getMethodType(p0: string): org.objectweb.asm.Type; - getMethodType(p0: org.objectweb.asm.Type, p1: org.objectweb.asm.Type): org.objectweb.asm.Type; - getArgumentTypes(p0: string): Array; - getArgumentTypes(p0: java.lang.reflect.Method): Array; - getReturnType(p0: string): org.objectweb.asm.Type; - getReturnType(p0: java.lang.reflect.Method): org.objectweb.asm.Type; - getInternalName(p0: java.lang.Class): string; - getDescriptor(p0: java.lang.Class): string; - getConstructorDescriptor(p0: java.lang.reflect.Constructor): string; - getMethodDescriptor(p0: org.objectweb.asm.Type, p1: org.objectweb.asm.Type): string; - getMethodDescriptor(p0: java.lang.reflect.Method): string; - getArgumentCount(p0: string): number; - getArgumentsAndReturnSizes(p0: string): number; - } - interface Type { - getElementType(): org.objectweb.asm.Type; - getArgumentTypes(): Array; - getReturnType(): org.objectweb.asm.Type; - getClassName(): string; - getInternalName(): string; - getDescriptor(): string; - getSort(): number; - getDimensions(): number; - getSize(): number; - getArgumentCount(): number; - getArgumentsAndReturnSizes(): number; - getOpcode(p0: number): number; - } - } - } namespace mozilla { namespace javascript { namespace debug { @@ -66818,6 +61418,3008 @@ declare global { } } } + namespace github { + namespace humbleui { + namespace skija { + namespace impl { + const Managed: { + CleanerThunk: typeof io.github.humbleui.skija.impl.Managed$CleanerThunk; + new(p0: number, p1: number): io.github.humbleui.skija.impl.Managed; + new(p0: number, p1: number, p2: boolean): io.github.humbleui.skija.impl.Managed; + _nInvokeFinalizer(p0: number, p1: number): void; + } + interface Managed extends io.github.humbleui.skija.impl.Native, java.lang.AutoCloseable { + _cleanable: io.github.humbleui.skija.impl.Cleanable; + isClosed(): boolean; + } + const Native: { + new(p0: number): io.github.humbleui.skija.impl.Native; + getPtr(p0: io.github.humbleui.skija.impl.Native): number; + } + interface Native { + _ptr: number; + _nativeEquals(p0: io.github.humbleui.skija.impl.Native): boolean; + } + const Cleanable: { + register(p0: any, p1: java.lang.Runnable): io.github.humbleui.skija.impl.Cleanable; + } + interface Cleanable { + clean(): void; + } + const Managed$CleanerThunk: { + new(p0: string, p1: number, p2: number): io.github.humbleui.skija.impl.Managed$CleanerThunk; + } + interface Managed$CleanerThunk extends java.lang.Runnable { + _className: string; + _ptr: number; + _finalizerPtr: number; + } + const RefCnt: { + _FinalizerHolder: typeof io.github.humbleui.skija.impl.RefCnt$_FinalizerHolder; + _nGetFinalizer(): number; + _nGetRefCount(p0: number): number; + } + interface RefCnt extends io.github.humbleui.skija.impl.Managed { + getRefCount(): number; + } + const RefCnt$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.impl.RefCnt$_FinalizerHolder; + } + interface RefCnt$_FinalizerHolder { + } + } + namespace shaper { + const ShapingOptions: { + DEFAULT: io.github.humbleui.skija.shaper.ShapingOptions; + new(p0: io.github.humbleui.skija.FontMgr | null | undefined, p1: Array, p2: boolean, p3: boolean, p4: boolean): io.github.humbleui.skija.shaper.ShapingOptions; + } + interface ShapingOptions { + _fontMgr: io.github.humbleui.skija.FontMgr | null | undefined; + _features: Array; + _leftToRight: boolean; + _approximateSpaces: boolean; + _approximatePunctuation: boolean; + withFeatures(p0: Array): io.github.humbleui.skija.shaper.ShapingOptions; + withFeatures(p0: string | null | undefined): io.github.humbleui.skija.shaper.ShapingOptions; + getFontMgr(): io.github.humbleui.skija.FontMgr | null | undefined; + getFeatures(): Array; + isLeftToRight(): boolean; + isApproximateSpaces(): boolean; + isApproximatePunctuation(): boolean; + withFontMgr(p0: io.github.humbleui.skija.FontMgr | null | undefined): io.github.humbleui.skija.shaper.ShapingOptions; + withLeftToRight(p0: boolean): io.github.humbleui.skija.shaper.ShapingOptions; + withApproximateSpaces(p0: boolean): io.github.humbleui.skija.shaper.ShapingOptions; + withApproximatePunctuation(p0: boolean): io.github.humbleui.skija.shaper.ShapingOptions; + } + } + const Canvas: { + _FinalizerHolder: typeof io.github.humbleui.skija.Canvas$_FinalizerHolder; + new(p0: number, p1: boolean, p2: any): io.github.humbleui.skija.Canvas; + new(p0: io.github.humbleui.skija.Bitmap): io.github.humbleui.skija.Canvas; + new(p0: io.github.humbleui.skija.Bitmap, p1: io.github.humbleui.skija.SurfaceProps): io.github.humbleui.skija.Canvas; + _nGetFinalizer(): number; + _nMakeFromBitmap(p0: number, p1: number, p2: number): number; + _nGetBaseProps(p0: number): io.github.humbleui.skija.SurfaceProps; + _nGetTopProps(p0: number): io.github.humbleui.skija.SurfaceProps; + _nGetSurface(p0: number): number; + _nDrawPoint(p0: number, p1: number, p2: number, p3: number): void; + _nDrawPoints(p0: number, p1: number, p2: kotlin.FloatArray, p3: number): void; + _nDrawLine(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nDrawArc(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: boolean, p8: number): void; + _nDrawRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nDrawOval(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nDrawRRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: kotlin.FloatArray, p6: number): void; + _nQuickReject(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nQuickRejectPath(p0: number, p1: number): boolean; + _nDrawDRRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: kotlin.FloatArray, p6: number, p7: number, p8: number, p9: number, p10: kotlin.FloatArray, p11: number): void; + _nDrawPath(p0: number, p1: number, p2: number): void; + _nDrawImageRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number, p12: boolean): void; + _nDrawImageNine(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number): void; + _nDrawRegion(p0: number, p1: number, p2: number): void; + _nDrawString(p0: number, p1: string, p2: number, p3: number, p4: number, p5: number): void; + _nDrawTextBlob(p0: number, p1: number, p2: number, p3: number, p4: number): void; + _nDrawPicture(p0: number, p1: number, p2: kotlin.FloatArray, p3: number): void; + _nDrawVertices(p0: number, p1: number, p2: kotlin.FloatArray, p3: Array, p4: kotlin.FloatArray, p5: Array, p6: number, p7: number): void; + _nDrawPatch(p0: number, p1: kotlin.FloatArray, p2: Array, p3: kotlin.FloatArray, p4: number, p5: number): void; + _nDrawDrawable(p0: number, p1: number, p2: kotlin.FloatArray): void; + _nDrawColor(p0: number, p1: number, p2: number): void; + _nDrawColor4f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nClear(p0: number, p1: number): void; + _nDrawPaint(p0: number, p1: number): void; + _nSetMatrix(p0: number, p1: kotlin.FloatArray): void; + _nSetMatrix44(p0: number, p1: kotlin.FloatArray): void; + _nGetLocalToDevice(p0: number): kotlin.FloatArray; + _nResetMatrix(p0: number): void; + _nClipRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: boolean): void; + _nClipRRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: kotlin.FloatArray, p6: number, p7: boolean): void; + _nClipPath(p0: number, p1: number, p2: number, p3: boolean): void; + _nClipRegion(p0: number, p1: number, p2: number): void; + _nConcat(p0: number, p1: kotlin.FloatArray): void; + _nConcat44(p0: number, p1: kotlin.FloatArray): void; + _nReadPixels(p0: number, p1: number, p2: number, p3: number): boolean; + _nWritePixels(p0: number, p1: number, p2: number, p3: number): boolean; + _nSave(p0: number): number; + _nSaveLayer(p0: number, p1: number): number; + _nSaveLayerRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nSaveLayerAlpha(p0: number, p1: number): number; + _nSaveLayerAlphaRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nSaveLayerRec(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nSaveLayerRecRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): number; + _nGetSaveCount(p0: number): number; + _nRestore(p0: number): void; + _nRestoreToCount(p0: number, p1: number): void; + } + interface Canvas extends io.github.humbleui.skija.impl.Managed { + _owner: any; + getBaseProps(): io.github.humbleui.skija.SurfaceProps; + getTopProps(): io.github.humbleui.skija.SurfaceProps; + getSurface(): io.github.humbleui.skija.Surface | null | undefined; + drawPoint(p0: number, p1: number, p2: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPoints(p0: Array, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPoints(p0: kotlin.FloatArray, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawLines(p0: Array, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawLines(p0: kotlin.FloatArray, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPolygon(p0: Array, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPolygon(p0: kotlin.FloatArray, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawLine(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawArc(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: boolean, p7: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawRect(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawOval(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawCircle(p0: number, p1: number, p2: number, p3: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + quickReject(p0: io.github.humbleui.types.Rect): boolean; + quickReject(p0: io.github.humbleui.skija.Path): boolean; + drawDRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.types.RRect, p2: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawRectShadow(p0: io.github.humbleui.types.Rect, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.Canvas; + drawRectShadow(p0: io.github.humbleui.types.Rect, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.skija.Canvas; + drawRectShadowNoclip(p0: io.github.humbleui.types.Rect, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.skija.Canvas; + drawPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPathOnce(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawImage(p0: io.github.humbleui.skija.Image, p1: number, p2: number): io.github.humbleui.skija.Canvas; + drawImage(p0: io.github.humbleui.skija.Image, p1: number, p2: number, p3: io.github.humbleui.skija.Paint | null | undefined): io.github.humbleui.skija.Canvas; + drawImageRect(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.Rect): io.github.humbleui.skija.Canvas; + drawImageRect(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.Rect, p2: io.github.humbleui.skija.Paint | null | undefined): io.github.humbleui.skija.Canvas; + drawImageRect(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.Rect, p2: io.github.humbleui.types.Rect): io.github.humbleui.skija.Canvas; + drawImageRect(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.Rect, p2: io.github.humbleui.types.Rect, p3: io.github.humbleui.skija.Paint | null | undefined): io.github.humbleui.skija.Canvas; + drawImageRect(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.Rect, p2: io.github.humbleui.types.Rect, p3: io.github.humbleui.skija.Paint | null | undefined, p4: boolean): io.github.humbleui.skija.Canvas; + drawImageRect(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.Rect, p2: io.github.humbleui.types.Rect, p3: io.github.humbleui.skija.SamplingMode, p4: io.github.humbleui.skija.Paint | null | undefined, p5: boolean): io.github.humbleui.skija.Canvas; + drawImageNine(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.IRect, p2: io.github.humbleui.types.Rect, p3: io.github.humbleui.skija.FilterMode, p4: io.github.humbleui.skija.Paint | null | undefined): io.github.humbleui.skija.Canvas; + drawRegion(p0: io.github.humbleui.skija.Region, p1: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawString(p0: string, p1: number, p2: number, p3: io.github.humbleui.skija.Font, p4: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTextBlob(p0: io.github.humbleui.skija.TextBlob, p1: number, p2: number, p3: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTextLine(p0: io.github.humbleui.skija.TextLine, p1: number, p2: number, p3: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPicture(p0: io.github.humbleui.skija.Picture): io.github.humbleui.skija.Canvas; + drawPicture(p0: io.github.humbleui.skija.Picture, p1: io.github.humbleui.skija.Matrix33 | null | undefined, p2: io.github.humbleui.skija.Paint | null | undefined): io.github.humbleui.skija.Canvas; + drawTriangles(p0: Array, p1: Array, p2: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangles(p0: Array, p1: Array, p2: Array, p3: Array, p4: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangles(p0: Array, p1: Array, p2: Array, p3: Array, p4: io.github.humbleui.skija.BlendMode, p5: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangleStrip(p0: Array, p1: Array, p2: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangleStrip(p0: Array, p1: Array, p2: Array, p3: Array, p4: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangleStrip(p0: Array, p1: Array, p2: Array, p3: Array, p4: io.github.humbleui.skija.BlendMode, p5: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangleFan(p0: Array, p1: Array, p2: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangleFan(p0: Array, p1: Array, p2: Array, p3: Array, p4: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawTriangleFan(p0: Array, p1: Array, p2: Array, p3: Array, p4: io.github.humbleui.skija.BlendMode, p5: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPatch(p0: Array, p1: Array, p2: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPatch(p0: Array, p1: Array, p2: Array, p3: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawPatch(p0: Array, p1: Array, p2: Array, p3: io.github.humbleui.skija.BlendMode, p4: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + drawDrawable(p0: io.github.humbleui.skija.Drawable): io.github.humbleui.skija.Canvas; + drawDrawable(p0: io.github.humbleui.skija.Drawable, p1: number, p2: number): io.github.humbleui.skija.Canvas; + drawDrawable(p0: io.github.humbleui.skija.Drawable, p1: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Canvas; + drawColor(p0: number): io.github.humbleui.skija.Canvas; + drawColor(p0: number, p1: io.github.humbleui.skija.BlendMode): io.github.humbleui.skija.Canvas; + drawColor(p0: io.github.humbleui.skija.Color4f): io.github.humbleui.skija.Canvas; + drawColor(p0: io.github.humbleui.skija.Color4f, p1: io.github.humbleui.skija.BlendMode): io.github.humbleui.skija.Canvas; + clear(p0: number): io.github.humbleui.skija.Canvas; + drawPaint(p0: io.github.humbleui.skija.Paint): io.github.humbleui.skija.Canvas; + setMatrix(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.Canvas; + setMatrix(p0: io.github.humbleui.skija.Matrix44): io.github.humbleui.skija.Canvas; + resetMatrix(): io.github.humbleui.skija.Canvas; + getLocalToDevice(): io.github.humbleui.skija.Matrix44; + getLocalToDeviceAsMatrix33(): io.github.humbleui.skija.Matrix33; + clipRect(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.ClipMode, p2: boolean): io.github.humbleui.skija.Canvas; + clipRect(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.ClipMode): io.github.humbleui.skija.Canvas; + clipRect(p0: io.github.humbleui.types.Rect, p1: boolean): io.github.humbleui.skija.Canvas; + clipRect(p0: io.github.humbleui.types.Rect): io.github.humbleui.skija.Canvas; + clipRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.skija.ClipMode, p2: boolean): io.github.humbleui.skija.Canvas; + clipRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.skija.ClipMode): io.github.humbleui.skija.Canvas; + clipRRect(p0: io.github.humbleui.types.RRect, p1: boolean): io.github.humbleui.skija.Canvas; + clipRRect(p0: io.github.humbleui.types.RRect): io.github.humbleui.skija.Canvas; + clipPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.ClipMode, p2: boolean): io.github.humbleui.skija.Canvas; + clipPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.ClipMode): io.github.humbleui.skija.Canvas; + clipPath(p0: io.github.humbleui.skija.Path, p1: boolean): io.github.humbleui.skija.Canvas; + clipPath(p0: io.github.humbleui.skija.Path): io.github.humbleui.skija.Canvas; + clipRegion(p0: io.github.humbleui.skija.Region, p1: io.github.humbleui.skija.ClipMode): io.github.humbleui.skija.Canvas; + clipRegion(p0: io.github.humbleui.skija.Region): io.github.humbleui.skija.Canvas; + translate(p0: number, p1: number): io.github.humbleui.skija.Canvas; + scale(p0: number, p1: number): io.github.humbleui.skija.Canvas; + rotate(p0: number): io.github.humbleui.skija.Canvas; + skew(p0: number, p1: number): io.github.humbleui.skija.Canvas; + concat(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.Canvas; + concat(p0: io.github.humbleui.skija.Matrix44): io.github.humbleui.skija.Canvas; + readPixels(p0: io.github.humbleui.skija.Bitmap, p1: number, p2: number): boolean; + writePixels(p0: io.github.humbleui.skija.Bitmap, p1: number, p2: number): boolean; + save(): number; + saveLayer(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Paint | null | undefined): number; + saveLayer(p0: io.github.humbleui.types.Rect | null | undefined, p1: io.github.humbleui.skija.Paint | null | undefined): number; + saveLayer(p0: io.github.humbleui.skija.SaveLayerRec): number; + saveLayerAlpha(p0: io.github.humbleui.types.Rect | null | undefined, p1: number): number; + getSaveCount(): number; + restore(): io.github.humbleui.skija.Canvas; + restoreToCount(p0: number): io.github.humbleui.skija.Canvas; + invalidate(): void; + } + const SurfaceProps: { + new(p0: boolean, p1: number): io.github.humbleui.skija.SurfaceProps; + new(): io.github.humbleui.skija.SurfaceProps; + new(p0: io.github.humbleui.skija.PixelGeometry): io.github.humbleui.skija.SurfaceProps; + new(p0: boolean, p1: io.github.humbleui.skija.PixelGeometry): io.github.humbleui.skija.SurfaceProps; + } + interface SurfaceProps { + _deviceIndependentFonts: boolean; + _pixelGeometry: io.github.humbleui.skija.PixelGeometry; + _getFlags(): number; + _getPixelGeometryOrdinal(): number; + isDeviceIndependentFonts(): boolean; + getPixelGeometry(): io.github.humbleui.skija.PixelGeometry; + withDeviceIndependentFonts(p0: boolean): io.github.humbleui.skija.SurfaceProps; + withPixelGeometry(p0: io.github.humbleui.skija.PixelGeometry): io.github.humbleui.skija.SurfaceProps; + } + const PixelGeometry: { + UNKNOWN: io.github.humbleui.skija.PixelGeometry; + RGB_H: io.github.humbleui.skija.PixelGeometry; + BGR_H: io.github.humbleui.skija.PixelGeometry; + RGB_V: io.github.humbleui.skija.PixelGeometry; + BGR_V: io.github.humbleui.skija.PixelGeometry; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PixelGeometry; + } + interface PixelGeometry extends kotlin.Enum { + } + const Surface: { + new(p0: number): io.github.humbleui.skija.Surface; + new(p0: number, p1: io.github.humbleui.skija.DirectContext): io.github.humbleui.skija.Surface; + new(p0: number, p1: io.github.humbleui.skija.DirectContext, p2: io.github.humbleui.skija.BackendRenderTarget): io.github.humbleui.skija.Surface; + makeRasterDirect(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number): io.github.humbleui.skija.Surface; + makeRasterDirect(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number, p3: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + makeRasterDirect(p0: io.github.humbleui.skija.Pixmap): io.github.humbleui.skija.Surface; + makeRasterDirect(p0: io.github.humbleui.skija.Pixmap, p1: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + wrapPixels(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number): io.github.humbleui.skija.Surface; + wrapPixels(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number, p3: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + wrapPixels(p0: io.github.humbleui.skija.Pixmap): io.github.humbleui.skija.Surface; + wrapPixels(p0: io.github.humbleui.skija.Pixmap, p1: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + makeRaster(p0: io.github.humbleui.skija.ImageInfo): io.github.humbleui.skija.Surface; + makeRaster(p0: io.github.humbleui.skija.ImageInfo, p1: number): io.github.humbleui.skija.Surface; + makeRaster(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + makeFromBackendRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: io.github.humbleui.skija.BackendRenderTarget, p2: io.github.humbleui.skija.SurfaceOrigin, p3: io.github.humbleui.skija.ColorType, p4: io.github.humbleui.skija.ColorSpace): io.github.humbleui.skija.Surface; + makeFromBackendRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: io.github.humbleui.skija.BackendRenderTarget, p2: io.github.humbleui.skija.SurfaceOrigin, p3: io.github.humbleui.skija.ColorType, p4: io.github.humbleui.skija.ColorSpace, p5: io.github.humbleui.skija.SurfaceProps): io.github.humbleui.skija.Surface; + wrapBackendRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: io.github.humbleui.skija.BackendRenderTarget, p2: io.github.humbleui.skija.SurfaceOrigin, p3: io.github.humbleui.skija.ColorType, p4: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.Surface; + wrapBackendRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: io.github.humbleui.skija.BackendRenderTarget, p2: io.github.humbleui.skija.SurfaceOrigin, p3: io.github.humbleui.skija.ColorType, p4: io.github.humbleui.skija.ColorSpace | null | undefined, p5: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + makeFromMTKView(p0: io.github.humbleui.skija.DirectContext, p1: number, p2: io.github.humbleui.skija.SurfaceOrigin, p3: number, p4: io.github.humbleui.skija.ColorType, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + wrapMTKView(p0: io.github.humbleui.skija.DirectContext, p1: number, p2: io.github.humbleui.skija.SurfaceOrigin, p3: number, p4: io.github.humbleui.skija.ColorType, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + makeRasterN32Premul(p0: number, p1: number): io.github.humbleui.skija.Surface; + makeRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: boolean, p2: io.github.humbleui.skija.ImageInfo): io.github.humbleui.skija.Surface; + makeRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: boolean, p2: io.github.humbleui.skija.ImageInfo, p3: number, p4: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + makeRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: boolean, p2: io.github.humbleui.skija.ImageInfo, p3: number, p4: io.github.humbleui.skija.SurfaceOrigin, p5: io.github.humbleui.skija.SurfaceProps | null | undefined): io.github.humbleui.skija.Surface; + makeRenderTarget(p0: io.github.humbleui.skija.DirectContext, p1: boolean, p2: io.github.humbleui.skija.ImageInfo, p3: number, p4: io.github.humbleui.skija.SurfaceOrigin, p5: io.github.humbleui.skija.SurfaceProps | null | undefined, p6: boolean): io.github.humbleui.skija.Surface; + makeNull(p0: number, p1: number): io.github.humbleui.skija.Surface; + _nWrapPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.SurfaceProps): number; + _nWrapPixelsPixmap(p0: number, p1: io.github.humbleui.skija.SurfaceProps): number; + _nMakeRaster(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.SurfaceProps): number; + _nWrapBackendRenderTarget(p0: number, p1: number, p2: number, p3: number, p4: number, p5: io.github.humbleui.skija.SurfaceProps): number; + _nWrapMTKView(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.SurfaceProps): number; + _nMakeRenderTarget(p0: number, p1: boolean, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: io.github.humbleui.skija.SurfaceProps, p10: boolean): number; + _nMakeNull(p0: number, p1: number): number; + _nGetWidth(p0: number): number; + _nGetHeight(p0: number): number; + _nGetImageInfo(p0: number): io.github.humbleui.skija.ImageInfo; + _nGenerationId(p0: number): number; + _nNotifyContentWillChange(p0: number, p1: number): void; + _nGetRecordingContext(p0: number): number; + _nGetCanvas(p0: number): number; + _nMakeSurfaceI(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nMakeSurface(p0: number, p1: number, p2: number): number; + _nMakeImageSnapshot(p0: number): number; + _nMakeImageSnapshotR(p0: number, p1: number, p2: number, p3: number, p4: number): number; + _nDraw(p0: number, p1: number, p2: number, p3: number, p4: number): void; + _nPeekPixels(p0: number, p1: number): boolean; + _nReadPixelsToPixmap(p0: number, p1: number, p2: number, p3: number): boolean; + _nReadPixels(p0: number, p1: number, p2: number, p3: number): boolean; + _nWritePixelsFromPixmap(p0: number, p1: number, p2: number, p3: number): void; + _nWritePixels(p0: number, p1: number, p2: number, p3: number): void; + _nUnique(p0: number): boolean; + } + interface Surface extends io.github.humbleui.skija.impl.RefCnt { + _canvas: io.github.humbleui.skija.Canvas; + _context: io.github.humbleui.skija.DirectContext; + _renderTarget: io.github.humbleui.skija.BackendRenderTarget; + getWidth(): number; + getHeight(): number; + getImageInfo(): io.github.humbleui.skija.ImageInfo; + getGenerationId(): number; + notifyContentWillChange(p0: io.github.humbleui.skija.ContentChangeMode): void; + getRecordingContext(): io.github.humbleui.skija.DirectContext | null | undefined; + getCanvas(): io.github.humbleui.skija.Canvas; + makeSurface(p0: io.github.humbleui.skija.ImageInfo): io.github.humbleui.skija.Surface | null | undefined; + makeSurface(p0: number, p1: number): io.github.humbleui.skija.Surface | null | undefined; + makeImageSnapshot(): io.github.humbleui.skija.Image; + makeImageSnapshot(p0: io.github.humbleui.types.IRect): io.github.humbleui.skija.Image | null | undefined; + draw(p0: io.github.humbleui.skija.Canvas, p1: number, p2: number, p3: io.github.humbleui.skija.Paint): void; + peekPixels(p0: io.github.humbleui.skija.Pixmap): boolean; + readPixels(p0: io.github.humbleui.skija.Pixmap, p1: number, p2: number): boolean; + readPixels(p0: io.github.humbleui.skija.Bitmap, p1: number, p2: number): boolean; + writePixels(p0: io.github.humbleui.skija.Pixmap, p1: number, p2: number): void; + writePixels(p0: io.github.humbleui.skija.Bitmap, p1: number, p2: number): void; + isUnique(): boolean; + } + const DirectContext: { + new(p0: number): io.github.humbleui.skija.DirectContext; + makeGL(): io.github.humbleui.skija.DirectContext; + makeMetal(p0: number, p1: number): io.github.humbleui.skija.DirectContext; + makeDirect3D(p0: number, p1: number, p2: number): io.github.humbleui.skija.DirectContext; + makeVulkan(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): io.github.humbleui.skija.DirectContext; + _nMakeGL(): number; + _nMakeMetal(p0: number, p1: number): number; + _nMakeDirect3D(p0: number, p1: number, p2: number): number; + _nMakeVulkan(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): number; + _nFlush(p0: number): void; + _nSubmit(p0: number, p1: boolean): boolean; + _nFlushAndSubmit(p0: number, p1: boolean): void; + _nFlushSurface(p0: number, p1: number): void; + _nFlushAndSubmitSurface(p0: number, p1: number, p2: boolean): void; + _nReset(p0: number, p1: number): void; + _nAbandon(p0: number): void; + } + interface DirectContext extends io.github.humbleui.skija.impl.RefCnt { + flush(): io.github.humbleui.skija.DirectContext; + flush(p0: io.github.humbleui.skija.Surface): io.github.humbleui.skija.DirectContext; + submit(): boolean; + submit(p0: boolean): boolean; + flushAndSubmit(p0: boolean): io.github.humbleui.skija.DirectContext; + flushAndSubmit(p0: io.github.humbleui.skija.Surface): io.github.humbleui.skija.DirectContext; + flushAndSubmit(p0: io.github.humbleui.skija.Surface, p1: boolean): io.github.humbleui.skija.DirectContext; + resetAll(): io.github.humbleui.skija.DirectContext; + resetGLAll(): io.github.humbleui.skija.DirectContext; + reset(p0: io.github.humbleui.skija.BackendState): io.github.humbleui.skija.DirectContext; + abandon(): void; + } + const BackendState: { + GL_RENDER_TARGET: io.github.humbleui.skija.BackendState; + GL_TEXTURE_BINDING: io.github.humbleui.skija.BackendState; + GL_VIEW: io.github.humbleui.skija.BackendState; + GL_BLEND: io.github.humbleui.skija.BackendState; + GL_MSAA_ENABLE: io.github.humbleui.skija.BackendState; + GL_VERTEX: io.github.humbleui.skija.BackendState; + GL_STENCIL: io.github.humbleui.skija.BackendState; + GL_PIXEL_STORE: io.github.humbleui.skija.BackendState; + GL_PROGRAM: io.github.humbleui.skija.BackendState; + GL_FIXED_FUNCTION: io.github.humbleui.skija.BackendState; + GL_MISC: io.github.humbleui.skija.BackendState; + GL_ALL: io.github.humbleui.skija.BackendState; + ALL: io.github.humbleui.skija.BackendState; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.BackendState; + } + interface BackendState extends kotlin.Enum { + _value: number; + getValue(): number; + } + const BackendRenderTarget: { + _FinalizerHolder: typeof io.github.humbleui.skija.BackendRenderTarget$_FinalizerHolder; + new(p0: number): io.github.humbleui.skija.BackendRenderTarget; + makeGL(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.skija.BackendRenderTarget; + makeMetal(p0: number, p1: number, p2: number): io.github.humbleui.skija.BackendRenderTarget; + makeDirect3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.skija.BackendRenderTarget; + makeVulkan(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): io.github.humbleui.skija.BackendRenderTarget; + _nGetFinalizer(): number; + _nMakeGL(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nMakeMetal(p0: number, p1: number, p2: number): number; + _nMakeDirect3D(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nMakeVulkan(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): number; + } + interface BackendRenderTarget extends io.github.humbleui.skija.impl.Managed { + } + const BackendRenderTarget$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.BackendRenderTarget$_FinalizerHolder; + } + interface BackendRenderTarget$_FinalizerHolder { + } + const ImageInfo: { + DEFAULT: io.github.humbleui.skija.ImageInfo; + new(p0: number, p1: number, p2: io.github.humbleui.skija.ColorType, p3: io.github.humbleui.skija.ColorAlphaType): io.github.humbleui.skija.ImageInfo; + new(p0: number, p1: number, p2: io.github.humbleui.skija.ColorType, p3: io.github.humbleui.skija.ColorAlphaType, p4: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.ImageInfo; + new(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.ImageInfo; + new(p0: io.github.humbleui.skija.ColorInfo, p1: number, p2: number): io.github.humbleui.skija.ImageInfo; + makeN32(p0: number, p1: number, p2: io.github.humbleui.skija.ColorAlphaType): io.github.humbleui.skija.ImageInfo; + makeN32(p0: number, p1: number, p2: io.github.humbleui.skija.ColorAlphaType, p3: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.ImageInfo; + makeS32(p0: number, p1: number, p2: io.github.humbleui.skija.ColorAlphaType): io.github.humbleui.skija.ImageInfo; + makeN32Premul(p0: number, p1: number): io.github.humbleui.skija.ImageInfo; + makeN32Premul(p0: number, p1: number, p2: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.ImageInfo; + makeA8(p0: number, p1: number): io.github.humbleui.skija.ImageInfo; + makeUnknown(p0: number, p1: number): io.github.humbleui.skija.ImageInfo; + } + interface ImageInfo { + _colorInfo: io.github.humbleui.skija.ColorInfo; + _width: number; + _height: number; + getColorType(): io.github.humbleui.skija.ColorType; + withColorType(p0: io.github.humbleui.skija.ColorType): io.github.humbleui.skija.ImageInfo; + getColorAlphaType(): io.github.humbleui.skija.ColorAlphaType; + withColorAlphaType(p0: io.github.humbleui.skija.ColorAlphaType): io.github.humbleui.skija.ImageInfo; + getColorSpace(): io.github.humbleui.skija.ColorSpace | null | undefined; + withColorSpace(p0: io.github.humbleui.skija.ColorSpace): io.github.humbleui.skija.ImageInfo; + isEmpty(): boolean; + isOpaque(): boolean; + getBounds(): io.github.humbleui.types.IRect; + isGammaCloseToSRGB(): boolean; + withWidthHeight(p0: number, p1: number): io.github.humbleui.skija.ImageInfo; + getBytesPerPixel(): number; + getShiftPerPixel(): number; + getMinRowBytes(): number; + computeOffset(p0: number, p1: number, p2: number): number; + computeByteSize(p0: number): number; + computeMinByteSize(): number; + isRowBytesValid(p0: number): boolean; + getColorInfo(): io.github.humbleui.skija.ColorInfo; + getWidth(): number; + getHeight(): number; + withColorInfo(p0: io.github.humbleui.skija.ColorInfo): io.github.humbleui.skija.ImageInfo; + withWidth(p0: number): io.github.humbleui.skija.ImageInfo; + withHeight(p0: number): io.github.humbleui.skija.ImageInfo; + } + const ColorInfo: { + DEFAULT: io.github.humbleui.skija.ColorInfo; + new(p0: io.github.humbleui.skija.ColorType, p1: io.github.humbleui.skija.ColorAlphaType, p2: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.ColorInfo; + } + interface ColorInfo { + _colorType: io.github.humbleui.skija.ColorType; + _alphaType: io.github.humbleui.skija.ColorAlphaType; + _colorSpace: io.github.humbleui.skija.ColorSpace | null | undefined; + isOpaque(): boolean; + getBytesPerPixel(): number; + getShiftPerPixel(): number; + isGammaCloseToSRGB(): boolean; + getColorType(): io.github.humbleui.skija.ColorType; + getAlphaType(): io.github.humbleui.skija.ColorAlphaType; + getColorSpace(): io.github.humbleui.skija.ColorSpace | null | undefined; + withColorType(p0: io.github.humbleui.skija.ColorType): io.github.humbleui.skija.ColorInfo; + withAlphaType(p0: io.github.humbleui.skija.ColorAlphaType): io.github.humbleui.skija.ColorInfo; + withColorSpace(p0: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.ColorInfo; + } + const ColorType: { + UNKNOWN: io.github.humbleui.skija.ColorType; + ALPHA_8: io.github.humbleui.skija.ColorType; + RGB_565: io.github.humbleui.skija.ColorType; + ARGB_4444: io.github.humbleui.skija.ColorType; + RGBA_8888: io.github.humbleui.skija.ColorType; + RGB_888X: io.github.humbleui.skija.ColorType; + BGRA_8888: io.github.humbleui.skija.ColorType; + RGBA_1010102: io.github.humbleui.skija.ColorType; + BGRA_1010102: io.github.humbleui.skija.ColorType; + RGB_101010X: io.github.humbleui.skija.ColorType; + BGR_101010X: io.github.humbleui.skija.ColorType; + BGR_101010X_XR: io.github.humbleui.skija.ColorType; + BGRA_10101010_XR: io.github.humbleui.skija.ColorType; + RGBA_10X6: io.github.humbleui.skija.ColorType; + GRAY_8: io.github.humbleui.skija.ColorType; + RGBA_F16NORM: io.github.humbleui.skija.ColorType; + RGBA_F16: io.github.humbleui.skija.ColorType; + RGB_F16F16F16X: io.github.humbleui.skija.ColorType; + RGBA_F32: io.github.humbleui.skija.ColorType; + R8G8_UNORM: io.github.humbleui.skija.ColorType; + A16_FLOAT: io.github.humbleui.skija.ColorType; + R16G16_FLOAT: io.github.humbleui.skija.ColorType; + A16_UNORM: io.github.humbleui.skija.ColorType; + R16G16_UNORM: io.github.humbleui.skija.ColorType; + R16G16B16A16_UNORM: io.github.humbleui.skija.ColorType; + SRGBA_8888: io.github.humbleui.skija.ColorType; + R8_UNORM: io.github.humbleui.skija.ColorType; + N32: io.github.humbleui.skija.ColorType; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.ColorType; + } + interface ColorType extends kotlin.Enum { + getBytesPerPixel(): number; + getShiftPerPixel(): number; + isAlwaysOpaque(): boolean; + isAlphaOnly(): boolean; + validateAlphaType(p0: io.github.humbleui.skija.ColorAlphaType): io.github.humbleui.skija.ColorAlphaType | null | undefined; + getChannelFlags(): number; + getNumChannels(): number; + computeOffset(p0: number, p1: number, p2: number): number; + getR(p0: number): number; + getR(p0: number): number; + getR(p0: number): number; + getG(p0: number): number; + getG(p0: number): number; + getG(p0: number): number; + getB(p0: number): number; + getB(p0: number): number; + getB(p0: number): number; + getA(p0: number): number; + getA(p0: number): number; + getA(p0: number): number; + } + const ColorAlphaType: { + UNKNOWN: io.github.humbleui.skija.ColorAlphaType; + OPAQUE: io.github.humbleui.skija.ColorAlphaType; + PREMUL: io.github.humbleui.skija.ColorAlphaType; + UNPREMUL: io.github.humbleui.skija.ColorAlphaType; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.ColorAlphaType; + } + interface ColorAlphaType extends kotlin.Enum { + } + const ColorSpace: { + _FinalizerHolder: typeof io.github.humbleui.skija.ColorSpace$_FinalizerHolder; + _DisplayP3Holder: typeof io.github.humbleui.skija.ColorSpace$_DisplayP3Holder; + _SRGBLinearHolder: typeof io.github.humbleui.skija.ColorSpace$_SRGBLinearHolder; + _SRGBHolder: typeof io.github.humbleui.skija.ColorSpace$_SRGBHolder; + new(p0: number): io.github.humbleui.skija.ColorSpace; + new(p0: number, p1: boolean): io.github.humbleui.skija.ColorSpace; + getSRGB(): io.github.humbleui.skija.ColorSpace; + getSRGBLinear(): io.github.humbleui.skija.ColorSpace; + getDisplayP3(): io.github.humbleui.skija.ColorSpace; + makeRGB(p0: io.github.humbleui.skija.TransferFunction, p1: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.ColorSpace | null | undefined; + makeCICP(p0: io.github.humbleui.skija.ColorSpaceNamedPrimaries, p1: io.github.humbleui.skija.ColorSpaceNamedTransferFn): io.github.humbleui.skija.ColorSpace | null | undefined; + makeFromData(p0: io.github.humbleui.skija.Data): io.github.humbleui.skija.ColorSpace | null | undefined; + makeFromICCProfile(p0: Array): io.github.humbleui.skija.ColorSpace | null | undefined; + _nGetFinalizer(): number; + _nMakeSRGB(): number; + _nMakeDisplayP3(): number; + _nMakeSRGBLinear(): number; + _nMakeRGB(p0: io.github.humbleui.skija.TransferFunction, p1: kotlin.FloatArray): number; + _nMakeCICP(p0: number, p1: number): number; + _nConvert(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): kotlin.FloatArray; + _nIsGammaCloseToSRGB(p0: number): boolean; + _nIsGammaLinear(p0: number): boolean; + _nIsSRGB(p0: number): boolean; + _nGetNumericalTransferFn(p0: number): io.github.humbleui.skija.TransferFunction; + _nGetToXYZD50(p0: number): kotlin.FloatArray; + _nGetToXYZD50Hash(p0: number): number; + _nGetTransferFnHash(p0: number): number; + _nGetHash(p0: number): number; + _nMakeLinearGamma(p0: number): number; + _nMakeSRGBGamma(p0: number): number; + _nMakeColorSpin(p0: number): number; + _nSerializeToData(p0: number): number; + _nMakeFromData(p0: number): number; + _nTransferFn(p0: number): io.github.humbleui.skija.TransferFunction; + _nInvTransferFn(p0: number): io.github.humbleui.skija.TransferFunction; + _nGamutTransformTo(p0: number, p1: number): kotlin.FloatArray; + _nEquals(p0: number, p1: number): boolean; + _nMakeFromICCProfile(p0: Array): number; + } + interface ColorSpace extends io.github.humbleui.skija.impl.Managed { + convert(p0: io.github.humbleui.skija.ColorSpace, p1: io.github.humbleui.skija.Color4f): io.github.humbleui.skija.Color4f; + isGammaCloseToSRGB(): boolean; + isGammaLinear(): boolean; + isSRGB(): boolean; + getNumericalTransferFn(): io.github.humbleui.skija.TransferFunction | null | undefined; + getToXYZD50(): io.github.humbleui.skija.Matrix33 | null | undefined; + getToXYZD50Hash(): number; + getTransferFnHash(): number; + getHash(): number; + makeLinearGamma(): io.github.humbleui.skija.ColorSpace; + makeSRGBGamma(): io.github.humbleui.skija.ColorSpace; + makeColorSpin(): io.github.humbleui.skija.ColorSpace; + serializeToData(): io.github.humbleui.skija.Data; + getTransferFn(): io.github.humbleui.skija.TransferFunction; + getInvTransferFn(): io.github.humbleui.skija.TransferFunction; + getGamutTransformTo(p0: io.github.humbleui.skija.ColorSpace): io.github.humbleui.skija.Matrix33; + } + const Color4f: { + new(p0: number, p1: number, p2: number): io.github.humbleui.skija.Color4f; + new(p0: kotlin.FloatArray): io.github.humbleui.skija.Color4f; + new(p0: number): io.github.humbleui.skija.Color4f; + new(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.Color4f; + flattenArray(p0: Array): kotlin.FloatArray; + } + interface Color4f { + _r: number; + _g: number; + _b: number; + _a: number; + toColor(): number; + flatten(): kotlin.FloatArray; + premultiply(): io.github.humbleui.skija.Color4f; + unpremultiply(): io.github.humbleui.skija.Color4f; + makeLerp(p0: io.github.humbleui.skija.Color4f, p1: number): io.github.humbleui.skija.Color4f; + makeLerpPM(p0: io.github.humbleui.skija.Color4f, p1: number): io.github.humbleui.skija.Color4f; + getR(): number; + getG(): number; + getB(): number; + getA(): number; + withR(p0: number): io.github.humbleui.skija.Color4f; + withG(p0: number): io.github.humbleui.skija.Color4f; + withB(p0: number): io.github.humbleui.skija.Color4f; + withA(p0: number): io.github.humbleui.skija.Color4f; + } + const TransferFunction: { + new(p0: kotlin.FloatArray): io.github.humbleui.skija.TransferFunction; + new(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): io.github.humbleui.skija.TransferFunction; + } + interface TransferFunction { + _g: number; + _a: number; + _b: number; + _c: number; + _d: number; + _e: number; + _f: number; + getG(): number; + getA(): number; + getB(): number; + getC(): number; + getD(): number; + getE(): number; + getF(): number; + withG(p0: number): io.github.humbleui.skija.TransferFunction; + withA(p0: number): io.github.humbleui.skija.TransferFunction; + withB(p0: number): io.github.humbleui.skija.TransferFunction; + withC(p0: number): io.github.humbleui.skija.TransferFunction; + withD(p0: number): io.github.humbleui.skija.TransferFunction; + withE(p0: number): io.github.humbleui.skija.TransferFunction; + withF(p0: number): io.github.humbleui.skija.TransferFunction; + } + const Matrix33: { + IDENTITY: io.github.humbleui.skija.Matrix33; + new(p0: number): io.github.humbleui.skija.Matrix33; + makeTranslate(p0: number, p1: number): io.github.humbleui.skija.Matrix33; + makeScale(p0: number): io.github.humbleui.skija.Matrix33; + makeScale(p0: number, p1: number): io.github.humbleui.skija.Matrix33; + makeRotate(p0: number): io.github.humbleui.skija.Matrix33; + makeRotate(p0: number, p1: io.github.humbleui.types.Point): io.github.humbleui.skija.Matrix33; + makeRotate(p0: number, p1: number, p2: number): io.github.humbleui.skija.Matrix33; + makeSkew(p0: number, p1: number): io.github.humbleui.skija.Matrix33; + } + interface Matrix33 { + _mat: kotlin.FloatArray; + makePreScale(p0: number, p1: number): io.github.humbleui.skija.Matrix33; + makeConcat(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.Matrix33; + asMatrix44(): io.github.humbleui.skija.Matrix44; + getMat(): kotlin.FloatArray; + } + const Matrix44: { + IDENTITY: io.github.humbleui.skija.Matrix44; + new(p0: number): io.github.humbleui.skija.Matrix44; + } + interface Matrix44 { + _mat: kotlin.FloatArray; + asMatrix33(): io.github.humbleui.skija.Matrix33; + getMat(): kotlin.FloatArray; + } + const Data: { + _FinalizerHolder: typeof io.github.humbleui.skija.Data$_FinalizerHolder; + new(p0: number): io.github.humbleui.skija.Data; + makeFromBytes(p0: Array): io.github.humbleui.skija.Data; + makeFromBytes(p0: Array, p1: number, p2: number): io.github.humbleui.skija.Data; + makeFromFileName(p0: string): io.github.humbleui.skija.Data | null | undefined; + makeEmpty(): io.github.humbleui.skija.Data; + _nGetFinalizer(): number; + _nSize(p0: number): number; + _nBytes(p0: number, p1: number, p2: number): Array; + _nEquals(p0: number, p1: number): boolean; + _nToByteBuffer(p0: number): java.nio.ByteBuffer; + _nMakeFromBytes(p0: Array, p1: number, p2: number): number; + _nMakeFromFileName(p0: string): number; + _nMakeSubset(p0: number, p1: number, p2: number): number; + _nMakeEmpty(): number; + } + interface Data extends io.github.humbleui.skija.impl.Managed { + getSize(): number; + getBytes(): Array; + getBytes(p0: number, p1: number): Array; + makeSubset(p0: number, p1: number): io.github.humbleui.skija.Data; + makeCopy(): io.github.humbleui.skija.Data; + toByteBuffer(): java.nio.ByteBuffer; + } + const Data$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Data$_FinalizerHolder; + } + interface Data$_FinalizerHolder { + } + const ColorSpaceNamedPrimaries: { + REC709: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + REC470_SYSTEM_M: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + REC470_SYSTEM_BG: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + REC601: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + SMPTE_ST_240: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + GENERIC_FILM: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + REC2020: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + SMPTE_ST_428_1: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + SMPTE_RP_431_2: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + SMPTE_EG_432_1: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + ITU_T_H273_VALUE22: io.github.humbleui.skija.ColorSpaceNamedPrimaries; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.ColorSpaceNamedPrimaries; + } + interface ColorSpaceNamedPrimaries extends kotlin.Enum { + _value: number; + } + const ColorSpaceNamedTransferFn: { + REC709: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + REC470_SYSTEM_M: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + REC470_SYSTEM_BG: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + REC601: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + SMPTE_ST_240: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + LINEAR: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + IEC61966_2_4: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + SRGB: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + REC2020_10BIT: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + REC2020_12BIT: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + PQ: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + SMPTE_ST_428_1: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + HLG: io.github.humbleui.skija.ColorSpaceNamedTransferFn; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.ColorSpaceNamedTransferFn; + } + interface ColorSpaceNamedTransferFn extends kotlin.Enum { + _value: number; + } + const ColorSpace$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.ColorSpace$_FinalizerHolder; + } + interface ColorSpace$_FinalizerHolder { + } + const ColorSpace$_DisplayP3Holder: { + INSTANCE: io.github.humbleui.skija.ColorSpace; + new(): io.github.humbleui.skija.ColorSpace$_DisplayP3Holder; + } + interface ColorSpace$_DisplayP3Holder { + } + const ColorSpace$_SRGBLinearHolder: { + INSTANCE: io.github.humbleui.skija.ColorSpace; + new(): io.github.humbleui.skija.ColorSpace$_SRGBLinearHolder; + } + interface ColorSpace$_SRGBLinearHolder { + } + const ColorSpace$_SRGBHolder: { + INSTANCE: io.github.humbleui.skija.ColorSpace; + new(): io.github.humbleui.skija.ColorSpace$_SRGBHolder; + } + interface ColorSpace$_SRGBHolder { + } + const ContentChangeMode: { + DISCARD: io.github.humbleui.skija.ContentChangeMode; + RETAIN: io.github.humbleui.skija.ContentChangeMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.ContentChangeMode; + } + interface ContentChangeMode extends kotlin.Enum { + } + const Image: { + new(p0: number): io.github.humbleui.skija.Image; + makeRaster(p0: io.github.humbleui.skija.ImageInfo, p1: Array, p2: number): io.github.humbleui.skija.Image; + makeRaster(p0: io.github.humbleui.skija.ImageInfo, p1: io.github.humbleui.skija.Data, p2: number): io.github.humbleui.skija.Image; + adoptGLTextureFrom(p0: io.github.humbleui.skija.DirectContext, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.SurfaceOrigin, p7: io.github.humbleui.skija.ColorType): io.github.humbleui.skija.Image; + makeRasterFromBytes(p0: io.github.humbleui.skija.ImageInfo, p1: Array, p2: number): io.github.humbleui.skija.Image; + makeRasterFromData(p0: io.github.humbleui.skija.ImageInfo, p1: io.github.humbleui.skija.Data, p2: number): io.github.humbleui.skija.Image; + makeFromBitmap(p0: io.github.humbleui.skija.Bitmap): io.github.humbleui.skija.Image; + makeRasterFromBitmap(p0: io.github.humbleui.skija.Bitmap): io.github.humbleui.skija.Image; + makeFromPixmap(p0: io.github.humbleui.skija.Pixmap): io.github.humbleui.skija.Image; + makeRasterFromPixmap(p0: io.github.humbleui.skija.Pixmap): io.github.humbleui.skija.Image; + makeFromEncoded(p0: Array): io.github.humbleui.skija.Image; + makeDeferredFromEncodedBytes(p0: Array): io.github.humbleui.skija.Image; + makeWithFilter(p0: io.github.humbleui.skija.ImageFilter, p1: io.github.humbleui.skija.Image, p2: io.github.humbleui.types.IRect, p3: io.github.humbleui.types.IRect): io.github.humbleui.skija.ImageWithFilterResult | null | undefined; + makeWithFilter(p0: io.github.humbleui.skija.DirectContext, p1: io.github.humbleui.skija.ImageFilter, p2: io.github.humbleui.skija.Image, p3: io.github.humbleui.types.IRect, p4: io.github.humbleui.types.IRect): io.github.humbleui.skija.ImageWithFilterResult | null | undefined; + _nAdoptGLTextureFrom(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): number; + _nMakeRasterFromBytes(p0: number, p1: number, p2: number, p3: number, p4: number, p5: Array, p6: number): number; + _nMakeRasterFromData(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): number; + _nMakeRasterFromBitmap(p0: number): number; + _nMakeRasterFromPixmap(p0: number): number; + _nMakeDeferredFromEncodedBytes(p0: Array): number; + _nGetImageInfo(p0: number): io.github.humbleui.skija.ImageInfo; + _nMakeShader(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): number; + _nPeekPixels(p0: number): java.nio.ByteBuffer; + _nPeekPixelsToPixmap(p0: number, p1: number): boolean; + _nScalePixels(p0: number, p1: number, p2: number, p3: boolean): boolean; + _nMakeScaled(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): number; + _nMakeSubset(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nReadPixelsBitmap(p0: number, p1: number, p2: number, p3: number, p4: number, p5: boolean): boolean; + _nReadPixelsPixmap(p0: number, p1: number, p2: number, p3: number, p4: boolean): boolean; + _nMakeWithFilter(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): io.github.humbleui.skija.ImageWithFilterResult; + _nMakeWithFilterContext(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number): io.github.humbleui.skija.ImageWithFilterResult; + } + interface Image extends io.github.humbleui.skija.impl.RefCnt, io.github.humbleui.skija.IHasImageInfo { + _imageInfo: io.github.humbleui.skija.ImageInfo; + encodeToData(): io.github.humbleui.skija.Data; + encodeToData(p0: io.github.humbleui.skija.EncodedImageFormat): io.github.humbleui.skija.Data; + encodeToData(p0: io.github.humbleui.skija.EncodedImageFormat, p1: number): io.github.humbleui.skija.Data; + makeShader(): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.SamplingMode, p3: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + peekPixels(): java.nio.ByteBuffer | null | undefined; + peekPixels(p0: io.github.humbleui.skija.Pixmap): boolean; + readPixels(p0: io.github.humbleui.skija.Bitmap): boolean; + readPixels(p0: io.github.humbleui.skija.Bitmap, p1: number, p2: number): boolean; + readPixels(p0: io.github.humbleui.skija.DirectContext | null | undefined, p1: io.github.humbleui.skija.Bitmap, p2: number, p3: number, p4: boolean): boolean; + readPixels(p0: io.github.humbleui.skija.Pixmap, p1: number, p2: number, p3: boolean): boolean; + scalePixels(p0: io.github.humbleui.skija.Pixmap, p1: io.github.humbleui.skija.SamplingMode, p2: boolean): boolean; + makeScaled(p0: io.github.humbleui.skija.ImageInfo, p1: io.github.humbleui.skija.SamplingMode): io.github.humbleui.skija.Image | null | undefined; + makeSubset(p0: io.github.humbleui.types.IRect): io.github.humbleui.skija.Image | null | undefined; + makeSubset(p0: io.github.humbleui.skija.DirectContext | null | undefined, p1: io.github.humbleui.types.IRect): io.github.humbleui.skija.Image | null | undefined; + } + interface IHasImageInfo { + getImageInfo(): io.github.humbleui.skija.ImageInfo; + getWidth(): number; + getHeight(): number; + getColorInfo(): io.github.humbleui.skija.ColorInfo; + getColorType(): io.github.humbleui.skija.ColorType; + getAlphaType(): io.github.humbleui.skija.ColorAlphaType; + getColorSpace(): io.github.humbleui.skija.ColorSpace | null | undefined; + getBytesPerPixel(): number; + getShiftPerPixel(): number; + isEmpty(): boolean; + isOpaque(): boolean; + } + const EncodedImageFormat: { + BMP: io.github.humbleui.skija.EncodedImageFormat; + GIF: io.github.humbleui.skija.EncodedImageFormat; + ICO: io.github.humbleui.skija.EncodedImageFormat; + JPEG: io.github.humbleui.skija.EncodedImageFormat; + PNG: io.github.humbleui.skija.EncodedImageFormat; + WBMP: io.github.humbleui.skija.EncodedImageFormat; + WEBP: io.github.humbleui.skija.EncodedImageFormat; + PKM: io.github.humbleui.skija.EncodedImageFormat; + KTX: io.github.humbleui.skija.EncodedImageFormat; + ASTC: io.github.humbleui.skija.EncodedImageFormat; + DNG: io.github.humbleui.skija.EncodedImageFormat; + HEIF: io.github.humbleui.skija.EncodedImageFormat; + AVIF: io.github.humbleui.skija.EncodedImageFormat; + JPEGXL: io.github.humbleui.skija.EncodedImageFormat; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.EncodedImageFormat; + } + interface EncodedImageFormat extends kotlin.Enum { + } + const Shader: { + new(p0: number): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: Array): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: number, p1: number, p2: number, p3: number, p4: Array): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: Array, p3: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: number, p1: number, p2: number, p3: number, p4: Array, p5: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: Array, p3: kotlin.FloatArray, p4: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: number, p1: number, p2: number, p3: number, p4: Array, p5: kotlin.FloatArray, p6: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: Array, p3: io.github.humbleui.skija.ColorSpace, p4: kotlin.FloatArray, p5: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeLinearGradient(p0: number, p1: number, p2: number, p3: number, p4: Array, p5: io.github.humbleui.skija.ColorSpace, p6: kotlin.FloatArray, p7: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: io.github.humbleui.types.Point, p1: number, p2: Array): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: number, p1: number, p2: number, p3: Array): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: io.github.humbleui.types.Point, p1: number, p2: Array, p3: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: number, p1: number, p2: number, p3: Array, p4: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: io.github.humbleui.types.Point, p1: number, p2: Array, p3: kotlin.FloatArray, p4: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: number, p1: number, p2: number, p3: Array, p4: kotlin.FloatArray, p5: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: io.github.humbleui.types.Point, p1: number, p2: Array, p3: io.github.humbleui.skija.ColorSpace, p4: kotlin.FloatArray, p5: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeRadialGradient(p0: number, p1: number, p2: number, p3: Array, p4: io.github.humbleui.skija.ColorSpace, p5: kotlin.FloatArray, p6: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: io.github.humbleui.types.Point, p1: number, p2: io.github.humbleui.types.Point, p3: number, p4: Array): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: io.github.humbleui.types.Point, p1: number, p2: io.github.humbleui.types.Point, p3: number, p4: Array, p5: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array, p7: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: io.github.humbleui.types.Point, p1: number, p2: io.github.humbleui.types.Point, p3: number, p4: Array, p5: kotlin.FloatArray, p6: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array, p7: kotlin.FloatArray, p8: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: io.github.humbleui.types.Point, p1: number, p2: io.github.humbleui.types.Point, p3: number, p4: Array, p5: io.github.humbleui.skija.ColorSpace, p6: kotlin.FloatArray, p7: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeTwoPointConicalGradient(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array, p7: io.github.humbleui.skija.ColorSpace, p8: kotlin.FloatArray, p9: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: io.github.humbleui.types.Point, p1: Array): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: number, p1: number, p2: Array): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: io.github.humbleui.types.Point, p1: Array, p2: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: number, p1: number, p2: Array, p3: kotlin.FloatArray): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: io.github.humbleui.types.Point, p1: Array, p2: kotlin.FloatArray, p3: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: number, p1: number, p2: Array, p3: kotlin.FloatArray, p4: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: io.github.humbleui.types.Point, p1: number, p2: number, p3: Array, p4: kotlin.FloatArray, p5: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: number, p1: number, p2: number, p3: number, p4: Array, p5: kotlin.FloatArray, p6: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: io.github.humbleui.types.Point, p1: number, p2: number, p3: Array, p4: io.github.humbleui.skija.ColorSpace, p5: kotlin.FloatArray, p6: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeSweepGradient(p0: number, p1: number, p2: number, p3: number, p4: Array, p5: io.github.humbleui.skija.ColorSpace, p6: kotlin.FloatArray, p7: io.github.humbleui.skija.GradientStyle): io.github.humbleui.skija.Shader; + makeFractalNoise(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.types.IPoint | null | undefined): io.github.humbleui.skija.Shader; + makeFractalNoise(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.Shader; + makeTurbulence(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.types.IPoint | null | undefined): io.github.humbleui.skija.Shader; + makeTurbulence(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.Shader; + makeEmpty(): io.github.humbleui.skija.Shader; + makeColor(p0: number): io.github.humbleui.skija.Shader; + makeColor(p0: io.github.humbleui.skija.Color4f, p1: io.github.humbleui.skija.ColorSpace): io.github.humbleui.skija.Shader; + makeBlend(p0: io.github.humbleui.skija.BlendMode, p1: io.github.humbleui.skija.Shader, p2: io.github.humbleui.skija.Shader): io.github.humbleui.skija.Shader; + _nIsOpaque(p0: number): boolean; + _nGetImage(p0: number): number; + _nMakeWithLocalMatrix(p0: number, p1: kotlin.FloatArray): number; + _nMakeWithWorkingColorSpace(p0: number, p1: number, p2: number): number; + _nMakeWithColorFilter(p0: number, p1: number): number; + _nMakeLinearGradient(p0: number, p1: number, p2: number, p3: number, p4: Array, p5: kotlin.FloatArray, p6: number, p7: number, p8: kotlin.FloatArray): number; + _nMakeLinearGradientCS(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray, p5: number, p6: kotlin.FloatArray, p7: number, p8: number, p9: kotlin.FloatArray): number; + _nMakeRadialGradient(p0: number, p1: number, p2: number, p3: Array, p4: kotlin.FloatArray, p5: number, p6: number, p7: kotlin.FloatArray): number; + _nMakeRadialGradientCS(p0: number, p1: number, p2: number, p3: kotlin.FloatArray, p4: number, p5: kotlin.FloatArray, p6: number, p7: number, p8: kotlin.FloatArray): number; + _nMakeTwoPointConicalGradient(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array, p7: kotlin.FloatArray, p8: number, p9: number, p10: kotlin.FloatArray): number; + _nMakeTwoPointConicalGradientCS(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: kotlin.FloatArray, p7: number, p8: kotlin.FloatArray, p9: number, p10: number, p11: kotlin.FloatArray): number; + _nMakeSweepGradient(p0: number, p1: number, p2: number, p3: number, p4: Array, p5: kotlin.FloatArray, p6: number, p7: number, p8: kotlin.FloatArray): number; + _nMakeSweepGradientCS(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray, p5: number, p6: kotlin.FloatArray, p7: number, p8: number, p9: kotlin.FloatArray): number; + _nMakeFractalNoise(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nMakeTurbulence(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nMakeEmpty(): number; + _nMakeColor(p0: number): number; + _nMakeColorCS(p0: number, p1: number, p2: number, p3: number, p4: number): number; + _nMakeBlend(p0: number, p1: number, p2: number): number; + } + interface Shader extends io.github.humbleui.skija.RuntimeEffectChild { + isOpaque(): boolean; + getImage(): io.github.humbleui.skija.Image | null | undefined; + makeWithLocalMatrix(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.Shader; + makeWithWorkingColorSpace(p0: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.Shader; + makeWithWorkingColorSpace(p0: io.github.humbleui.skija.ColorSpace | null | undefined, p1: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.Shader; + makeWithColorFilter(p0: io.github.humbleui.skija.ColorFilter): io.github.humbleui.skija.Shader; + } + interface RuntimeEffectChild extends io.github.humbleui.skija.impl.RefCnt, io.github.humbleui.skija.Flattenable { + } + interface Flattenable { + } + const ColorFilter: { + _LumaHolder: typeof io.github.humbleui.skija.ColorFilter$_LumaHolder; + _SRGBToLinearGammaHolder: typeof io.github.humbleui.skija.ColorFilter$_SRGBToLinearGammaHolder; + _LinearToSRGBGammaHolder: typeof io.github.humbleui.skija.ColorFilter$_LinearToSRGBGammaHolder; + new(p0: number): io.github.humbleui.skija.ColorFilter; + new(p0: number, p1: boolean): io.github.humbleui.skija.ColorFilter; + makeComposed(p0: io.github.humbleui.skija.ColorFilter, p1: io.github.humbleui.skija.ColorFilter): io.github.humbleui.skija.ColorFilter; + makeBlend(p0: number, p1: io.github.humbleui.skija.BlendMode): io.github.humbleui.skija.ColorFilter; + makeMatrix(p0: io.github.humbleui.skija.ColorMatrix): io.github.humbleui.skija.ColorFilter; + makeHSLAMatrix(p0: io.github.humbleui.skija.ColorMatrix): io.github.humbleui.skija.ColorFilter; + getLinearToSRGBGamma(): io.github.humbleui.skija.ColorFilter; + getSRGBToLinearGamma(): io.github.humbleui.skija.ColorFilter; + makeLerp(p0: io.github.humbleui.skija.ColorFilter, p1: io.github.humbleui.skija.ColorFilter, p2: number): io.github.humbleui.skija.ColorFilter; + makeLighting(p0: number, p1: number): io.github.humbleui.skija.ColorFilter; + makeHighContrast(p0: boolean, p1: io.github.humbleui.skija.InversionMode, p2: number): io.github.humbleui.skija.ColorFilter; + makeTable(p0: Array): io.github.humbleui.skija.ColorFilter; + makeTableARGB(p0: Array, p1: Array, p2: Array, p3: Array): io.github.humbleui.skija.ColorFilter; + makeOverdraw(p0: Array): io.github.humbleui.skija.ColorFilter; + getLuma(): io.github.humbleui.skija.ColorFilter; + _nMakeComposed(p0: number, p1: number): number; + _nMakeBlend(p0: number, p1: number): number; + _nMakeMatrix(p0: kotlin.FloatArray): number; + _nMakeHSLAMatrix(p0: kotlin.FloatArray): number; + _nGetLinearToSRGBGamma(): number; + _nGetSRGBToLinearGamma(): number; + _nMakeLerp(p0: number, p1: number, p2: number): number; + _nMakeLighting(p0: number, p1: number): number; + _nMakeHighContrast(p0: boolean, p1: number, p2: number): number; + _nMakeTable(p0: Array): number; + _nMakeTableARGB(p0: Array, p1: Array, p2: Array, p3: Array): number; + _nMakeOverdraw(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nGetLuma(): number; + } + interface ColorFilter extends io.github.humbleui.skija.RuntimeEffectChild { + } + const BlendMode: { + CLEAR: io.github.humbleui.skija.BlendMode; + SRC: io.github.humbleui.skija.BlendMode; + DST: io.github.humbleui.skija.BlendMode; + SRC_OVER: io.github.humbleui.skija.BlendMode; + DST_OVER: io.github.humbleui.skija.BlendMode; + SRC_IN: io.github.humbleui.skija.BlendMode; + DST_IN: io.github.humbleui.skija.BlendMode; + SRC_OUT: io.github.humbleui.skija.BlendMode; + DST_OUT: io.github.humbleui.skija.BlendMode; + SRC_ATOP: io.github.humbleui.skija.BlendMode; + DST_ATOP: io.github.humbleui.skija.BlendMode; + XOR: io.github.humbleui.skija.BlendMode; + PLUS: io.github.humbleui.skija.BlendMode; + MODULATE: io.github.humbleui.skija.BlendMode; + SCREEN: io.github.humbleui.skija.BlendMode; + OVERLAY: io.github.humbleui.skija.BlendMode; + DARKEN: io.github.humbleui.skija.BlendMode; + LIGHTEN: io.github.humbleui.skija.BlendMode; + COLOR_DODGE: io.github.humbleui.skija.BlendMode; + COLOR_BURN: io.github.humbleui.skija.BlendMode; + HARD_LIGHT: io.github.humbleui.skija.BlendMode; + SOFT_LIGHT: io.github.humbleui.skija.BlendMode; + DIFFERENCE: io.github.humbleui.skija.BlendMode; + EXCLUSION: io.github.humbleui.skija.BlendMode; + MULTIPLY: io.github.humbleui.skija.BlendMode; + HUE: io.github.humbleui.skija.BlendMode; + SATURATION: io.github.humbleui.skija.BlendMode; + COLOR: io.github.humbleui.skija.BlendMode; + LUMINOSITY: io.github.humbleui.skija.BlendMode; + LAST_COEFF_MODE: io.github.humbleui.skija.BlendMode; + LAST_SEPARABLE_MODE: io.github.humbleui.skija.BlendMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.BlendMode; + } + interface BlendMode extends kotlin.Enum { + } + const ColorMatrix: { + new(p0: number): io.github.humbleui.skija.ColorMatrix; + } + interface ColorMatrix { + _mat: kotlin.FloatArray; + getMat(): kotlin.FloatArray; + } + const InversionMode: { + NO: io.github.humbleui.skija.InversionMode; + BRIGHTNESS: io.github.humbleui.skija.InversionMode; + LIGHTNESS: io.github.humbleui.skija.InversionMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.InversionMode; + } + interface InversionMode extends kotlin.Enum { + } + const ColorFilter$_LumaHolder: { + INSTANCE: io.github.humbleui.skija.ColorFilter; + new(): io.github.humbleui.skija.ColorFilter$_LumaHolder; + } + interface ColorFilter$_LumaHolder { + } + const ColorFilter$_SRGBToLinearGammaHolder: { + INSTANCE: io.github.humbleui.skija.ColorFilter; + new(): io.github.humbleui.skija.ColorFilter$_SRGBToLinearGammaHolder; + } + interface ColorFilter$_SRGBToLinearGammaHolder { + } + const ColorFilter$_LinearToSRGBGammaHolder: { + INSTANCE: io.github.humbleui.skija.ColorFilter; + new(): io.github.humbleui.skija.ColorFilter$_LinearToSRGBGammaHolder; + } + interface ColorFilter$_LinearToSRGBGammaHolder { + } + const GradientStyle: { + _INTERPOLATE_PREMUL: number; + DEFAULT: io.github.humbleui.skija.GradientStyle; + new(p0: io.github.humbleui.skija.FilterTileMode, p1: boolean, p2: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.GradientStyle; + } + interface GradientStyle { + _tileMode: io.github.humbleui.skija.FilterTileMode; + _premul: boolean; + _localMatrix: io.github.humbleui.skija.Matrix33; + _getFlags(): number; + _getMatrixArray(): kotlin.FloatArray; + getTileMode(): io.github.humbleui.skija.FilterTileMode; + isPremul(): boolean; + getLocalMatrix(): io.github.humbleui.skija.Matrix33; + withTileMode(p0: io.github.humbleui.skija.FilterTileMode): io.github.humbleui.skija.GradientStyle; + withPremul(p0: boolean): io.github.humbleui.skija.GradientStyle; + withLocalMatrix(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.GradientStyle; + } + const FilterTileMode: { + CLAMP: io.github.humbleui.skija.FilterTileMode; + REPEAT: io.github.humbleui.skija.FilterTileMode; + MIRROR: io.github.humbleui.skija.FilterTileMode; + DECAL: io.github.humbleui.skija.FilterTileMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.FilterTileMode; + } + interface FilterTileMode extends kotlin.Enum { + } + const SamplingMode: { + DEFAULT: io.github.humbleui.skija.SamplingMode; + LINEAR: io.github.humbleui.skija.SamplingMode; + MITCHELL: io.github.humbleui.skija.SamplingMode; + CATMULL_ROM: io.github.humbleui.skija.SamplingMode; + } + interface SamplingMode { + _pack(): number; + } + const Pixmap: { + _FinalizerHolder: typeof io.github.humbleui.skija.Pixmap$_FinalizerHolder; + new(p0: number, p1: boolean): io.github.humbleui.skija.Pixmap; + new(): io.github.humbleui.skija.Pixmap; + make(p0: io.github.humbleui.skija.ImageInfo, p1: java.nio.ByteBuffer, p2: number): io.github.humbleui.skija.Pixmap; + make(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number): io.github.humbleui.skija.Pixmap; + _nGetFinalizer(): number; + _nMakeNull(): number; + _nMake(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): number; + _nReset(p0: number): void; + _nResetWithInfo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; + _nSetColorSpace(p0: number, p1: number): void; + _nExtractSubset(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): boolean; + _nGetImageInfo(p0: number): io.github.humbleui.skija.ImageInfo; + _nGetRowBytes(p0: number): number; + _nGetAddr(p0: number): number; + _nGetRowBytesAsPixels(p0: number): number; + _nComputeByteSize(p0: number): number; + _nComputeIsOpaque(p0: number): boolean; + _nGetColor(p0: number, p1: number, p2: number): number; + _nGetColor4f(p0: number, p1: number, p2: number): io.github.humbleui.skija.Color4f; + _nGetAlphaF(p0: number, p1: number, p2: number): number; + _nGetAddrAt(p0: number, p1: number, p2: number): number; + _nReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): boolean; + _nReadPixelsFromPoint(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): boolean; + _nReadPixelsToPixmap(p0: number, p1: number): boolean; + _nReadPixelsToPixmapFromPoint(p0: number, p1: number, p2: number, p3: number): boolean; + _nScalePixels(p0: number, p1: number, p2: number): boolean; + _nErase(p0: number, p1: number): boolean; + _nEraseSubset(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): boolean; + _nErase4f(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nEraseSubset4f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): boolean; + } + interface Pixmap extends io.github.humbleui.skija.impl.Managed, io.github.humbleui.skija.IHasImageInfo { + _imageInfo: io.github.humbleui.skija.ImageInfo; + reset(): void; + reset(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number): void; + reset(p0: io.github.humbleui.skija.ImageInfo, p1: java.nio.ByteBuffer, p2: number): void; + setColorSpace(p0: io.github.humbleui.skija.ColorSpace): void; + extractSubset(p0: number, p1: io.github.humbleui.types.IRect): boolean; + extractSubset(p0: java.nio.ByteBuffer, p1: io.github.humbleui.types.IRect): boolean; + getRowBytes(): number; + getRowBytesAsPixels(): number; + computeByteSize(): number; + computeIsOpaque(): boolean; + getColor(p0: number, p1: number): number; + getColor4f(p0: number, p1: number): io.github.humbleui.skija.Color4f; + getAlphaF(p0: number, p1: number): number; + getAddr(): number; + getAddrAt(p0: number, p1: number): number; + readPixels(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number): boolean; + readPixels(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number, p3: number, p4: number): boolean; + readPixels(p0: io.github.humbleui.skija.Pixmap): boolean; + readPixels(p0: io.github.humbleui.skija.Pixmap, p1: number, p2: number): boolean; + scalePixels(p0: io.github.humbleui.skija.Pixmap, p1: io.github.humbleui.skija.SamplingMode): boolean; + erase(p0: number): boolean; + erase(p0: number, p1: io.github.humbleui.types.IRect): boolean; + erase(p0: io.github.humbleui.skija.Color4f): boolean; + erase(p0: io.github.humbleui.skija.Color4f, p1: io.github.humbleui.types.IRect): boolean; + getBuffer(): java.nio.ByteBuffer; + } + const Pixmap$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Pixmap$_FinalizerHolder; + } + interface Pixmap$_FinalizerHolder { + } + const Bitmap: { + _FinalizerHolder: typeof io.github.humbleui.skija.Bitmap$_FinalizerHolder; + new(p0: number): io.github.humbleui.skija.Bitmap; + new(): io.github.humbleui.skija.Bitmap; + makeFromImage(p0: io.github.humbleui.skija.Image): io.github.humbleui.skija.Bitmap; + _nGetFinalizer(): number; + _nMake(): number; + _nMakeClone(p0: number): number; + _nSwap(p0: number, p1: number): void; + _nGetImageInfo(p0: number): io.github.humbleui.skija.ImageInfo; + _nGetRowBytesAsPixels(p0: number): number; + _nIsNull(p0: number): boolean; + _nGetRowBytes(p0: number): number; + _nSetAlphaType(p0: number, p1: number): boolean; + _nSetColorSpace(p0: number, p1: number): void; + _nComputeByteSize(p0: number): number; + _nIsImmutable(p0: number): boolean; + _nSetImmutable(p0: number): void; + _nIsVolatile(p0: number): boolean; + _nSetVolatile(p0: number, p1: boolean): void; + _nReset(p0: number): void; + _nComputeIsOpaque(p0: number): boolean; + _nSetImageInfo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): boolean; + _nAllocPixelsFlags(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): boolean; + _nAllocPixelsRowBytes(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): boolean; + _nInstallPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: Array, p7: number): boolean; + _nAllocPixels(p0: number): boolean; + _nGetPixelRef(p0: number): number; + _nGetPixelRefOrigin(p0: number): number; + _nSetPixelRef(p0: number, p1: number, p2: number, p3: number): void; + _nIsReadyToDraw(p0: number): boolean; + _nGetGenerationId(p0: number): number; + _nNotifyPixelsChanged(p0: number): void; + _nErase4f(p0: number, p1: number, p2: number, p3: number, p4: number): void; + _nEraseRect4f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): void; + _nErase(p0: number, p1: number): void; + _nEraseRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nGetColor(p0: number, p1: number, p2: number): number; + _nGetColor4f(p0: number, p1: number, p2: number): io.github.humbleui.skija.Color4f; + _nGetAlphaf(p0: number, p1: number, p2: number): number; + _nExtractSubset(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): boolean; + _nReadPixels(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): Array; + _nExtractAlpha(p0: number, p1: number, p2: number): io.github.humbleui.types.IPoint; + _nPeekPixels(p0: number): number; + _nMakeShader(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): number; + } + interface Bitmap extends io.github.humbleui.skija.impl.Managed, io.github.humbleui.skija.IHasImageInfo { + _imageInfo: io.github.humbleui.skija.ImageInfo; + makeClone(): io.github.humbleui.skija.Bitmap; + swap(p0: io.github.humbleui.skija.Bitmap): void; + getRowBytesAsPixels(): number; + isNull(): boolean; + drawsNothing(): boolean; + getRowBytes(): number; + setAlphaType(p0: io.github.humbleui.skija.ColorAlphaType): boolean; + setColorSpace(p0: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.Bitmap; + computeByteSize(): number; + isImmutable(): boolean; + setImmutable(): io.github.humbleui.skija.Bitmap; + reset(): io.github.humbleui.skija.Bitmap; + computeIsOpaque(): boolean; + getBounds(): io.github.humbleui.types.IRect; + getSubset(): io.github.humbleui.types.IRect; + setImageInfo(p0: io.github.humbleui.skija.ImageInfo): boolean; + setImageInfo(p0: io.github.humbleui.skija.ImageInfo, p1: number): boolean; + allocPixelsFlags(p0: io.github.humbleui.skija.ImageInfo, p1: boolean): boolean; + allocPixels(p0: io.github.humbleui.skija.ImageInfo, p1: number): boolean; + allocPixels(p0: io.github.humbleui.skija.ImageInfo): boolean; + allocPixels(): boolean; + allocN32Pixels(p0: number, p1: number): boolean; + allocN32Pixels(p0: number, p1: number, p2: boolean): boolean; + installPixels(p0: Array): boolean; + installPixels(p0: io.github.humbleui.skija.ImageInfo, p1: Array, p2: number): boolean; + getPixelRef(): io.github.humbleui.skija.PixelRef | null | undefined; + getPixelRefOrigin(): io.github.humbleui.types.IPoint; + setPixelRef(p0: io.github.humbleui.skija.PixelRef | null | undefined, p1: number, p2: number): io.github.humbleui.skija.Bitmap; + isReadyToDraw(): boolean; + getGenerationId(): number; + notifyPixelsChanged(): io.github.humbleui.skija.Bitmap; + erase(p0: io.github.humbleui.skija.Color4f): io.github.humbleui.skija.Bitmap; + erase(p0: io.github.humbleui.skija.Color4f, p1: io.github.humbleui.types.IRect): io.github.humbleui.skija.Bitmap; + erase(p0: number): io.github.humbleui.skija.Bitmap; + erase(p0: number, p1: io.github.humbleui.types.IRect): io.github.humbleui.skija.Bitmap; + getColor(p0: number, p1: number): number; + getColor4f(p0: number, p1: number): io.github.humbleui.skija.Color4f; + getAlphaf(p0: number, p1: number): number; + extractSubset(p0: io.github.humbleui.skija.Bitmap, p1: io.github.humbleui.types.IRect): boolean; + readPixels(): Array; + readPixels(p0: io.github.humbleui.skija.ImageInfo, p1: number, p2: number, p3: number): Array; + extractAlpha(p0: io.github.humbleui.skija.Bitmap): boolean; + extractAlpha(p0: io.github.humbleui.skija.Bitmap, p1: io.github.humbleui.skija.Paint | null | undefined): io.github.humbleui.types.IPoint | null | undefined; + peekPixels(): io.github.humbleui.skija.Pixmap | null | undefined; + makeShader(): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.SamplingMode, p3: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + } + const PixelRef: { + new(p0: number): io.github.humbleui.skija.PixelRef; + _nGetWidth(p0: number): number; + _nGetHeight(p0: number): number; + _nGetRowBytes(p0: number): number; + _nGetGenerationId(p0: number): number; + _nNotifyPixelsChanged(p0: number): void; + _nIsImmutable(p0: number): boolean; + _nSetImmutable(p0: number): void; + } + interface PixelRef extends io.github.humbleui.skija.impl.RefCnt { + getWidth(): number; + getHeight(): number; + getRowBytes(): number; + getGenerationId(): number; + notifyPixelsChanged(): io.github.humbleui.skija.PixelRef; + isImmutable(): boolean; + setImmutable(): io.github.humbleui.skija.PixelRef; + } + const Paint: { + _FinalizerHolder: typeof io.github.humbleui.skija.Paint$_FinalizerHolder; + new(p0: number, p1: boolean): io.github.humbleui.skija.Paint; + new(): io.github.humbleui.skija.Paint; + _nGetFinalizer(): number; + _nMake(): number; + _nMakeClone(p0: number): number; + _nEquals(p0: number, p1: number): boolean; + _nReset(p0: number): void; + _nIsAntiAlias(p0: number): boolean; + _nSetAntiAlias(p0: number, p1: boolean): void; + _nIsDither(p0: number): boolean; + _nSetDither(p0: number, p1: boolean): void; + _nGetMode(p0: number): number; + _nSetMode(p0: number, p1: number): void; + _nGetColor(p0: number): number; + _nGetColor4f(p0: number): io.github.humbleui.skija.Color4f; + _nSetColor(p0: number, p1: number): void; + _nSetColor4f(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nGetStrokeWidth(p0: number): number; + _nSetStrokeWidth(p0: number, p1: number): void; + _nGetStrokeMiter(p0: number): number; + _nSetStrokeMiter(p0: number, p1: number): void; + _nGetStrokeCap(p0: number): number; + _nSetStrokeCap(p0: number, p1: number): void; + _nGetStrokeJoin(p0: number): number; + _nSetStrokeJoin(p0: number, p1: number): void; + _nGetFillPath(p0: number, p1: number, p2: number): number; + _nGetFillPathCull(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): number; + _nGetShader(p0: number): number; + _nSetShader(p0: number, p1: number): void; + _nGetColorFilter(p0: number): number; + _nSetColorFilter(p0: number, p1: number): void; + _nGetBlender(p0: number): number; + _nSetBlender(p0: number, p1: number): void; + _nGetBlendMode(p0: number): number; + _nSetBlendMode(p0: number, p1: number): void; + _nGetPathEffect(p0: number): number; + _nSetPathEffect(p0: number, p1: number): void; + _nGetMaskFilter(p0: number): number; + _nSetMaskFilter(p0: number, p1: number): void; + _nGetImageFilter(p0: number): number; + _nSetImageFilter(p0: number, p1: number): void; + _nHasNothingToDraw(p0: number): boolean; + } + interface Paint extends io.github.humbleui.skija.impl.Managed { + makeClone(): io.github.humbleui.skija.Paint; + reset(): io.github.humbleui.skija.Paint; + isAntiAlias(): boolean; + setAntiAlias(p0: boolean): io.github.humbleui.skija.Paint; + isDither(): boolean; + setDither(p0: boolean): io.github.humbleui.skija.Paint; + getMode(): io.github.humbleui.skija.PaintMode; + setMode(p0: io.github.humbleui.skija.PaintMode): io.github.humbleui.skija.Paint; + setStroke(p0: boolean): io.github.humbleui.skija.Paint; + getColor(): number; + getColor4f(): io.github.humbleui.skija.Color4f; + setColor(p0: number): io.github.humbleui.skija.Paint; + setColor4f(p0: io.github.humbleui.skija.Color4f): io.github.humbleui.skija.Paint; + setColor4f(p0: io.github.humbleui.skija.Color4f, p1: io.github.humbleui.skija.ColorSpace | null | undefined): io.github.humbleui.skija.Paint; + getAlphaf(): number; + getAlpha(): number; + setAlphaf(p0: number): io.github.humbleui.skija.Paint; + setAlpha(p0: number): io.github.humbleui.skija.Paint; + setARGB(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.Paint; + getStrokeWidth(): number; + setStrokeWidth(p0: number): io.github.humbleui.skija.Paint; + getStrokeMiter(): number; + setStrokeMiter(p0: number): io.github.humbleui.skija.Paint; + getStrokeCap(): io.github.humbleui.skija.PaintStrokeCap; + setStrokeCap(p0: io.github.humbleui.skija.PaintStrokeCap): io.github.humbleui.skija.Paint; + getStrokeJoin(): io.github.humbleui.skija.PaintStrokeJoin; + setStrokeJoin(p0: io.github.humbleui.skija.PaintStrokeJoin): io.github.humbleui.skija.Paint; + getFillPath(p0: io.github.humbleui.skija.Path): io.github.humbleui.skija.Path; + getFillPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.types.Rect | null | undefined, p2: number): io.github.humbleui.skija.Path; + getShader(): io.github.humbleui.skija.Shader | null | undefined; + setShader(p0: io.github.humbleui.skija.Shader | null | undefined): io.github.humbleui.skija.Paint; + getColorFilter(): io.github.humbleui.skija.ColorFilter | null | undefined; + setColorFilter(p0: io.github.humbleui.skija.ColorFilter | null | undefined): io.github.humbleui.skija.Paint; + getBlender(): io.github.humbleui.skija.Blender | null | undefined; + setBlender(p0: io.github.humbleui.skija.Blender | null | undefined): io.github.humbleui.skija.Paint; + getBlendMode(): io.github.humbleui.skija.BlendMode | null | undefined; + isSrcOver(): boolean; + setBlendMode(p0: io.github.humbleui.skija.BlendMode): io.github.humbleui.skija.Paint; + getPathEffect(): io.github.humbleui.skija.PathEffect | null | undefined; + setPathEffect(p0: io.github.humbleui.skija.PathEffect | null | undefined): io.github.humbleui.skija.Paint; + getMaskFilter(): io.github.humbleui.skija.MaskFilter | null | undefined; + setMaskFilter(p0: io.github.humbleui.skija.MaskFilter | null | undefined): io.github.humbleui.skija.Paint; + getImageFilter(): io.github.humbleui.skija.ImageFilter | null | undefined; + setImageFilter(p0: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.Paint; + hasNothingToDraw(): boolean; + } + const PaintMode: { + FILL: io.github.humbleui.skija.PaintMode; + STROKE: io.github.humbleui.skija.PaintMode; + STROKE_AND_FILL: io.github.humbleui.skija.PaintMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PaintMode; + } + interface PaintMode extends kotlin.Enum { + } + const PaintStrokeCap: { + BUTT: io.github.humbleui.skija.PaintStrokeCap; + ROUND: io.github.humbleui.skija.PaintStrokeCap; + SQUARE: io.github.humbleui.skija.PaintStrokeCap; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PaintStrokeCap; + } + interface PaintStrokeCap extends kotlin.Enum { + } + const PaintStrokeJoin: { + MITER: io.github.humbleui.skija.PaintStrokeJoin; + ROUND: io.github.humbleui.skija.PaintStrokeJoin; + BEVEL: io.github.humbleui.skija.PaintStrokeJoin; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PaintStrokeJoin; + } + interface PaintStrokeJoin extends kotlin.Enum { + } + const Path: { + _FinalizerHolder: typeof io.github.humbleui.skija.Path$_FinalizerHolder; + new(): io.github.humbleui.skija.Path; + new(p0: io.github.humbleui.skija.PathFillMode): io.github.humbleui.skija.Path; + new(p0: io.github.humbleui.skija.Path): io.github.humbleui.skija.Path; + new(p0: number): io.github.humbleui.skija.Path; + makeRaw(p0: Array, p1: Array, p2: kotlin.FloatArray, p3: io.github.humbleui.skija.PathFillMode): io.github.humbleui.skija.Path; + makeRaw(p0: Array, p1: Array, p2: kotlin.FloatArray, p3: io.github.humbleui.skija.PathFillMode, p4: boolean): io.github.humbleui.skija.Path; + makeRect(p0: io.github.humbleui.types.Rect): io.github.humbleui.skija.Path; + makeRect(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.Path; + makeRect(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.PathDirection, p2: number): io.github.humbleui.skija.Path; + makeOval(p0: io.github.humbleui.types.Rect): io.github.humbleui.skija.Path; + makeOval(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.Path; + makeCircle(p0: number, p1: number, p2: number): io.github.humbleui.skija.Path; + makeCircle(p0: number, p1: number, p2: number, p3: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.Path; + makeRRect(p0: io.github.humbleui.types.RRect): io.github.humbleui.skija.Path; + makeRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.Path; + makeRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.skija.PathDirection, p2: number): io.github.humbleui.skija.Path; + makePolygon(p0: Array, p1: boolean): io.github.humbleui.skija.Path; + makePolygon(p0: Array, p1: boolean, p2: io.github.humbleui.skija.PathFillMode): io.github.humbleui.skija.Path; + makePolygon(p0: Array, p1: boolean, p2: io.github.humbleui.skija.PathFillMode, p3: boolean): io.github.humbleui.skija.Path; + makeLine(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point): io.github.humbleui.skija.Path; + makeLine(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.Path; + makeFromSVGString(p0: string): io.github.humbleui.skija.Path; + makeCombining(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.Path, p2: io.github.humbleui.skija.PathOp): io.github.humbleui.skija.Path | null | undefined; + isLineDegenerate(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: boolean): boolean; + isQuadDegenerate(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: io.github.humbleui.types.Point, p3: boolean): boolean; + isCubicDegenerate(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: io.github.humbleui.types.Point, p3: io.github.humbleui.types.Point, p4: boolean): boolean; + convertConicToQuads(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: io.github.humbleui.types.Point, p3: number, p4: number): Array; + makeFromBytes(p0: Array): io.github.humbleui.skija.Path | null | undefined; + _nGetFinalizer(): number; + _nMakeRaw(p0: kotlin.FloatArray, p1: Array, p2: kotlin.FloatArray, p3: number, p4: boolean): number; + _nMakeRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nMakeOval(p0: number, p1: number, p2: number, p3: number, p4: number): number; + _nMakeCircle(p0: number, p1: number, p2: number, p3: number): number; + _nMakeRRect(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray, p5: number, p6: number): number; + _nMakePolygon(p0: kotlin.FloatArray, p1: boolean, p2: number, p3: boolean): number; + _nMakeLine(p0: number, p1: number, p2: number, p3: number): number; + _nMakeFromSVGString(p0: string): number; + _nMake(p0: number): number; + _nMakeCopy(p0: number): number; + _nMakeCombining(p0: number, p1: number, p2: number): number; + _nEquals(p0: number, p1: number): boolean; + _nIsInterpolatable(p0: number, p1: number): boolean; + _nMakeInterpolate(p0: number, p1: number, p2: number): number; + _nGetFillMode(p0: number): number; + _nMakeWithFillMode(p0: number, p1: number): number; + _nIsInverseFillType(p0: number): boolean; + _nMakeToggleInverseFillType(p0: number): number; + _nIsConvex(p0: number): boolean; + _nIsOval(p0: number): io.github.humbleui.types.Rect; + _nIsRRect(p0: number): io.github.humbleui.types.RRect; + _nIsEmpty(p0: number): boolean; + _nIsLastContourClosed(p0: number): boolean; + _nIsFinite(p0: number): boolean; + _nIsVolatile(p0: number): boolean; + _nMakeWithVolatile(p0: number, p1: boolean): number; + _nIsLineDegenerate(p0: number, p1: number, p2: number, p3: number, p4: boolean): boolean; + _nIsQuadDegenerate(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: boolean): boolean; + _nIsCubicDegenerate(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: boolean): boolean; + _nMaybeGetAsLine(p0: number): Array; + _nGetPoints(p0: number): Array; + _nGetVerbs(p0: number): Array; + _nGetConicWeights(p0: number): kotlin.FloatArray; + _nGetPointsCount(p0: number): number; + _nCountVerbs(p0: number): number; + _nGetLastPt(p0: number): io.github.humbleui.types.Point; + _nApproximateBytesUsed(p0: number): number; + _nGetBounds(p0: number): io.github.humbleui.types.Rect; + _nUpdateBoundsCache(p0: number): void; + _nComputeTightBounds(p0: number): io.github.humbleui.types.Rect; + _nConservativelyContainsRect(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nConvertConicToQuads(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): Array; + _nIsRect(p0: number): io.github.humbleui.types.Rect; + _nMakeTransform(p0: number, p1: kotlin.FloatArray): number; + _nMakeOffset(p0: number, p1: number, p2: number): number; + _nMakeScale(p0: number, p1: number, p2: number): number; + _nGetSegmentMasks(p0: number): number; + _nSetVolatile(p0: number, p1: boolean): void; + _nSwap(p0: number, p1: number): void; + _nSetFillMode(p0: number, p1: number): void; + _nReset(p0: number): void; + _nContains(p0: number, p1: number, p2: number): boolean; + _nDump(p0: number): void; + _nDumpHex(p0: number): void; + _nSerializeToBytes(p0: number): Array; + _nMakeFromBytes(p0: Array): number; + _nGetGenerationId(p0: number): number; + _nIsValid(p0: number): boolean; + _nFillWithPaint(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: kotlin.FloatArray): boolean; + } + interface Path extends io.github.humbleui.skija.impl.Managed, kotlin.collections.MutableIterable { + isInterpolatable(p0: io.github.humbleui.skija.Path): boolean; + makeInterpolate(p0: io.github.humbleui.skija.Path, p1: number): io.github.humbleui.skija.Path; + getFillMode(): io.github.humbleui.skija.PathFillMode; + makeWithFillMode(p0: io.github.humbleui.skija.PathFillMode): io.github.humbleui.skija.Path; + isInverseFillType(): boolean; + makeToggleInverseFillType(): io.github.humbleui.skija.Path; + isConvex(): boolean; + isOval(): io.github.humbleui.types.Rect | null | undefined; + isRRect(): io.github.humbleui.types.RRect | null | undefined; + isEmpty(): boolean; + isLastContourClosed(): boolean; + isFinite(): boolean; + isVolatile(): boolean; + makeWithVolatile(p0: boolean): io.github.humbleui.skija.Path; + getAsLine(): Array; + getPoints(): Array; + getVerbs(): Array; + getConicWeights(): kotlin.FloatArray; + getPointsCount(): number; + getVerbsCount(): number; + getLastPt(): io.github.humbleui.types.Point | null | undefined; + getApproximateBytesUsed(): number; + getBounds(): io.github.humbleui.types.Rect; + updateBoundsCache(): io.github.humbleui.skija.Path; + computeTightBounds(): io.github.humbleui.types.Rect; + conservativelyContainsRect(p0: io.github.humbleui.types.Rect): boolean; + isRect(): io.github.humbleui.types.Rect | null | undefined; + makeTransform(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.Path | null | undefined; + makeOffset(p0: number, p1: number): io.github.humbleui.skija.Path | null | undefined; + makeScale(p0: number): io.github.humbleui.skija.Path | null | undefined; + makeScale(p0: number, p1: number): io.github.humbleui.skija.Path | null | undefined; + getSegmentTypes(): Array; + setVolatile(p0: boolean): io.github.humbleui.skija.Path; + swap(p0: io.github.humbleui.skija.Path): io.github.humbleui.skija.Path; + setFillMode(p0: io.github.humbleui.skija.PathFillMode): io.github.humbleui.skija.Path; + reset(): io.github.humbleui.skija.Path; + iterator(p0: boolean): io.github.humbleui.skija.PathSegmentIterator; + contains(p0: number, p1: number): boolean; + contains(p0: io.github.humbleui.types.Point): boolean; + dump(): io.github.humbleui.skija.Path; + dumpHex(): io.github.humbleui.skija.Path; + serializeToBytes(): Array; + getGenerationId(): number; + isValid(): boolean; + fillWithPaint(p0: io.github.humbleui.skija.Paint, p1: io.github.humbleui.skija.PathBuilder, p2: io.github.humbleui.types.Rect | null | undefined, p3: io.github.humbleui.skija.Matrix33): boolean; + fillWithPaint(p0: io.github.humbleui.skija.Paint, p1: io.github.humbleui.skija.PathBuilder, p2: io.github.humbleui.skija.Matrix33): boolean; + fillWithPaint(p0: io.github.humbleui.skija.Paint, p1: io.github.humbleui.skija.PathBuilder): boolean; + fillWithPaint(p0: io.github.humbleui.skija.Paint, p1: io.github.humbleui.skija.PathBuilder, p2: number): boolean; + } + const PathFillMode: { + WINDING: io.github.humbleui.skija.PathFillMode; + EVEN_ODD: io.github.humbleui.skija.PathFillMode; + INVERSE_WINDING: io.github.humbleui.skija.PathFillMode; + INVERSE_EVEN_ODD: io.github.humbleui.skija.PathFillMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PathFillMode; + } + interface PathFillMode extends kotlin.Enum { + isInverse(): boolean; + inverse(): io.github.humbleui.skija.PathFillMode; + } + const PathSegmentIterator: { + _FinalizerHolder: typeof io.github.humbleui.skija.PathSegmentIterator$_FinalizerHolder; + new(p0: io.github.humbleui.skija.Path, p1: number): io.github.humbleui.skija.PathSegmentIterator; + make(p0: io.github.humbleui.skija.Path, p1: boolean): io.github.humbleui.skija.PathSegmentIterator; + _nMake(p0: number, p1: boolean): number; + _nGetFinalizer(): number; + _nNext(p0: number): io.github.humbleui.skija.PathSegment; + } + interface PathSegmentIterator extends io.github.humbleui.skija.impl.Managed, kotlin.collections.MutableIterator { + _path: io.github.humbleui.skija.Path; + _nextSegment: io.github.humbleui.skija.PathSegment; + } + const PathSegment: { + new(): io.github.humbleui.skija.PathSegment; + new(p0: number, p1: number, p2: number, p3: boolean): io.github.humbleui.skija.PathSegment; + new(p0: number, p1: number, p2: number, p3: number, p4: boolean, p5: boolean): io.github.humbleui.skija.PathSegment; + new(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: boolean): io.github.humbleui.skija.PathSegment; + new(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: boolean): io.github.humbleui.skija.PathSegment; + new(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: boolean): io.github.humbleui.skija.PathSegment; + new(p0: io.github.humbleui.skija.PathVerb, p1: io.github.humbleui.types.Point, p2: io.github.humbleui.types.Point, p3: io.github.humbleui.types.Point, p4: io.github.humbleui.types.Point, p5: number, p6: boolean, p7: boolean): io.github.humbleui.skija.PathSegment; + } + interface PathSegment { + _verb: io.github.humbleui.skija.PathVerb; + _p0: io.github.humbleui.types.Point; + _p1: io.github.humbleui.types.Point; + _p2: io.github.humbleui.types.Point; + _p3: io.github.humbleui.types.Point; + _conicWeight: number; + _closeLine: boolean; + _closedContour: boolean; + getVerb(): io.github.humbleui.skija.PathVerb; + getP0(): io.github.humbleui.types.Point; + getP1(): io.github.humbleui.types.Point; + getP2(): io.github.humbleui.types.Point; + getP3(): io.github.humbleui.types.Point; + getConicWeight(): number; + isCloseLine(): boolean; + isClosedContour(): boolean; + } + const PathVerb: { + MOVE: io.github.humbleui.skija.PathVerb; + LINE: io.github.humbleui.skija.PathVerb; + QUAD: io.github.humbleui.skija.PathVerb; + CONIC: io.github.humbleui.skija.PathVerb; + CUBIC: io.github.humbleui.skija.PathVerb; + CLOSE: io.github.humbleui.skija.PathVerb; + DONE: io.github.humbleui.skija.PathVerb; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PathVerb; + } + interface PathVerb extends kotlin.Enum { + } + const PathSegmentIterator$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.PathSegmentIterator$_FinalizerHolder; + } + interface PathSegmentIterator$_FinalizerHolder { + } + const PathBuilder: { + _FinalizerHolder: typeof io.github.humbleui.skija.PathBuilder$_FinalizerHolder; + new(): io.github.humbleui.skija.PathBuilder; + new(p0: io.github.humbleui.skija.PathFillMode): io.github.humbleui.skija.PathBuilder; + new(p0: io.github.humbleui.skija.PathBuilder): io.github.humbleui.skija.PathBuilder; + new(p0: io.github.humbleui.skija.Path): io.github.humbleui.skija.PathBuilder; + new(p0: number, p1: number): io.github.humbleui.skija.PathBuilder; + _nGetFinalizer(): number; + _nMake(): number; + _nMakeFromFillMode(p0: number): number; + _nMakeFromPathBuilder(p0: number): number; + _nMakeFromPath(p0: number): number; + _nEquals(p0: number, p1: number): boolean; + _nGetFillMode(p0: number): number; + _nComputeFiniteBounds(p0: number): io.github.humbleui.types.Rect; + _nComputeTightBounds(p0: number): io.github.humbleui.types.Rect; + _nSnapshot(p0: number, p1: kotlin.FloatArray): number; + _nDetach(p0: number, p1: kotlin.FloatArray): number; + _nSetFillMode(p0: number, p1: number): void; + _nSetVolatile(p0: number, p1: boolean): void; + _nReset(p0: number): void; + _nMoveTo(p0: number, p1: number, p2: number): void; + _nLineTo(p0: number, p1: number, p2: number): void; + _nQuadTo(p0: number, p1: number, p2: number, p3: number, p4: number): void; + _nConicTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nCubicTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; + _nClosePath(p0: number): void; + _nPolylineTo(p0: number, p1: kotlin.FloatArray): void; + _nRMoveTo(p0: number, p1: number, p2: number): void; + _nRLineTo(p0: number, p1: number, p2: number): void; + _nRQuadTo(p0: number, p1: number, p2: number, p3: number, p4: number): void; + _nRConicTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nRCubicTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; + _nREllipticalArcTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; + _nArcTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: boolean): void; + _nTangentArcTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): void; + _nEllipticalArcTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): void; + _nAddArc(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; + _nAddRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; + _nAddOval(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void; + _nAddRRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: kotlin.FloatArray, p6: number, p7: number): void; + _nAddCircle(p0: number, p1: number, p2: number, p3: number, p4: number): void; + _nAddPolygon(p0: number, p1: kotlin.FloatArray, p2: boolean): void; + _nAddPath(p0: number, p1: number, p2: boolean): void; + _nAddPathOffset(p0: number, p1: number, p2: number, p3: number, p4: boolean): void; + _nAddPathTransform(p0: number, p1: number, p2: kotlin.FloatArray, p3: boolean): void; + _nIncReserve(p0: number, p1: number, p2: number, p3: number): void; + _nOffset(p0: number, p1: number, p2: number): void; + _nTransform(p0: number, p1: kotlin.FloatArray): void; + _nIsFinite(p0: number): boolean; + _nToggleInverseFillType(p0: number): void; + _nIsEmpty(p0: number): boolean; + _nGetLastPt(p0: number): io.github.humbleui.types.Point; + _nSetPoint(p0: number, p1: number, p2: number, p3: number): void; + _nSetLastPt(p0: number, p1: number, p2: number): void; + _nCountPoints(p0: number): number; + _nIsInverseFillType(p0: number): boolean; + _nGetPoints(p0: number): Array; + _nGetVerbs(p0: number): Array; + _nGetConicWeights(p0: number): kotlin.FloatArray; + } + interface PathBuilder extends io.github.humbleui.skija.impl.Managed { + getFillMode(): io.github.humbleui.skija.PathFillMode; + computeFiniteBounds(): io.github.humbleui.types.Rect | null | undefined; + computeTightBounds(): io.github.humbleui.types.Rect | null | undefined; + snapshot(): io.github.humbleui.skija.Path; + snapshot(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.Path; + detach(): io.github.humbleui.skija.Path; + detach(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.Path; + build(): io.github.humbleui.skija.Path; + setFillMode(p0: io.github.humbleui.skija.PathFillMode): io.github.humbleui.skija.PathBuilder; + setVolatile(p0: boolean): io.github.humbleui.skija.PathBuilder; + reset(): io.github.humbleui.skija.PathBuilder; + moveTo(p0: number, p1: number): io.github.humbleui.skija.PathBuilder; + moveTo(p0: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + lineTo(p0: number, p1: number): io.github.humbleui.skija.PathBuilder; + lineTo(p0: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + quadTo(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.PathBuilder; + quadTo(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + conicTo(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.PathBuilder; + conicTo(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: number): io.github.humbleui.skija.PathBuilder; + cubicTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.skija.PathBuilder; + cubicTo(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + closePath(): io.github.humbleui.skija.PathBuilder; + polylineTo(p0: kotlin.FloatArray): io.github.humbleui.skija.PathBuilder; + polylineTo(p0: Array): io.github.humbleui.skija.PathBuilder; + rMoveTo(p0: number, p1: number): io.github.humbleui.skija.PathBuilder; + rMoveTo(p0: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + rLineTo(p0: number, p1: number): io.github.humbleui.skija.PathBuilder; + rLineTo(p0: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + rQuadTo(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.PathBuilder; + rQuadTo(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + rConicTo(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.PathBuilder; + rConicTo(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: number): io.github.humbleui.skija.PathBuilder; + rCubicTo(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.skija.PathBuilder; + rCubicTo(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + rEllipticalArcTo(p0: number, p1: number, p2: number, p3: io.github.humbleui.skija.PathEllipseArc, p4: io.github.humbleui.skija.PathDirection, p5: number, p6: number): io.github.humbleui.skija.PathBuilder; + arcTo(p0: io.github.humbleui.types.Rect, p1: number, p2: number, p3: boolean): io.github.humbleui.skija.PathBuilder; + tangentArcTo(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.PathBuilder; + tangentArcTo(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point, p2: number): io.github.humbleui.skija.PathBuilder; + ellipticalArcTo(p0: number, p1: number, p2: number, p3: io.github.humbleui.skija.PathEllipseArc, p4: io.github.humbleui.skija.PathDirection, p5: number, p6: number): io.github.humbleui.skija.PathBuilder; + ellipticalArcTo(p0: io.github.humbleui.types.Point, p1: number, p2: io.github.humbleui.skija.PathEllipseArc, p3: io.github.humbleui.skija.PathDirection, p4: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + addArc(p0: io.github.humbleui.types.Rect, p1: number, p2: number): io.github.humbleui.skija.PathBuilder; + addLine(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.skija.PathBuilder; + addLine(p0: io.github.humbleui.types.Point, p1: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + addRect(p0: io.github.humbleui.types.Rect): io.github.humbleui.skija.PathBuilder; + addRect(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.PathBuilder; + addRect(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.PathDirection, p2: number): io.github.humbleui.skija.PathBuilder; + addOval(p0: io.github.humbleui.types.Rect): io.github.humbleui.skija.PathBuilder; + addOval(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.PathBuilder; + addOval(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.PathDirection, p2: number): io.github.humbleui.skija.PathBuilder; + addRRect(p0: io.github.humbleui.types.RRect): io.github.humbleui.skija.PathBuilder; + addRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.PathBuilder; + addRRect(p0: io.github.humbleui.types.RRect, p1: io.github.humbleui.skija.PathDirection, p2: number): io.github.humbleui.skija.PathBuilder; + addCircle(p0: number, p1: number, p2: number): io.github.humbleui.skija.PathBuilder; + addCircle(p0: io.github.humbleui.types.Point, p1: number): io.github.humbleui.skija.PathBuilder; + addCircle(p0: number, p1: number, p2: number, p3: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.PathBuilder; + addCircle(p0: io.github.humbleui.types.Point, p1: number, p2: io.github.humbleui.skija.PathDirection): io.github.humbleui.skija.PathBuilder; + addPolygon(p0: Array, p1: boolean): io.github.humbleui.skija.PathBuilder; + addPolygon(p0: kotlin.FloatArray, p1: boolean): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path, p1: boolean): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path, p1: number, p2: number): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path, p1: number, p2: number, p3: boolean): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.types.Point, p2: boolean): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.PathBuilder; + addPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.Matrix33, p2: boolean): io.github.humbleui.skija.PathBuilder; + incReserve(p0: number, p1: number, p2: number): io.github.humbleui.skija.PathBuilder; + incReserve(p0: number): io.github.humbleui.skija.PathBuilder; + offset(p0: number, p1: number): io.github.humbleui.skija.PathBuilder; + offset(p0: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + transform(p0: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.PathBuilder; + isFinite(): boolean; + toggleInverseFillType(): io.github.humbleui.skija.PathBuilder; + isEmpty(): boolean; + getLastPt(): io.github.humbleui.types.Point | null | undefined; + setPoint(p0: number, p1: number, p2: number): io.github.humbleui.skija.PathBuilder; + setPoint(p0: number, p1: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + setLastPt(p0: number, p1: number): io.github.humbleui.skija.PathBuilder; + setLastPt(p0: io.github.humbleui.types.Point): io.github.humbleui.skija.PathBuilder; + countPoints(): number; + isInverseFillType(): boolean; + getPoints(): Array; + getVerbs(): Array; + getConicWeights(): kotlin.FloatArray; + } + const PathEllipseArc: { + SMALLER: io.github.humbleui.skija.PathEllipseArc; + LARGER: io.github.humbleui.skija.PathEllipseArc; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PathEllipseArc; + } + interface PathEllipseArc extends kotlin.Enum { + } + const PathDirection: { + CLOCKWISE: io.github.humbleui.skija.PathDirection; + COUNTER_CLOCKWISE: io.github.humbleui.skija.PathDirection; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PathDirection; + } + interface PathDirection extends kotlin.Enum { + } + const PathBuilder$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.PathBuilder$_FinalizerHolder; + } + interface PathBuilder$_FinalizerHolder { + } + const PathOp: { + DIFFERENCE: io.github.humbleui.skija.PathOp; + INTERSECT: io.github.humbleui.skija.PathOp; + UNION: io.github.humbleui.skija.PathOp; + XOR: io.github.humbleui.skija.PathOp; + REVERSE_DIFFERENCE: io.github.humbleui.skija.PathOp; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PathOp; + } + interface PathOp extends kotlin.Enum { + } + const Path$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Path$_FinalizerHolder; + } + interface Path$_FinalizerHolder { + } + const Blender: { + new(p0: number): io.github.humbleui.skija.Blender; + makeWithMode(p0: io.github.humbleui.skija.BlendMode): io.github.humbleui.skija.Blender; + makeArithmetic(p0: number, p1: number, p2: number, p3: number, p4: boolean): io.github.humbleui.skija.Blender; + makeRuntime(p0: io.github.humbleui.skija.RuntimeEffect, p1: io.github.humbleui.skija.Data | null | undefined, p2: Array): io.github.humbleui.skija.Blender; + _nMakeWithMode(p0: number): number; + _nMakeArithmetic(p0: number, p1: number, p2: number, p3: number, p4: boolean): number; + _nMakeRuntime(p0: number, p1: number, p2: Array): number; + } + interface Blender extends io.github.humbleui.skija.RuntimeEffectChild { + } + const RuntimeEffect: { + new(p0: number): io.github.humbleui.skija.RuntimeEffect; + makeForColorFilter(p0: string): io.github.humbleui.skija.RuntimeEffect; + makeForColorFilter(p0: string, p1: io.github.humbleui.skija.RuntimeEffectOptions): io.github.humbleui.skija.RuntimeEffect; + makeForShader(p0: string): io.github.humbleui.skija.RuntimeEffect; + makeForShader(p0: string, p1: io.github.humbleui.skija.RuntimeEffectOptions): io.github.humbleui.skija.RuntimeEffect; + makeForBlender(p0: string): io.github.humbleui.skija.RuntimeEffect; + makeForBlender(p0: string, p1: io.github.humbleui.skija.RuntimeEffectOptions): io.github.humbleui.skija.RuntimeEffect; + _nMakeForColorFilter(p0: string, p1: boolean, p2: string): number; + _nMakeForShader(p0: string, p1: boolean, p2: string): number; + _nMakeForBlender(p0: string, p1: boolean, p2: string): number; + _nMakeShader(p0: number, p1: number, p2: Array, p3: kotlin.FloatArray): number; + _nMakeColorFilter(p0: number, p1: number, p2: Array): number; + _nMakeBlender(p0: number, p1: number, p2: Array): number; + _nGetSource(p0: number): string; + _nGetUniformSize(p0: number): number; + _nIsShaderAllowed(p0: number): boolean; + _nIsColorFilterAllowed(p0: number): boolean; + _nIsBlenderAllowed(p0: number): boolean; + _nGetUniforms(p0: number): Array; + _nGetUniform(p0: number, p1: string): io.github.humbleui.skija.RuntimeEffectUniformInfo; + _nGetChildren(p0: number): Array; + _nGetChild(p0: number, p1: string): io.github.humbleui.skija.RuntimeEffectChildInfo; + } + interface RuntimeEffect extends io.github.humbleui.skija.impl.RefCnt { + makeColorFilter(p0: io.github.humbleui.skija.Data | null | undefined, p1: Array): io.github.humbleui.skija.ColorFilter; + makeColorFilter(p0: io.github.humbleui.skija.Data | null | undefined): io.github.humbleui.skija.ColorFilter; + makeShader(p0: io.github.humbleui.skija.Data | null | undefined, p1: Array, p2: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.Data | null | undefined, p1: Array): io.github.humbleui.skija.Shader; + makeBlender(p0: io.github.humbleui.skija.Data | null | undefined, p1: Array): io.github.humbleui.skija.Blender; + makeBlender(p0: io.github.humbleui.skija.Data | null | undefined): io.github.humbleui.skija.Blender; + getSource(): string; + getUniformSize(): number; + isShaderAllowed(): boolean; + isColorFilterAllowed(): boolean; + isBlenderAllowed(): boolean; + getUniforms(): Array; + getUniform(p0: string): io.github.humbleui.skija.RuntimeEffectUniformInfo | null | undefined; + getChildren(): Array; + getChild(p0: string): io.github.humbleui.skija.RuntimeEffectChildInfo | null | undefined; + } + const RuntimeEffectUniformInfo: { + new(p0: string, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.RuntimeEffectUniformInfo; + new(p0: string, p1: number, p2: io.github.humbleui.skija.RuntimeEffectUniformType, p3: number, p4: number): io.github.humbleui.skija.RuntimeEffectUniformInfo; + } + interface RuntimeEffectUniformInfo { + _name: string; + _offset: number; + _type: io.github.humbleui.skija.RuntimeEffectUniformType; + _count: number; + _flags: number; + isArray(): boolean; + isColor(): boolean; + getSizeInBytes(): number; + getName(): string; + getOffset(): number; + getType(): io.github.humbleui.skija.RuntimeEffectUniformType; + getCount(): number; + getFlags(): number; + } + const RuntimeEffectUniformType: { + FLOAT: io.github.humbleui.skija.RuntimeEffectUniformType; + FLOAT2: io.github.humbleui.skija.RuntimeEffectUniformType; + FLOAT3: io.github.humbleui.skija.RuntimeEffectUniformType; + FLOAT4: io.github.humbleui.skija.RuntimeEffectUniformType; + FLOAT2X2: io.github.humbleui.skija.RuntimeEffectUniformType; + FLOAT3X3: io.github.humbleui.skija.RuntimeEffectUniformType; + FLOAT4X4: io.github.humbleui.skija.RuntimeEffectUniformType; + INT: io.github.humbleui.skija.RuntimeEffectUniformType; + INT2: io.github.humbleui.skija.RuntimeEffectUniformType; + INT3: io.github.humbleui.skija.RuntimeEffectUniformType; + INT4: io.github.humbleui.skija.RuntimeEffectUniformType; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.RuntimeEffectUniformType; + } + interface RuntimeEffectUniformType extends kotlin.Enum { + } + const RuntimeEffectChildInfo: { + new(p0: string, p1: number, p2: number): io.github.humbleui.skija.RuntimeEffectChildInfo; + new(p0: string, p1: io.github.humbleui.skija.RuntimeEffectChildType, p2: number): io.github.humbleui.skija.RuntimeEffectChildInfo; + } + interface RuntimeEffectChildInfo { + _name: string; + _type: io.github.humbleui.skija.RuntimeEffectChildType; + _index: number; + getName(): string; + getType(): io.github.humbleui.skija.RuntimeEffectChildType; + getIndex(): number; + } + const RuntimeEffectChildType: { + SHADER: io.github.humbleui.skija.RuntimeEffectChildType; + COLOR_FILTER: io.github.humbleui.skija.RuntimeEffectChildType; + BLENDER: io.github.humbleui.skija.RuntimeEffectChildType; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.RuntimeEffectChildType; + } + interface RuntimeEffectChildType extends kotlin.Enum { + } + const RuntimeEffectOptions: { + DEFAULT: io.github.humbleui.skija.RuntimeEffectOptions; + new(p0: boolean): io.github.humbleui.skija.RuntimeEffectOptions; + new(p0: string | null | undefined): io.github.humbleui.skija.RuntimeEffectOptions; + new(p0: boolean, p1: string | null | undefined): io.github.humbleui.skija.RuntimeEffectOptions; + } + interface RuntimeEffectOptions { + _forceUnoptimized: boolean; + _name: string | null | undefined; + isForceUnoptimized(): boolean; + getName(): string | null | undefined; + } + const PathEffect: { + new(p0: number): io.github.humbleui.skija.PathEffect; + makePath1D(p0: io.github.humbleui.skija.Path, p1: number, p2: number, p3: io.github.humbleui.skija.PathEffect1DStyle): io.github.humbleui.skija.PathEffect; + makePath2D(p0: io.github.humbleui.skija.Matrix33, p1: io.github.humbleui.skija.Path): io.github.humbleui.skija.PathEffect; + makeLine2D(p0: number, p1: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.PathEffect; + makeCorner(p0: number): io.github.humbleui.skija.PathEffect; + makeDash(p0: kotlin.FloatArray, p1: number): io.github.humbleui.skija.PathEffect; + makeDiscrete(p0: number, p1: number, p2: number): io.github.humbleui.skija.PathEffect; + _nMakeSum(p0: number, p1: number): number; + _nMakeCompose(p0: number, p1: number): number; + _nMakePath1D(p0: number, p1: number, p2: number, p3: number): number; + _nMakePath2D(p0: kotlin.FloatArray, p1: number): number; + _nMakeLine2D(p0: number, p1: kotlin.FloatArray): number; + _nMakeCorner(p0: number): number; + _nMakeDash(p0: kotlin.FloatArray, p1: number): number; + _nMakeDiscrete(p0: number, p1: number, p2: number): number; + } + interface PathEffect extends io.github.humbleui.skija.impl.RefCnt, io.github.humbleui.skija.Flattenable { + makeSum(p0: io.github.humbleui.skija.PathEffect): io.github.humbleui.skija.PathEffect; + makeCompose(p0: io.github.humbleui.skija.PathEffect): io.github.humbleui.skija.PathEffect; + } + const PathEffect1DStyle: { + TRANSLATE: io.github.humbleui.skija.PathEffect1DStyle; + ROTATE: io.github.humbleui.skija.PathEffect1DStyle; + MORPH: io.github.humbleui.skija.PathEffect1DStyle; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.PathEffect1DStyle; + } + interface PathEffect1DStyle extends kotlin.Enum { + } + const MaskFilter: { + new(p0: number): io.github.humbleui.skija.MaskFilter; + makeBlur(p0: io.github.humbleui.skija.FilterBlurMode, p1: number): io.github.humbleui.skija.MaskFilter; + makeBlur(p0: io.github.humbleui.skija.FilterBlurMode, p1: number, p2: boolean): io.github.humbleui.skija.MaskFilter; + makeShader(p0: io.github.humbleui.skija.Shader): io.github.humbleui.skija.MaskFilter; + makeTable(p0: Array): io.github.humbleui.skija.MaskFilter; + makeGamma(p0: number): io.github.humbleui.skija.MaskFilter; + makeClip(p0: number, p1: number): io.github.humbleui.skija.MaskFilter; + _nMakeBlur(p0: number, p1: number, p2: boolean): number; + _nMakeShader(p0: number): number; + _nMakeTable(p0: Array): number; + _nMakeGamma(p0: number): number; + _nMakeClip(p0: number, p1: number): number; + } + interface MaskFilter extends io.github.humbleui.skija.impl.RefCnt, io.github.humbleui.skija.Flattenable { + } + const FilterBlurMode: { + NORMAL: io.github.humbleui.skija.FilterBlurMode; + SOLID: io.github.humbleui.skija.FilterBlurMode; + OUTER: io.github.humbleui.skija.FilterBlurMode; + INNER: io.github.humbleui.skija.FilterBlurMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.FilterBlurMode; + } + interface FilterBlurMode extends kotlin.Enum { + } + const ImageFilter: { + new(p0: number): io.github.humbleui.skija.ImageFilter; + makeArithmetic(p0: number, p1: number, p2: number, p3: number, p4: boolean, p5: io.github.humbleui.skija.ImageFilter | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeArithmetic(p0: number, p1: number, p2: number, p3: number, p4: boolean, p5: io.github.humbleui.skija.ImageFilter | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeArithmetic(p0: number, p1: number, p2: number, p3: number, p4: boolean, p5: io.github.humbleui.skija.ImageFilter | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlend(p0: io.github.humbleui.skija.BlendMode, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlend(p0: io.github.humbleui.skija.BlendMode, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlend(p0: io.github.humbleui.skija.BlendMode, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlend(p0: io.github.humbleui.skija.Blender, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlend(p0: io.github.humbleui.skija.Blender, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlend(p0: io.github.humbleui.skija.Blender, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlur(p0: number, p1: number, p2: io.github.humbleui.skija.FilterTileMode, p3: io.github.humbleui.skija.ImageFilter | null | undefined, p4: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlur(p0: number, p1: number, p2: io.github.humbleui.skija.FilterTileMode, p3: io.github.humbleui.skija.ImageFilter | null | undefined, p4: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeBlur(p0: number, p1: number, p2: io.github.humbleui.skija.FilterTileMode): io.github.humbleui.skija.ImageFilter; + makeColorFilter(p0: io.github.humbleui.skija.ColorFilter, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeColorFilter(p0: io.github.humbleui.skija.ColorFilter, p1: io.github.humbleui.skija.ImageFilter | null | undefined, p2: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeColorFilter(p0: io.github.humbleui.skija.ColorFilter, p1: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeCompose(p0: io.github.humbleui.skija.ImageFilter, p1: io.github.humbleui.skija.ImageFilter): io.github.humbleui.skija.ImageFilter; + makeCrop(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeCrop(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDisplacementMap(p0: io.github.humbleui.skija.ColorChannel, p1: io.github.humbleui.skija.ColorChannel, p2: number, p3: io.github.humbleui.skija.ImageFilter | null | undefined, p4: io.github.humbleui.skija.ImageFilter | null | undefined, p5: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDisplacementMap(p0: io.github.humbleui.skija.ColorChannel, p1: io.github.humbleui.skija.ColorChannel, p2: number, p3: io.github.humbleui.skija.ImageFilter | null | undefined, p4: io.github.humbleui.skija.ImageFilter | null | undefined, p5: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDisplacementMap(p0: io.github.humbleui.skija.ColorChannel, p1: io.github.humbleui.skija.ColorChannel, p2: number, p3: io.github.humbleui.skija.ImageFilter | null | undefined, p4: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Color4f, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Color4f, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Color4f, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: number, p5: io.github.humbleui.skija.ImageFilter | null | undefined, p6: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: number, p5: io.github.humbleui.skija.ImageFilter | null | undefined, p6: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: number, p5: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.ImageFilter; + makeDropShadowOnly(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Color4f, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadowOnly(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Color4f, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadowOnly(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.skija.Color4f, p5: io.github.humbleui.skija.ColorSpace | null | undefined, p6: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadowOnly(p0: number, p1: number, p2: number, p3: number, p4: number, p5: io.github.humbleui.skija.ImageFilter | null | undefined, p6: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadowOnly(p0: number, p1: number, p2: number, p3: number, p4: number, p5: io.github.humbleui.skija.ImageFilter | null | undefined, p6: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDropShadowOnly(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.ImageFilter; + makeEmpty(): io.github.humbleui.skija.ImageFilter; + makeImage(p0: io.github.humbleui.skija.Image | null | undefined, p1: io.github.humbleui.types.Rect, p2: io.github.humbleui.types.Rect, p3: io.github.humbleui.skija.SamplingMode): io.github.humbleui.skija.ImageFilter; + makeImage(p0: io.github.humbleui.skija.Image | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMagnifier(p0: io.github.humbleui.types.Rect, p1: number, p2: number, p3: io.github.humbleui.skija.SamplingMode, p4: io.github.humbleui.skija.ImageFilter | null | undefined, p5: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMagnifier(p0: io.github.humbleui.types.Rect, p1: number, p2: number, p3: io.github.humbleui.skija.SamplingMode, p4: io.github.humbleui.skija.ImageFilter | null | undefined, p5: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMagnifier(p0: io.github.humbleui.types.Rect, p1: number, p2: number, p3: io.github.humbleui.skija.SamplingMode, p4: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMatrixConvolution(p0: number, p1: number, p2: kotlin.FloatArray, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.FilterTileMode, p8: boolean, p9: io.github.humbleui.skija.ImageFilter | null | undefined, p10: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMatrixConvolution(p0: number, p1: number, p2: kotlin.FloatArray, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.FilterTileMode, p8: boolean, p9: io.github.humbleui.skija.ImageFilter | null | undefined, p10: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMatrixConvolution(p0: number, p1: number, p2: kotlin.FloatArray, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.FilterTileMode, p8: boolean, p9: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMatrixTransform(p0: io.github.humbleui.skija.Matrix33, p1: io.github.humbleui.skija.SamplingMode, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMerge(p0: Array, p1: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMerge(p0: Array, p1: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeMerge(p0: Array): io.github.humbleui.skija.ImageFilter; + makeOffset(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeOffset(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeOffset(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makePicture(p0: io.github.humbleui.skija.Picture | null | undefined, p1: io.github.humbleui.types.Rect): io.github.humbleui.skija.ImageFilter; + makePicture(p0: io.github.humbleui.skija.Picture | null | undefined): io.github.humbleui.skija.ImageFilter; + makeRuntimeShader(p0: io.github.humbleui.skija.RuntimeEffectBuilder, p1: string | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeRuntimeShader(p0: io.github.humbleui.skija.RuntimeEffectBuilder, p1: number, p2: string | null | undefined, p3: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeRuntimeShader(p0: io.github.humbleui.skija.RuntimeEffectBuilder, p1: Array, p2: Array): io.github.humbleui.skija.ImageFilter; + makeRuntimeShader(p0: io.github.humbleui.skija.RuntimeEffectBuilder, p1: number, p2: Array, p3: Array): io.github.humbleui.skija.ImageFilter; + makeShader(p0: io.github.humbleui.skija.Shader, p1: boolean, p2: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeShader(p0: io.github.humbleui.skija.Shader, p1: boolean, p2: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeShader(p0: io.github.humbleui.skija.Shader, p1: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeShader(p0: io.github.humbleui.skija.Shader, p1: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeShader(p0: io.github.humbleui.skija.Shader): io.github.humbleui.skija.ImageFilter; + makeTile(p0: io.github.humbleui.types.Rect, p1: io.github.humbleui.types.Rect, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDilate(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDilate(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDilate(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeErode(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeErode(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeErode(p0: number, p1: number, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDistantLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDistantLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDistantLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makePointLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makePointLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.ImageFilter | null | undefined, p7: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makePointLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeSpotLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: io.github.humbleui.skija.ImageFilter | null | undefined, p12: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeSpotLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: io.github.humbleui.skija.ImageFilter | null | undefined, p12: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeSpotLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDistantLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.ImageFilter | null | undefined, p8: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDistantLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.ImageFilter | null | undefined, p8: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeDistantLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makePointLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.ImageFilter | null | undefined, p8: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makePointLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.ImageFilter | null | undefined, p8: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makePointLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + makeSpotLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number, p12: io.github.humbleui.skija.ImageFilter | null | undefined, p13: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeSpotLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number, p12: io.github.humbleui.skija.ImageFilter | null | undefined, p13: io.github.humbleui.types.IRect | null | undefined): io.github.humbleui.skija.ImageFilter; + makeSpotLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number, p12: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.ImageFilter; + _nMakeArithmetic(p0: number, p1: number, p2: number, p3: number, p4: boolean, p5: number, p6: number, p7: io.github.humbleui.types.Rect): number; + _nMakeBlend(p0: number, p1: number, p2: number, p3: io.github.humbleui.types.Rect): number; + _nMakeBlendBlender(p0: number, p1: number, p2: number, p3: io.github.humbleui.types.Rect): number; + _nMakeBlur(p0: number, p1: number, p2: number, p3: number, p4: io.github.humbleui.types.Rect): number; + _nMakeColorFilter(p0: number, p1: number, p2: io.github.humbleui.types.Rect): number; + _nMakeCompose(p0: number, p1: number): number; + _nMakeCrop(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): number; + _nMakeDisplacementMap(p0: number, p1: number, p2: number, p3: number, p4: number, p5: io.github.humbleui.types.Rect): number; + _nMakeDropShadowCS(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: io.github.humbleui.types.Rect): number; + _nMakeDropShadow(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.types.Rect): number; + _nMakeDropShadowOnlyCS(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: io.github.humbleui.types.Rect): number; + _nMakeDropShadowOnly(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: io.github.humbleui.types.Rect): number; + _nMakeEmpty(): number; + _nMakeImage(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number): number; + _nMakeMagnifier(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: io.github.humbleui.types.Rect): number; + _nMakeMatrixConvolution(p0: number, p1: number, p2: kotlin.FloatArray, p3: number, p4: number, p5: number, p6: number, p7: number, p8: boolean, p9: number, p10: io.github.humbleui.types.Rect): number; + _nMakeMatrixTransform(p0: kotlin.FloatArray, p1: number, p2: number): number; + _nMakeMerge(p0: Array, p1: io.github.humbleui.types.Rect): number; + _nMakeOffset(p0: number, p1: number, p2: number, p3: io.github.humbleui.types.Rect): number; + _nMakePicture(p0: number, p1: number, p2: number, p3: number, p4: number): number; + _nMakePicture(p0: number): number; + _nMakeShader(p0: number, p1: boolean, p2: io.github.humbleui.types.Rect): number; + _nMakeTile(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number): number; + _nMakeDilate(p0: number, p1: number, p2: number, p3: io.github.humbleui.types.Rect): number; + _nMakeErode(p0: number, p1: number, p2: number, p3: io.github.humbleui.types.Rect): number; + _nMakeDistantLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.types.Rect): number; + _nMakePointLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: io.github.humbleui.types.Rect): number; + _nMakeSpotLitDiffuse(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number, p12: io.github.humbleui.types.Rect): number; + _nMakeDistantLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: io.github.humbleui.types.Rect): number; + _nMakePointLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: io.github.humbleui.types.Rect): number; + _nMakeSpotLitSpecular(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number, p12: number, p13: io.github.humbleui.types.Rect): number; + _nMakeRuntimeShader(p0: number, p1: number, p2: Array, p3: Array): number; + } + interface ImageFilter extends io.github.humbleui.skija.impl.RefCnt, io.github.humbleui.skija.Flattenable { + } + const ColorChannel: { + R: io.github.humbleui.skija.ColorChannel; + G: io.github.humbleui.skija.ColorChannel; + B: io.github.humbleui.skija.ColorChannel; + A: io.github.humbleui.skija.ColorChannel; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.ColorChannel; + } + interface ColorChannel extends kotlin.Enum { + } + const Picture: { + new(p0: number): io.github.humbleui.skija.Picture; + makeFromData(p0: io.github.humbleui.skija.Data): io.github.humbleui.skija.Picture | null | undefined; + makePlaceholder(p0: io.github.humbleui.types.Rect): io.github.humbleui.skija.Picture; + _nMakeFromData(p0: number): number; + _nPlayback(p0: number, p1: number, p2: unknown): void; + _nGetCullRect(p0: number): io.github.humbleui.types.Rect; + _nGetUniqueId(p0: number): number; + _nSerializeToData(p0: number): number; + _nMakePlaceholder(p0: number, p1: number, p2: number, p3: number): number; + _nGetApproximateOpCount(p0: number): number; + _nGetApproximateBytesUsed(p0: number): number; + _nMakeShader(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray, p5: io.github.humbleui.types.Rect): number; + } + interface Picture extends io.github.humbleui.skija.impl.RefCnt { + playback(p0: io.github.humbleui.skija.Canvas): io.github.humbleui.skija.Picture; + playback(p0: io.github.humbleui.skija.Canvas, p1: unknown): io.github.humbleui.skija.Picture; + getCullRect(): io.github.humbleui.types.Rect; + getUniqueId(): number; + serializeToData(): io.github.humbleui.skija.Data; + getApproximateOpCount(): number; + getApproximateBytesUsed(): number; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.FilterMode): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.FilterMode, p3: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.FilterTileMode, p1: io.github.humbleui.skija.FilterTileMode, p2: io.github.humbleui.skija.FilterMode, p3: io.github.humbleui.skija.Matrix33 | null | undefined, p4: io.github.humbleui.types.Rect | null | undefined): io.github.humbleui.skija.Shader; + } + const FilterMode: { + NEAREST: io.github.humbleui.skija.FilterMode; + LINEAR: io.github.humbleui.skija.FilterMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.FilterMode; + } + interface FilterMode extends kotlin.Enum { + } + const RuntimeEffectBuilder: { + _FinalizerHolder: typeof io.github.humbleui.skija.RuntimeEffectBuilder$_FinalizerHolder; + new(p0: io.github.humbleui.skija.RuntimeEffect): io.github.humbleui.skija.RuntimeEffectBuilder; + new(p0: io.github.humbleui.skija.RuntimeEffect, p1: io.github.humbleui.skija.Data): io.github.humbleui.skija.RuntimeEffectBuilder; + new(p0: io.github.humbleui.skija.RuntimeEffectBuilder): io.github.humbleui.skija.RuntimeEffectBuilder; + _nGetFinalizer(): number; + _nMake(p0: number): number; + _nMakeWithUniforms(p0: number, p1: number): number; + _nMakeCopy(p0: number): number; + _nMakeShader(p0: number, p1: kotlin.FloatArray): number; + _nMakeColorFilter(p0: number): number; + _nMakeBlender(p0: number): number; + _nGetUniforms(p0: number): number; + _nSetUniformFloats(p0: number, p1: string, p2: kotlin.FloatArray): void; + _nSetUniformInts(p0: number, p1: string, p2: Array): void; + _nSetChild(p0: number, p1: string, p2: number): void; + } + interface RuntimeEffectBuilder extends io.github.humbleui.skija.impl.Managed { + _effect: io.github.humbleui.skija.RuntimeEffect; + _uniforms: io.github.humbleui.skija.Data; + makeShader(): io.github.humbleui.skija.Shader; + makeShader(p0: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Shader; + makeColorFilter(): io.github.humbleui.skija.ColorFilter; + makeBlender(): io.github.humbleui.skija.Blender; + setUniform(p0: string, p1: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: number, p2: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: number, p2: number, p3: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: kotlin.FloatArray): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: io.github.humbleui.skija.Matrix33): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: io.github.humbleui.skija.Matrix44): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: number, p2: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: number, p2: number, p3: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.skija.RuntimeEffectBuilder; + setUniform(p0: string, p1: Array): io.github.humbleui.skija.RuntimeEffectBuilder; + setChild(p0: string, p1: io.github.humbleui.skija.RuntimeEffectChild | null | undefined): io.github.humbleui.skija.RuntimeEffectBuilder; + getEffect(): io.github.humbleui.skija.RuntimeEffect; + getUniforms(): io.github.humbleui.skija.Data; + } + const RuntimeEffectBuilder$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.RuntimeEffectBuilder$_FinalizerHolder; + } + interface RuntimeEffectBuilder$_FinalizerHolder { + } + const Paint$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Paint$_FinalizerHolder; + } + interface Paint$_FinalizerHolder { + } + const Bitmap$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Bitmap$_FinalizerHolder; + } + interface Bitmap$_FinalizerHolder { + } + const SurfaceOrigin: { + TOP_LEFT: io.github.humbleui.skija.SurfaceOrigin; + BOTTOM_LEFT: io.github.humbleui.skija.SurfaceOrigin; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.SurfaceOrigin; + } + interface SurfaceOrigin extends kotlin.Enum { + } + const ImageWithFilterResult: { + new(p0: io.github.humbleui.skija.Image, p1: io.github.humbleui.types.IRect, p2: io.github.humbleui.types.IPoint): io.github.humbleui.skija.ImageWithFilterResult; + } + interface ImageWithFilterResult extends java.lang.AutoCloseable { + _image: io.github.humbleui.skija.Image; + _subset: io.github.humbleui.types.IRect; + _offset: io.github.humbleui.types.IPoint; + getImage(): io.github.humbleui.skija.Image; + getSubset(): io.github.humbleui.types.IRect; + getOffset(): io.github.humbleui.types.IPoint; + } + const Region: { + _FinalizerHolder: typeof io.github.humbleui.skija.Region$_FinalizerHolder; + new(): io.github.humbleui.skija.Region; + _nMake(): number; + _nGetFinalizer(): number; + _nSet(p0: number, p1: number): boolean; + _nIsEmpty(p0: number): boolean; + _nIsRect(p0: number): boolean; + _nIsComplex(p0: number): boolean; + _nGetBounds(p0: number): io.github.humbleui.types.IRect; + _nComputeRegionComplexity(p0: number): number; + _nGetBoundaryPath(p0: number): number; + _nSetEmpty(p0: number): boolean; + _nSetRect(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nSetRects(p0: number, p1: Array): boolean; + _nSetRegion(p0: number, p1: number): boolean; + _nSetPath(p0: number, p1: number, p2: number): boolean; + _nIntersectsIRect(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nIntersectsRegion(p0: number, p1: number): boolean; + _nContainsIPoint(p0: number, p1: number, p2: number): boolean; + _nContainsIRect(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nContainsRegion(p0: number, p1: number): boolean; + _nQuickContains(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nQuickRejectIRect(p0: number, p1: number, p2: number, p3: number, p4: number): boolean; + _nQuickRejectRegion(p0: number, p1: number): boolean; + _nTranslate(p0: number, p1: number, p2: number): void; + _nOpIRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): boolean; + _nOpRegion(p0: number, p1: number, p2: number): boolean; + _nOpIRectRegion(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): boolean; + _nOpRegionIRect(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): boolean; + _nOpRegionRegion(p0: number, p1: number, p2: number, p3: number): boolean; + } + interface Region extends io.github.humbleui.skija.impl.Managed { + set(p0: io.github.humbleui.skija.Region): boolean; + isEmpty(): boolean; + isRect(): boolean; + isComplex(): boolean; + getBounds(): io.github.humbleui.types.IRect; + computeRegionComplexity(): number; + getBoundaryPath(): io.github.humbleui.skija.Path; + setEmpty(): boolean; + setRect(p0: io.github.humbleui.types.IRect): boolean; + setRects(p0: Array): boolean; + setRegion(p0: io.github.humbleui.skija.Region): boolean; + setPath(p0: io.github.humbleui.skija.Path, p1: io.github.humbleui.skija.Region): boolean; + intersects(p0: io.github.humbleui.types.IRect): boolean; + intersects(p0: io.github.humbleui.skija.Region): boolean; + contains(p0: number, p1: number): boolean; + contains(p0: io.github.humbleui.types.IRect): boolean; + contains(p0: io.github.humbleui.skija.Region): boolean; + quickContains(p0: io.github.humbleui.types.IRect): boolean; + quickReject(p0: io.github.humbleui.types.IRect): boolean; + quickReject(p0: io.github.humbleui.skija.Region): boolean; + translate(p0: number, p1: number): void; + op(p0: io.github.humbleui.types.IRect, p1: io.github.humbleui.skija.RegionOp): boolean; + op(p0: io.github.humbleui.skija.Region, p1: io.github.humbleui.skija.RegionOp): boolean; + op(p0: io.github.humbleui.types.IRect, p1: io.github.humbleui.skija.Region, p2: io.github.humbleui.skija.RegionOp): boolean; + op(p0: io.github.humbleui.skija.Region, p1: io.github.humbleui.types.IRect, p2: io.github.humbleui.skija.RegionOp): boolean; + op(p0: io.github.humbleui.skija.Region, p1: io.github.humbleui.skija.Region, p2: io.github.humbleui.skija.RegionOp): boolean; + } + const RegionOp: { + DIFFERENCE: io.github.humbleui.skija.RegionOp; + INTERSECT: io.github.humbleui.skija.RegionOp; + UNION: io.github.humbleui.skija.RegionOp; + XOR: io.github.humbleui.skija.RegionOp; + REVERSE_DIFFERENCE: io.github.humbleui.skija.RegionOp; + REPLACE: io.github.humbleui.skija.RegionOp; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.RegionOp; + } + interface RegionOp extends kotlin.Enum { + } + const Region$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Region$_FinalizerHolder; + } + interface Region$_FinalizerHolder { + } + const Font: { + _FinalizerHolder: typeof io.github.humbleui.skija.Font$_FinalizerHolder; + new(p0: number): io.github.humbleui.skija.Font; + new(p0: number, p1: boolean): io.github.humbleui.skija.Font; + new(): io.github.humbleui.skija.Font; + new(p0: io.github.humbleui.skija.Typeface | null | undefined): io.github.humbleui.skija.Font; + new(p0: io.github.humbleui.skija.Typeface | null | undefined, p1: number): io.github.humbleui.skija.Font; + new(p0: io.github.humbleui.skija.Typeface | null | undefined, p1: number, p2: number, p3: number): io.github.humbleui.skija.Font; + makeClone(p0: number): io.github.humbleui.skija.Font; + _nGetFinalizer(): number; + _nMakeDefault(): number; + _nMakeTypeface(p0: number): number; + _nMakeTypefaceSize(p0: number, p1: number): number; + _nMakeTypefaceSizeScaleSkew(p0: number, p1: number, p2: number, p3: number): number; + _nMakeClone(p0: number): number; + _nEquals(p0: number, p1: number): boolean; + _nIsAutoHintingForced(p0: number): boolean; + _nAreBitmapsEmbedded(p0: number): boolean; + _nIsSubpixel(p0: number): boolean; + _nAreMetricsLinear(p0: number): boolean; + _nIsEmboldened(p0: number): boolean; + _nIsBaselineSnapped(p0: number): boolean; + _nSetAutoHintingForced(p0: number, p1: boolean): void; + _nSetBitmapsEmbedded(p0: number, p1: boolean): void; + _nSetSubpixel(p0: number, p1: boolean): void; + _nSetMetricsLinear(p0: number, p1: boolean): void; + _nSetEmboldened(p0: number, p1: boolean): void; + _nSetBaselineSnapped(p0: number, p1: boolean): void; + _nGetEdging(p0: number): number; + _nSetEdging(p0: number, p1: number): void; + _nGetHinting(p0: number): number; + _nSetHinting(p0: number, p1: number): void; + _nGetTypeface(p0: number): number; + _nGetSize(p0: number): number; + _nGetScaleX(p0: number): number; + _nGetSkewX(p0: number): number; + _nSetTypeface(p0: number, p1: number): void; + _nSetSize(p0: number, p1: number): void; + _nSetScaleX(p0: number, p1: number): void; + _nSetSkewX(p0: number, p1: number): void; + _nGetStringGlyphs(p0: number, p1: string): Array; + _nGetUTF32Glyph(p0: number, p1: number): number; + _nGetUTF32Glyphs(p0: number, p1: Array): Array; + _nGetStringGlyphsCount(p0: number, p1: string): number; + _nMeasureText(p0: number, p1: string, p2: number): io.github.humbleui.types.Rect; + _nMeasureTextWidth(p0: number, p1: string, p2: number): number; + _nGetWidths(p0: number, p1: Array): kotlin.FloatArray; + _nGetBounds(p0: number, p1: Array, p2: number): Array; + _nGetPositions(p0: number, p1: Array, p2: number, p3: number): Array; + _nGetXPositions(p0: number, p1: Array, p2: number): kotlin.FloatArray; + _nGetPath(p0: number, p1: number): number; + _nGetPaths(p0: number, p1: Array): Array; + _nGetMetrics(p0: number): io.github.humbleui.skija.FontMetrics; + _nGetSpacing(p0: number): number; + } + interface Font extends io.github.humbleui.skija.impl.Managed { + _metrics: io.github.humbleui.skija.FontMetrics; + _spacing: number; + _resetMetrics(): void; + isAutoHintingForced(): boolean; + areBitmapsEmbedded(): boolean; + isSubpixel(): boolean; + areMetricsLinear(): boolean; + isEmboldened(): boolean; + isBaselineSnapped(): boolean; + setAutoHintingForced(p0: boolean): io.github.humbleui.skija.Font; + setBitmapsEmbedded(p0: boolean): io.github.humbleui.skija.Font; + setSubpixel(p0: boolean): io.github.humbleui.skija.Font; + setMetricsLinear(p0: boolean): io.github.humbleui.skija.Font; + setEmboldened(p0: boolean): io.github.humbleui.skija.Font; + setBaselineSnapped(p0: boolean): io.github.humbleui.skija.Font; + getEdging(): io.github.humbleui.skija.FontEdging; + setEdging(p0: io.github.humbleui.skija.FontEdging): io.github.humbleui.skija.Font; + getHinting(): io.github.humbleui.skija.FontHinting; + setHinting(p0: io.github.humbleui.skija.FontHinting): io.github.humbleui.skija.Font; + makeWithSize(p0: number): io.github.humbleui.skija.Font; + getTypeface(): io.github.humbleui.skija.Typeface | null | undefined; + getSize(): number; + getScaleX(): number; + getSkewX(): number; + setTypeface(p0: io.github.humbleui.skija.Typeface | null | undefined): io.github.humbleui.skija.Font; + setSize(p0: number): io.github.humbleui.skija.Font; + setScaleX(p0: number): io.github.humbleui.skija.Font; + setSkewX(p0: number): io.github.humbleui.skija.Font; + getStringGlyphs(p0: string): Array; + getUTF32Glyphs(p0: Array): Array; + getUTF32Glyph(p0: number): number; + getStringGlyphsCount(p0: string): number; + measureText(p0: string): io.github.humbleui.types.Rect; + measureText(p0: string, p1: io.github.humbleui.skija.Paint): io.github.humbleui.types.Rect; + measureTextWidth(p0: string): number; + measureTextWidth(p0: string, p1: io.github.humbleui.skija.Paint): number; + getWidths(p0: Array): kotlin.FloatArray; + getBounds(p0: Array): Array; + getBounds(p0: Array, p1: io.github.humbleui.skija.Paint): Array; + getPositions(p0: Array): Array; + getPositions(p0: Array, p1: io.github.humbleui.types.Point): Array; + getXPositions(p0: Array): kotlin.FloatArray; + getXPositions(p0: Array, p1: number): kotlin.FloatArray; + getPath(p0: number): io.github.humbleui.skija.Path | null | undefined; + getPaths(p0: Array): Array; + getMetrics(): io.github.humbleui.skija.FontMetrics; + getSpacing(): number; + } + const FontMetrics: { + new(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number, p8: number, p9: number, p10: number, p11: number | null | undefined, p12: number | null | undefined, p13: number | null | undefined, p14: number | null | undefined): io.github.humbleui.skija.FontMetrics; + } + interface FontMetrics { + _top: number; + _ascent: number; + _descent: number; + _bottom: number; + _leading: number; + _avgCharWidth: number; + _maxCharWidth: number; + _xMin: number; + _xMax: number; + _xHeight: number; + _capHeight: number; + _underlineThickness: number | null | undefined; + _underlinePosition: number | null | undefined; + _strikeoutThickness: number | null | undefined; + _strikeoutPosition: number | null | undefined; + getHeight(): number; + getTop(): number; + getAscent(): number; + getDescent(): number; + getBottom(): number; + getLeading(): number; + getAvgCharWidth(): number; + getMaxCharWidth(): number; + getXMin(): number; + getXMax(): number; + getXHeight(): number; + getCapHeight(): number; + getUnderlineThickness(): number | null | undefined; + getUnderlinePosition(): number | null | undefined; + getStrikeoutThickness(): number | null | undefined; + getStrikeoutPosition(): number | null | undefined; + } + const FontEdging: { + ALIAS: io.github.humbleui.skija.FontEdging; + ANTI_ALIAS: io.github.humbleui.skija.FontEdging; + SUBPIXEL_ANTI_ALIAS: io.github.humbleui.skija.FontEdging; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.FontEdging; + } + interface FontEdging extends kotlin.Enum { + } + const FontHinting: { + NONE: io.github.humbleui.skija.FontHinting; + SLIGHT: io.github.humbleui.skija.FontHinting; + NORMAL: io.github.humbleui.skija.FontHinting; + FULL: io.github.humbleui.skija.FontHinting; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.FontHinting; + } + interface FontHinting extends kotlin.Enum { + } + const Typeface: { + new(p0: number): io.github.humbleui.skija.Typeface; + _nGetFontStyle(p0: number): number; + _nIsFixedPitch(p0: number): boolean; + _nGetVariations(p0: number): Array; + _nGetVariationAxes(p0: number): Array; + _nGetUniqueId(p0: number): number; + _nEquals(p0: number, p1: number): boolean; + _nMakeFromName(p0: string, p1: number): number; + _nMakeFromFile(p0: string, p1: number): number; + _nMakeFromData(p0: number, p1: number): number; + _nMakeClone(p0: number, p1: io.github.humbleui.skija.FontArguments): number; + _nGetUTF32Glyphs(p0: number, p1: Array): Array; + _nGetUTF32Glyph(p0: number, p1: number): number; + _nGetGlyphsCount(p0: number): number; + _nGetTablesCount(p0: number): number; + _nGetTableTags(p0: number): Array; + _nGetTableSize(p0: number, p1: number): number; + _nGetTableData(p0: number, p1: number): number; + _nGetUnitsPerEm(p0: number): number; + _nGetKerningPairAdjustments(p0: number, p1: Array): Array; + _nGetFamilyNames(p0: number): Array; + _nGetFamilyName(p0: number): string; + _nGetBounds(p0: number): io.github.humbleui.types.Rect; + _nOpenStream(p0: number, p1: Array): number; + } + interface Typeface extends io.github.humbleui.skija.impl.RefCnt { + getFontStyle(): io.github.humbleui.skija.FontStyle; + isBold(): boolean; + isItalic(): boolean; + isFixedPitch(): boolean; + getVariations(): Array; + getVariationAxes(): Array; + getUniqueId(): number; + makeClone(p0: io.github.humbleui.skija.FontVariation): io.github.humbleui.skija.Typeface; + makeClone(p0: Array): io.github.humbleui.skija.Typeface; + makeClone(p0: io.github.humbleui.skija.FontArguments): io.github.humbleui.skija.Typeface; + getStringGlyphs(p0: string): Array; + getUTF32Glyphs(p0: Array): Array; + getUTF32Glyph(p0: number): number; + getGlyphsCount(): number; + getTablesCount(): number; + getTableTags(): Array; + getTableSize(p0: string): number; + getTableData(p0: string): io.github.humbleui.skija.Data | null | undefined; + getUnitsPerEm(): number; + getKerningPairAdjustments(p0: Array): Array; + getFamilyNames(): Array; + getFamilyName(): string; + getBounds(): io.github.humbleui.types.Rect; + openStream(): io.github.humbleui.skija.StreamAsset; + openStream(p0: Array): io.github.humbleui.skija.StreamAsset; + } + const FontStyle: { + NORMAL: io.github.humbleui.skija.FontStyle; + BOLD: io.github.humbleui.skija.FontStyle; + ITALIC: io.github.humbleui.skija.FontStyle; + BOLD_ITALIC: io.github.humbleui.skija.FontStyle; + new(p0: number, p1: number, p2: io.github.humbleui.skija.FontSlant): io.github.humbleui.skija.FontStyle; + new(p0: number): io.github.humbleui.skija.FontStyle; + } + interface FontStyle { + _value: number; + getWeight(): number; + withWeight(p0: number): io.github.humbleui.skija.FontStyle; + getWidth(): number; + withWidth(p0: number): io.github.humbleui.skija.FontStyle; + getSlant(): io.github.humbleui.skija.FontSlant; + withSlant(p0: io.github.humbleui.skija.FontSlant): io.github.humbleui.skija.FontStyle; + } + const FontSlant: { + UPRIGHT: io.github.humbleui.skija.FontSlant; + ITALIC: io.github.humbleui.skija.FontSlant; + OBLIQUE: io.github.humbleui.skija.FontSlant; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.FontSlant; + } + interface FontSlant extends kotlin.Enum { + } + const FontVariation: { + EMPTY: Array; + _splitPattern: java.util.regex.Pattern; + _variationPattern: java.util.regex.Pattern; + new(p0: string, p1: number): io.github.humbleui.skija.FontVariation; + new(p0: number, p1: number): io.github.humbleui.skija.FontVariation; + parseOne(p0: string): io.github.humbleui.skija.FontVariation; + parse(p0: string): Array; + } + interface FontVariation { + _tag: number; + _value: number; + getTag(): string; + getValue(): number; + } + const FontArguments: { + DEFAULT: io.github.humbleui.skija.FontArguments; + new(p0: number, p1: Array, p2: number, p3: Array): io.github.humbleui.skija.FontArguments; + } + interface FontArguments { + _collectionIndex: number; + _variations: Array; + _paletteIndex: number; + _paletteOverrides: Array; + getCollectionIndex(): number; + getVariations(): Array; + getPaletteIndex(): number; + getPaletteOverrides(): Array; + withCollectionIndex(p0: number): io.github.humbleui.skija.FontArguments; + withVariations(p0: Array): io.github.humbleui.skija.FontArguments; + withPaletteIndex(p0: number): io.github.humbleui.skija.FontArguments; + withPaletteOverrides(p0: Array): io.github.humbleui.skija.FontArguments; + } + const StreamAsset: { + new(p0: number): io.github.humbleui.skija.StreamAsset; + _nGetFinalizer(): number; + _nIsAtEnd(p0: number): boolean; + _nRead(p0: number, p1: Array, p2: number): number; + _nPeek(p0: number, p1: Array, p2: number): number; + _nSkip(p0: number, p1: number): number; + _nRewind(p0: number): boolean; + _nDuplicate(p0: number): number; + _nFork(p0: number): number; + _nHasPosition(p0: number): boolean; + _nGetPosition(p0: number): number; + _nSeek(p0: number, p1: number): boolean; + _nMove(p0: number, p1: number): boolean; + _nHasLength(p0: number): boolean; + _nGetLength(p0: number): number; + _nGetMemoryBase(p0: number): number; + } + interface StreamAsset extends io.github.humbleui.skija.impl.Managed { + isAtEnd(): boolean; + read(p0: Array, p1: number): number; + peek(p0: Array, p1: number): number; + skip(p0: number): number; + rewind(): boolean; + duplicate(): io.github.humbleui.skija.StreamAsset | null | undefined; + fork(): io.github.humbleui.skija.StreamAsset | null | undefined; + hasPosition(): boolean; + getPosition(): number; + seek(p0: number): boolean; + move(p0: number): boolean; + hasLength(): boolean; + getLength(): number; + getMemoryBase(): number; + } + const Font$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Font$_FinalizerHolder; + } + interface Font$_FinalizerHolder { + } + const TextBlob: { + _FinalizerHolder: typeof io.github.humbleui.skija.TextBlob$_FinalizerHolder; + new(p0: number): io.github.humbleui.skija.TextBlob; + makeFromPosH(p0: Array, p1: kotlin.FloatArray, p2: number, p3: io.github.humbleui.skija.Font): io.github.humbleui.skija.TextBlob; + makeFromPos(p0: Array, p1: Array, p2: io.github.humbleui.skija.Font): io.github.humbleui.skija.TextBlob; + makeFromRSXform(p0: Array, p1: Array, p2: io.github.humbleui.skija.Font): io.github.humbleui.skija.TextBlob; + makeFromData(p0: io.github.humbleui.skija.Data): io.github.humbleui.skija.TextBlob | null | undefined; + _nGetFinalizer(): number; + _nBounds(p0: number): io.github.humbleui.types.Rect; + _nGetUniqueId(p0: number): number; + _nGetIntercepts(p0: number, p1: number, p2: number, p3: number): kotlin.FloatArray; + _nMakeFromPosH(p0: Array, p1: kotlin.FloatArray, p2: number, p3: number): number; + _nMakeFromPos(p0: Array, p1: kotlin.FloatArray, p2: number): number; + _nMakeFromRSXform(p0: Array, p1: kotlin.FloatArray, p2: number): number; + _nSerializeToData(p0: number): number; + _nMakeFromData(p0: number): number; + _nGetGlyphs(p0: number): Array; + _nGetPositions(p0: number): kotlin.FloatArray; + _nGetClusters(p0: number): Array; + _nGetTightBounds(p0: number): io.github.humbleui.types.Rect; + _nGetBlockBounds(p0: number): io.github.humbleui.types.Rect; + _nGetFirstBaseline(p0: number): number; + _nGetLastBaseline(p0: number): number; + } + interface TextBlob extends io.github.humbleui.skija.impl.Managed { + getBounds(): io.github.humbleui.types.Rect; + getUniqueId(): number; + getIntercepts(p0: number, p1: number): kotlin.FloatArray; + getIntercepts(p0: number, p1: number, p2: io.github.humbleui.skija.Paint | null | undefined): kotlin.FloatArray; + serializeToData(): io.github.humbleui.skija.Data; + getGlyphs(): Array; + getPositions(): kotlin.FloatArray; + getClusters(): Array; + getTightBounds(): io.github.humbleui.types.Rect; + getBlockBounds(): io.github.humbleui.types.Rect; + getFirstBaseline(): number; + getLastBaseline(): number; + } + const TextBlob$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.TextBlob$_FinalizerHolder; + } + interface TextBlob$_FinalizerHolder { + } + const TextLine: { + _FinalizerHolder: typeof io.github.humbleui.skija.TextLine$_FinalizerHolder; + new(p0: number): io.github.humbleui.skija.TextLine; + make(p0: string, p1: io.github.humbleui.skija.Font): io.github.humbleui.skija.TextLine; + make(p0: string, p1: io.github.humbleui.skija.Font, p2: io.github.humbleui.skija.shaper.ShapingOptions): io.github.humbleui.skija.TextLine; + _nGetFinalizer(): number; + _nGetAscent(p0: number): number; + _nGetCapHeight(p0: number): number; + _nGetXHeight(p0: number): number; + _nGetDescent(p0: number): number; + _nGetLeading(p0: number): number; + _nGetWidth(p0: number): number; + _nGetHeight(p0: number): number; + _nGetTextBlob(p0: number): number; + _nGetGlyphs(p0: number): Array; + _nGetPositions(p0: number): kotlin.FloatArray; + _nGetRunPositions(p0: number): kotlin.FloatArray; + _nGetBreakPositions(p0: number): kotlin.FloatArray; + _nGetBreakOffsets(p0: number): Array; + _nGetOffsetAtCoord(p0: number, p1: number): number; + _nGetLeftOffsetAtCoord(p0: number, p1: number): number; + _nGetCoordAtOffset(p0: number, p1: number): number; + } + interface TextLine extends io.github.humbleui.skija.impl.Managed { + getAscent(): number; + getCapHeight(): number; + getXHeight(): number; + getDescent(): number; + getLeading(): number; + getWidth(): number; + getHeight(): number; + getTextBlob(): io.github.humbleui.skija.TextBlob | null | undefined; + getGlyphs(): Array; + getPositions(): kotlin.FloatArray; + getOffsetAtCoord(p0: number): number; + getLeftOffsetAtCoord(p0: number): number; + getCoordAtOffset(p0: number): number; + getIntercepts(p0: number, p1: number): kotlin.FloatArray; + getIntercepts(p0: number, p1: number, p2: io.github.humbleui.skija.Paint | null | undefined): kotlin.FloatArray; + } + const FontMgr: { + _DefaultHolder: typeof io.github.humbleui.skija.FontMgr$_DefaultHolder; + new(p0: number): io.github.humbleui.skija.FontMgr; + new(p0: number, p1: boolean): io.github.humbleui.skija.FontMgr; + useSystemRenderingParams(p0: boolean): void; + getDefault(): io.github.humbleui.skija.FontMgr; + _nGetFamiliesCount(p0: number): number; + _nGetFamilyName(p0: number, p1: number): string; + _nMakeStyleSet(p0: number, p1: number): number; + _nMatchFamily(p0: number, p1: string): number; + _nMatchFamilyStyle(p0: number, p1: string, p2: number): number; + _nMatchFamilyStyleCharacter(p0: number, p1: string, p2: number, p3: Array, p4: number): number; + _nMakeFromFile(p0: number, p1: string, p2: number): number; + _nMakeFromData(p0: number, p1: number, p2: number): number; + _nUseSystemRenderingParams(p0: number): void; + _nDefault(): number; + } + interface FontMgr extends io.github.humbleui.skija.impl.RefCnt { + getFamiliesCount(): number; + getFamilyName(p0: number): string; + makeStyleSet(p0: number): io.github.humbleui.skija.FontStyleSet; + matchFamily(p0: string | null | undefined): io.github.humbleui.skija.FontStyleSet; + matchFamilyStyle(p0: string | null | undefined, p1: io.github.humbleui.skija.FontStyle): io.github.humbleui.skija.Typeface | null | undefined; + matchFamiliesStyle(p0: Array, p1: io.github.humbleui.skija.FontStyle): io.github.humbleui.skija.Typeface | null | undefined; + matchFamilyStyleCharacter(p0: string | null | undefined, p1: io.github.humbleui.skija.FontStyle, p2: Array, p3: number): io.github.humbleui.skija.Typeface; + matchFamiliesStyleCharacter(p0: Array, p1: io.github.humbleui.skija.FontStyle, p2: Array, p3: number): io.github.humbleui.skija.Typeface | null | undefined; + makeFromFile(p0: string): io.github.humbleui.skija.Typeface | null | undefined; + makeFromFile(p0: string, p1: number): io.github.humbleui.skija.Typeface | null | undefined; + makeFromData(p0: io.github.humbleui.skija.Data): io.github.humbleui.skija.Typeface | null | undefined; + makeFromData(p0: io.github.humbleui.skija.Data, p1: number): io.github.humbleui.skija.Typeface | null | undefined; + } + const FontStyleSet: { + new(p0: number): io.github.humbleui.skija.FontStyleSet; + makeEmpty(): io.github.humbleui.skija.FontStyleSet; + _nMakeEmpty(): number; + _nCount(p0: number): number; + _nGetStyle(p0: number, p1: number): number; + _nGetStyleName(p0: number, p1: number): string; + _nGetTypeface(p0: number, p1: number): number; + _nMatchStyle(p0: number, p1: number): number; + } + interface FontStyleSet extends io.github.humbleui.skija.impl.RefCnt { + count(): number; + getStyle(p0: number): io.github.humbleui.skija.FontStyle; + getStyleName(p0: number): string; + getTypeface(p0: number): io.github.humbleui.skija.Typeface; + matchStyle(p0: io.github.humbleui.skija.FontStyle): io.github.humbleui.skija.Typeface; + } + const FontMgr$_DefaultHolder: { + INSTANCE: io.github.humbleui.skija.FontMgr; + new(): io.github.humbleui.skija.FontMgr$_DefaultHolder; + } + interface FontMgr$_DefaultHolder { + } + const TextLine$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.TextLine$_FinalizerHolder; + } + interface TextLine$_FinalizerHolder { + } + const Drawable: { + new(): io.github.humbleui.skija.Drawable; + _nMake(): number; + _nDraw(p0: number, p1: number, p2: kotlin.FloatArray): void; + _nMakePictureSnapshot(p0: number): number; + _nGetGenerationId(p0: number): number; + _nNotifyDrawingChanged(p0: number): void; + } + interface Drawable extends io.github.humbleui.skija.impl.RefCnt, io.github.humbleui.skija.Flattenable { + _bounds: io.github.humbleui.types.Rect; + draw(p0: io.github.humbleui.skija.Canvas): io.github.humbleui.skija.Drawable; + draw(p0: io.github.humbleui.skija.Canvas, p1: number, p2: number): io.github.humbleui.skija.Drawable; + draw(p0: io.github.humbleui.skija.Canvas, p1: io.github.humbleui.skija.Matrix33 | null | undefined): io.github.humbleui.skija.Drawable; + makePictureSnapshot(): io.github.humbleui.skija.Picture; + getGenerationId(): number; + getBounds(): io.github.humbleui.types.Rect; + notifyDrawingChanged(): io.github.humbleui.skija.Drawable; + onDraw(p0: io.github.humbleui.skija.Canvas): void; + onGetBounds(): io.github.humbleui.types.Rect; + _onDraw(p0: number): void; + _nInit(p0: number): void; + } + const ClipMode: { + DIFFERENCE: io.github.humbleui.skija.ClipMode; + INTERSECT: io.github.humbleui.skija.ClipMode; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.ClipMode; + } + interface ClipMode extends kotlin.Enum { + } + const SaveLayerRec: { + new(): io.github.humbleui.skija.SaveLayerRec; + new(p0: io.github.humbleui.types.Rect | null | undefined, p1: io.github.humbleui.skija.Paint | null | undefined): io.github.humbleui.skija.SaveLayerRec; + new(p0: io.github.humbleui.types.Rect | null | undefined, p1: io.github.humbleui.skija.Paint | null | undefined, p2: io.github.humbleui.skija.SaveLayerRecFlag): io.github.humbleui.skija.SaveLayerRec; + new(p0: io.github.humbleui.types.Rect | null | undefined, p1: io.github.humbleui.skija.Paint | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined): io.github.humbleui.skija.SaveLayerRec; + new(p0: io.github.humbleui.types.Rect | null | undefined, p1: io.github.humbleui.skija.Paint | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.skija.SaveLayerRecFlag): io.github.humbleui.skija.SaveLayerRec; + new(p0: io.github.humbleui.types.Rect | null | undefined, p1: io.github.humbleui.skija.Paint | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.skija.ColorSpace | null | undefined, p4: io.github.humbleui.skija.SaveLayerRecFlag): io.github.humbleui.skija.SaveLayerRec; + new(p0: io.github.humbleui.types.Rect | null | undefined, p1: io.github.humbleui.skija.Paint | null | undefined, p2: io.github.humbleui.skija.ImageFilter | null | undefined, p3: io.github.humbleui.skija.FilterTileMode, p4: io.github.humbleui.skija.ColorSpace | null | undefined, p5: io.github.humbleui.skija.SaveLayerRecFlag): io.github.humbleui.skija.SaveLayerRec; + } + interface SaveLayerRec { + _bounds: io.github.humbleui.types.Rect | null | undefined; + _paint: io.github.humbleui.skija.Paint | null | undefined; + _backdrop: io.github.humbleui.skija.ImageFilter | null | undefined; + _tileMode: io.github.humbleui.skija.FilterTileMode; + _colorSpace: io.github.humbleui.skija.ColorSpace | null | undefined; + _flags: number; + getBounds(): io.github.humbleui.types.Rect | null | undefined; + getPaint(): io.github.humbleui.skija.Paint | null | undefined; + getBackdrop(): io.github.humbleui.skija.ImageFilter | null | undefined; + getTileMode(): io.github.humbleui.skija.FilterTileMode; + getColorSpace(): io.github.humbleui.skija.ColorSpace | null | undefined; + getFlags(): number; + } + const SaveLayerRecFlag: { + PRESERVE_LCD_TEXT: io.github.humbleui.skija.SaveLayerRecFlag; + INIT_WITH_PREVIOUS: io.github.humbleui.skija.SaveLayerRecFlag; + F16_COLOR_TYPE: io.github.humbleui.skija.SaveLayerRecFlag; + _values: Array; + entries: kotlin.enums.EnumEntries; + values(): Array; + valueOf(value: string): io.github.humbleui.skija.SaveLayerRecFlag; + } + interface SaveLayerRecFlag extends kotlin.Enum { + _flag: number; + } + const Canvas$_FinalizerHolder: { + PTR: number; + new(): io.github.humbleui.skija.Canvas$_FinalizerHolder; + } + interface Canvas$_FinalizerHolder { + } + } + namespace types { + const Point: { + ZERO: io.github.humbleui.types.Point; + new(p0: number, p1: number): io.github.humbleui.types.Point; + flattenArray(p0: Array): kotlin.FloatArray; + fromArray(p0: kotlin.FloatArray): Array; + } + interface Point { + _x: number; + _y: number; + offset(p0: number, p1: number): io.github.humbleui.types.Point; + offset(p0: io.github.humbleui.types.Point): io.github.humbleui.types.Point; + scale(p0: number): io.github.humbleui.types.Point; + scale(p0: number, p1: number): io.github.humbleui.types.Point; + inverse(): io.github.humbleui.types.Point; + isEmpty(): boolean; + toIPoint(): io.github.humbleui.types.IPoint; + getX(): number; + getY(): number; + withX(p0: number): io.github.humbleui.types.Point; + withY(p0: number): io.github.humbleui.types.Point; + } + const IPoint: { + ZERO: io.github.humbleui.types.IPoint; + new(p0: number, p1: number): io.github.humbleui.types.IPoint; + _makeFromLong(p0: number): io.github.humbleui.types.IPoint; + } + interface IPoint { + _x: number; + _y: number; + offset(p0: number, p1: number): io.github.humbleui.types.IPoint; + offset(p0: io.github.humbleui.types.IPoint): io.github.humbleui.types.IPoint; + scale(p0: number): io.github.humbleui.types.IPoint; + scale(p0: number, p1: number): io.github.humbleui.types.IPoint; + inverse(): io.github.humbleui.types.IPoint; + isEmpty(): boolean; + toPoint(): io.github.humbleui.types.Point; + getX(): number; + getY(): number; + withX(p0: number): io.github.humbleui.types.IPoint; + withY(p0: number): io.github.humbleui.types.IPoint; + } + const IRect: { + new(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.IRect; + makeLTRB(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.IRect; + makeXYWH(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.IRect; + makeWH(p0: number, p1: number): io.github.humbleui.types.IRect; + } + interface IRect { + _left: number; + _top: number; + _right: number; + _bottom: number; + getWidth(): number; + getHeight(): number; + withWidth(p0: number): io.github.humbleui.types.IRect; + withHeight(p0: number): io.github.humbleui.types.IRect; + intersect(p0: io.github.humbleui.types.IRect): io.github.humbleui.types.IRect | null | undefined; + scale(p0: number): io.github.humbleui.types.IRect; + scale(p0: number, p1: number): io.github.humbleui.types.IRect; + offset(p0: number, p1: number): io.github.humbleui.types.IRect; + offset(p0: io.github.humbleui.types.IPoint): io.github.humbleui.types.IRect; + toRect(): io.github.humbleui.types.Rect; + isEmpty(): boolean; + contains(p0: number, p1: number): boolean; + contains(p0: io.github.humbleui.types.IPoint): boolean; + getLeft(): number; + getTop(): number; + getRight(): number; + getBottom(): number; + withLeft(p0: number): io.github.humbleui.types.IRect; + withTop(p0: number): io.github.humbleui.types.IRect; + withRight(p0: number): io.github.humbleui.types.IRect; + withBottom(p0: number): io.github.humbleui.types.IRect; + } + const Rect: { + new(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.Rect; + makeLTRB(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.Rect; + makeWH(p0: number, p1: number): io.github.humbleui.types.Rect; + makeWH(p0: io.github.humbleui.types.Point): io.github.humbleui.types.Rect; + makeXYWH(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.Rect; + } + interface Rect { + _left: number; + _top: number; + _right: number; + _bottom: number; + getWidth(): number; + getHeight(): number; + withWidth(p0: number): io.github.humbleui.types.Rect; + withHeight(p0: number): io.github.humbleui.types.Rect; + intersect(p0: io.github.humbleui.types.Rect): io.github.humbleui.types.Rect | null | undefined; + scale(p0: number): io.github.humbleui.types.Rect; + scale(p0: number, p1: number): io.github.humbleui.types.Rect; + offset(p0: number, p1: number): io.github.humbleui.types.Rect; + offset(p0: io.github.humbleui.types.Point): io.github.humbleui.types.Rect; + toIRect(): io.github.humbleui.types.IRect; + withRadii(p0: number): io.github.humbleui.types.RRect; + withRadii(p0: number, p1: number): io.github.humbleui.types.RRect; + withRadii(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.RRect; + withRadii(p0: kotlin.FloatArray): io.github.humbleui.types.RRect; + inflate(p0: number): io.github.humbleui.types.Rect; + isEmpty(): boolean; + getLeft(): number; + getTop(): number; + getRight(): number; + getBottom(): number; + withLeft(p0: number): io.github.humbleui.types.Rect; + withTop(p0: number): io.github.humbleui.types.Rect; + withRight(p0: number): io.github.humbleui.types.Rect; + withBottom(p0: number): io.github.humbleui.types.Rect; + } + const RRect: { + new(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): io.github.humbleui.types.RRect; + makeLTRB(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.types.RRect; + makeLTRB(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.types.RRect; + makeLTRB(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): io.github.humbleui.types.RRect; + makeNinePatchLTRB(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): io.github.humbleui.types.RRect; + makeComplexLTRB(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): io.github.humbleui.types.RRect; + makeOvalLTRB(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.RRect; + makePillLTRB(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.RRect; + makeXYWH(p0: number, p1: number, p2: number, p3: number, p4: number): io.github.humbleui.types.RRect; + makeXYWH(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number): io.github.humbleui.types.RRect; + makeXYWH(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): io.github.humbleui.types.RRect; + makeNinePatchXYWH(p0: number, p1: number, p2: number, p3: number, p4: number, p5: number, p6: number, p7: number): io.github.humbleui.types.RRect; + makeComplexXYWH(p0: number, p1: number, p2: number, p3: number, p4: kotlin.FloatArray): io.github.humbleui.types.RRect; + makeOvalXYWH(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.RRect; + makePillXYWH(p0: number, p1: number, p2: number, p3: number): io.github.humbleui.types.RRect; + } + interface RRect extends io.github.humbleui.types.Rect { + _radii: kotlin.FloatArray; + } + } + } + } } namespace it { namespace unimi {