diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
index 76c98936..5e2e9b96 100644
--- a/.github/workflows/gradle.yml
+++ b/.github/workflows/gradle.yml
@@ -3,8 +3,8 @@
name: Java CI with Gradle
-concurrency:
- group: "build-1.20"
+concurrency:
+ group: "build"
cancel-in-progress: true
on:
@@ -12,18 +12,18 @@ on:
branches: [ master ]
paths-ignore:
- '*.md'
-
+
jobs:
build:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v3.13.0
with:
- java-version: 17
+ java-version: 21
distribution: 'zulu'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
@@ -34,9 +34,9 @@ jobs:
- uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
- automatic_release_tag: "latest-1.20.1"
+ automatic_release_tag: "latest-1.21"
prerelease: false
- title: "1.20.1 Build"
+ title: "1.21 Build"
files: |
./build/libs/*.jar
-
+
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index 46e0c299..84e34c99 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -10,11 +10,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v3.13.0
with:
- java-version: 17
+ java-version: 21
distribution: 'zulu'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
diff --git a/README.md b/README.md
index 2b499a75..eafb1c4a 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-
+
@@ -39,6 +39,7 @@
- ArrowDmg (Ported from [Wurst](https://github.com/Wurst-Imperium/Wurst7/tree))
- AutoBedTrap (Ported from [BleachHack-CupEdition](https://github.com/CUPZYY/BleachHack-CupEdition/blob/master/CupEdition-1.17/src/main/java/bleach/hack/module/mods/AutoBedtrap.java))
- AutoCraft (More generalized version of [AutoBedCraft](https://github.com/Anticope/orion/blob/main/src/main/java/me/ghosttypes/orion/modules/main/AutoBedCraft.java) from orion)
+- AutoEnchant
- AutoExtinguish
- AutoFarm
- AutoGrind
@@ -69,6 +70,7 @@
- Jetpack
- KnockbackPlus
- Lavacast
+- LawnBot (Ported from [JexClient](https://github.com/DustinRepo/JexClient/blob/main/src/main/java/me/dustin/jex/feature/mod/impl/world/LawnBot.java))
- MossBot (Ported from [BleachHack](https://github.com/BleachDrinker420/BleachHack/pull/211))
- NewChunks (Ported from [BleachHack](https://github.com/BleachDrinker420/BleachHack/blob/master/BleachHack-Fabric-1.17/src/main/java/bleach/hack/module/mods/NewChunks.java))
- NoJumpDelay
diff --git a/build.gradle b/build.gradle
index 9b729a5b..6016269c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,8 +1,8 @@
plugins {
- id 'fabric-loom' version '1.1-SNAPSHOT'
+ id 'fabric-loom' version '1.9-SNAPSHOT'
}
-sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17
+sourceCompatibility = targetCompatibility = JavaVersion.VERSION_21
archivesBaseName = project.archives_base_name
version = project.mod_version
@@ -16,6 +16,11 @@ repositories {
maven { url "https://maven.seedfinding.com/" }
maven { url "https://maven-snapshots.seedfinding.com/" }
maven { url 'https://jitpack.io' }
+ maven { url 'https://maven.duti.dev/releases' }
+}
+
+loom {
+ accessWidenerPath = file("src/main/resources/meteor-rejects.accesswidener")
}
configurations {
@@ -24,13 +29,18 @@ configurations {
}
dependencies {
+ // This will make it work on most platforms. It automatically chooses the right dependencies at runtime.
+ extraLibs('dev.duti.acheong:cubiomes:1.22.3') { transitive = false }
+ extraLibs('dev.duti.acheong:cubiomes:1.22.3:linux64') { transitive = false }
+ extraLibs('dev.duti.acheong:cubiomes:1.22.3:osx') { transitive = false }
+ extraLibs('dev.duti.acheong:cubiomes:1.22.3:windows64') { transitive = false }
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_version}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
- modImplementation("meteordevelopment:meteor-client:${project.meteor_version}-SNAPSHOT")
- modImplementation "baritone:fabric:${project.minecraft_version}-SNAPSHOT"
+ modImplementation("meteordevelopment:meteor-client:${project.minecraft_version}-SNAPSHOT")
+ modCompileOnly "meteordevelopment:baritone:${project.baritone_version}-SNAPSHOT"
// seed .locate and ore sim
extraLibs('com.seedfinding:mc_math:ffd2edcfcc0d18147549c88cc7d8ec6cf21b5b91') { transitive = false }
@@ -40,7 +50,7 @@ dependencies {
extraLibs('com.seedfinding:mc_biome:41a42cb9019a552598f12089059538853e18ec78') { transitive = false }
extraLibs('com.seedfinding:mc_terrain:b4246cbd5880c4f8745ccb90e1b102bde3448126') { transitive = false }
extraLibs('com.seedfinding:mc_feature:919b7e513cc1e87e029a9cd703fc4e2dc8686229') { transitive = false }
-
+
// seedcracker api
implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:2.10.1')) {transitive = false}
// implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:master-SNAPSHOT')) {transitive = false}
@@ -48,10 +58,6 @@ dependencies {
configurations.implementation.extendsFrom(configurations.extraLibs)
}
-loom {
- accessWidenerPath = file("src/main/resources/meteor-rejects.accesswidener")
-}
-
processResources {
inputs.property "version", project.version
@@ -65,7 +71,7 @@ processResources {
jar {
from("LICENSE") {
- rename { "${it}_${project.archivesBaseName}"}
+ rename { "${it}_${project.archivesBaseName}" }
}
from {
configurations.extraLibs.collect { it.isDirectory() ? it : zipTree(it) }
@@ -85,7 +91,7 @@ tasks.withType(JavaCompile).configureEach {
// The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too
// JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used.
// We'll use that if it's available, but otherwise we'll use the older option.
- def targetVersion = 17
+ def targetVersion = 21
if (JavaVersion.current().isJava9Compatible()) {
it.options.release = targetVersion
}
diff --git a/gradle.properties b/gradle.properties
index a759d224..84389b6d 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,13 +2,13 @@
org.gradle.jvmargs=-Xmx2G
# Fabric Properties
-minecraft_version=1.20.1
-yarn_version=1.20.1+build.1
-loader_version=0.14.21
+minecraft_version=1.21.4
+yarn_version=1.21.4+build.8
+loader_version=0.16.9
# Mod Properties
mod_version = 0.3
maven_group = anticope.rejects
archives_base_name = meteor-rejects-addon
-meteor_version=0.5.4
\ No newline at end of file
+baritone_version=1.21.4
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 7454180f..a4b76b95 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index ef626410..cea7a793 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
\ No newline at end of file
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index fe1f4e62..f3b75f3b 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
-#!/usr/bin/env sh
+#!/bin/sh
#
-# Copyright 2015 the original author or authors.
+# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -15,69 +15,103 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
-##
-## Gradle start up script for UN*X
-##
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
##############################################################################
# Attempt to set APP_HOME
+
# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
warn () {
echo "$*"
-}
+} >&2
die () {
echo
echo "$*"
echo
exit 1
-}
+} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MSYS* | MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACMD=$JAVA_HOME/jre/sh/java
else
- JAVACMD="$JAVA_HOME/bin/java"
+ JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -98,88 +132,120 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
+ fi
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
fi
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
# Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
fi
- i=`expr $i + 1`
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
fi
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
-exec "$JAVACMD" "$@"
\ No newline at end of file
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
index 477c8966..9d21a218 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,8 +13,10 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,7 +27,8 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if %ERRORLEVEL% equ 0 goto execute
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -75,15 +78,17 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
-:omega
\ No newline at end of file
+:omega
diff --git a/src/main/java/anticope/rejects/MeteorRejectsAddon.java b/src/main/java/anticope/rejects/MeteorRejectsAddon.java
index 7a0e9e73..c20d8399 100644
--- a/src/main/java/anticope/rejects/MeteorRejectsAddon.java
+++ b/src/main/java/anticope/rejects/MeteorRejectsAddon.java
@@ -62,11 +62,11 @@ public void onInitialize() {
modules.add(new GamemodeNotifier());
modules.add(new GhostMode());
modules.add(new Glide());
- modules.add(new InstaMine());
modules.add(new ItemGenerator());
modules.add(new InteractionMenu());
modules.add(new Jetpack());
modules.add(new KnockbackPlus());
+ modules.add(new LawnBot());
modules.add(new Lavacast());
modules.add(new MossBot());
modules.add(new NewChunks());
@@ -83,6 +83,8 @@ public void onInitialize() {
modules.add(new SoundLocator());
modules.add(new TreeAura());
modules.add(new VehicleOneHit());
+ modules.add(new AutoEnchant());
+ modules.add(new AutoRename());
// Commands
Commands.add(new CenterCommand());
@@ -133,7 +135,7 @@ public String getCommit() {
.get().getMetadata()
.getCustomValue("github:sha")
.getAsString();
- LOG.info(String.format("Rejects version: %s", commit));
+ LOG.info("Rejects version: {}", commit);
return commit.isEmpty() ? null : commit.trim();
}
diff --git a/src/main/java/anticope/rejects/arguments/ClientPosArgumentType.java b/src/main/java/anticope/rejects/arguments/ClientPosArgumentType.java
index 12a79e60..5ae460a2 100644
--- a/src/main/java/anticope/rejects/arguments/ClientPosArgumentType.java
+++ b/src/main/java/anticope/rejects/arguments/ClientPosArgumentType.java
@@ -13,7 +13,6 @@
import net.minecraft.server.command.CommandManager;
import net.minecraft.util.math.Vec3d;
-import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
diff --git a/src/main/java/anticope/rejects/arguments/EnumArgumentType.java b/src/main/java/anticope/rejects/arguments/EnumArgumentType.java
index 32b7f5da..b2821f58 100644
--- a/src/main/java/anticope/rejects/arguments/EnumArgumentType.java
+++ b/src/main/java/anticope/rejects/arguments/EnumArgumentType.java
@@ -24,6 +24,7 @@ public EnumArgumentType(T defaultValue) {
super();
try {
+ //noinspection unchecked
values = (T[]) defaultValue.getClass().getMethod("values").invoke(null);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
@@ -34,6 +35,7 @@ public static > EnumArgumentType enumArgument(T defaultValu
return new EnumArgumentType<>(defaultValue);
}
+ @SuppressWarnings("unchecked")
public static > T getEnum(CommandContext> context, String name, T defaultValue) {
return (T) context.getArgument(name, defaultValue.getClass());
}
diff --git a/src/main/java/anticope/rejects/commands/CenterCommand.java b/src/main/java/anticope/rejects/commands/CenterCommand.java
index 5ddf84f1..7ca7aff1 100644
--- a/src/main/java/anticope/rejects/commands/CenterCommand.java
+++ b/src/main/java/anticope/rejects/commands/CenterCommand.java
@@ -6,9 +6,6 @@
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.math.MathHelper;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class CenterCommand extends Command {
public CenterCommand() {
super("center", "Centers the player on a block.");
@@ -20,7 +17,7 @@ public void build(LiteralArgumentBuilder builder) {
double x = MathHelper.floor(mc.player.getX()) + 0.5;
double z = MathHelper.floor(mc.player.getZ()) + 0.5;
mc.player.setPosition(x, mc.player.getY(), z);
- mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround()));
+ mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround(), mc.player.horizontalCollision));
return SINGLE_SUCCESS;
}));
@@ -29,7 +26,7 @@ public void build(LiteralArgumentBuilder builder) {
double x = MathHelper.floor(mc.player.getX());
double z = MathHelper.floor(mc.player.getZ());
mc.player.setPosition(x, mc.player.getY(), z);
- mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround()));
+ mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround(), mc.player.horizontalCollision));
return SINGLE_SUCCESS;
}));
diff --git a/src/main/java/anticope/rejects/commands/ClearChatCommand.java b/src/main/java/anticope/rejects/commands/ClearChatCommand.java
index 94be30c6..a8d15b3e 100644
--- a/src/main/java/anticope/rejects/commands/ClearChatCommand.java
+++ b/src/main/java/anticope/rejects/commands/ClearChatCommand.java
@@ -4,9 +4,6 @@
import meteordevelopment.meteorclient.commands.Command;
import net.minecraft.command.CommandSource;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class ClearChatCommand extends Command {
public ClearChatCommand() {
super("clear-chat", "Clears your chat.", "clear", "cls");
diff --git a/src/main/java/anticope/rejects/commands/GhostCommand.java b/src/main/java/anticope/rejects/commands/GhostCommand.java
index 6b033d1a..b37b58f2 100644
--- a/src/main/java/anticope/rejects/commands/GhostCommand.java
+++ b/src/main/java/anticope/rejects/commands/GhostCommand.java
@@ -9,9 +9,6 @@
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class GhostCommand extends Command {
public GhostCommand() {
super("ghost", "Remove ghost blocks & bypass AntiXray", "aax", "anti-anti-xray");
diff --git a/src/main/java/anticope/rejects/commands/GiveCommand.java b/src/main/java/anticope/rejects/commands/GiveCommand.java
index 2f95af23..7c51ed3f 100644
--- a/src/main/java/anticope/rejects/commands/GiveCommand.java
+++ b/src/main/java/anticope/rejects/commands/GiveCommand.java
@@ -2,10 +2,15 @@
import anticope.rejects.arguments.EnumStringArgumentType;
import anticope.rejects.utils.GiveUtils;
+import com.mojang.authlib.GameProfile;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import meteordevelopment.meteorclient.commands.Command;
import net.minecraft.command.CommandSource;
+import net.minecraft.component.ComponentChanges;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.NbtComponent;
+import net.minecraft.component.type.ProfileComponent;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
@@ -18,8 +23,7 @@
import java.util.Collection;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
+import static anticope.rejects.utils.accounts.GetPlayerUUID.getUUID;
public class GiveCommand extends Command {
@@ -31,80 +35,98 @@ public GiveCommand() {
@Override
public void build(LiteralArgumentBuilder builder) {
+ // TODO : finish this
builder.then(literal("egg").executes(ctx -> {
ItemStack inHand = mc.player.getMainHandStack();
ItemStack item = new ItemStack(Items.STRIDER_SPAWN_EGG);
NbtCompound ct = new NbtCompound();
+
if (inHand.getItem() instanceof BlockItem) {
ct.putInt("Time", 1);
ct.putString("id", "minecraft:falling_block");
ct.put("BlockState", new NbtCompound());
ct.getCompound("BlockState").putString("Name", Registries.ITEM.getId(inHand.getItem()).toString());
- if (inHand.hasNbt() && inHand.getNbt().contains("BlockEntityTag")) {
- ct.put("TileEntityData", inHand.getNbt().getCompound("BlockEntityTag"));
- }
- NbtCompound t = new NbtCompound();
- t.put("EntityTag", ct);
- item.setNbt(t);
+
} else {
ct.putString("id", "minecraft:item");
- NbtCompound it = new NbtCompound();
- it.putString("id", Registries.ITEM.getId(inHand.getItem()).toString());
- it.putInt("Count", inHand.getCount());
- if (inHand.hasNbt()) {
- it.put("tag", inHand.getNbt());
- }
- ct.put("Item", it);
+ NbtCompound itemTag = new NbtCompound();
+ itemTag.putString("id", Registries.ITEM.getId(inHand.getItem()).toString());
+ itemTag.putInt("Count", inHand.getCount());
+
+ ct.put("Item", itemTag);
}
NbtCompound t = new NbtCompound();
t.put("EntityTag", ct);
- item.setNbt(t);
- item.setCustomName(inHand.getName());
+
+ var changes = ComponentChanges.builder()
+ .add(DataComponentTypes.CUSTOM_NAME, inHand.getName())
+ .add(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(t))
+ .build();
+
+ item.applyChanges(changes);
GiveUtils.giveItem(item);
return SINGLE_SUCCESS;
}));
+ //TODO: allow for custom cords to place oob, though optional args
builder.then(literal("holo").then(argument("message", StringArgumentType.greedyString()).executes(ctx -> {
String message = ctx.getArgument("message", String.class).replace("&", "\247");
- ItemStack stack = new ItemStack(Items.ARMOR_STAND);
+ ItemStack stack = new ItemStack(Items.STRIDER_SPAWN_EGG);
NbtCompound tag = new NbtCompound();
- NbtList NbtList = new NbtList();
- NbtList.add(NbtDouble.of(mc.player.getX()));
- NbtList.add(NbtDouble.of(mc.player.getY()));
- NbtList.add(NbtDouble.of(mc.player.getZ()));
+ NbtList pos = new NbtList();
+
+ pos.add(NbtDouble.of(mc.player.getX()));
+ pos.add(NbtDouble.of(mc.player.getY()));
+ pos.add(NbtDouble.of(mc.player.getZ()));
+
+ tag.putString("id", "minecraft:armor_stand");
+ tag.put("Pos", pos);
tag.putBoolean("Invisible", true);
tag.putBoolean("Invulnerable", true);
- tag.putBoolean("Interpret", true);
tag.putBoolean("NoGravity", true);
tag.putBoolean("CustomNameVisible", true);
- tag.putString("CustomName", Text.Serializer.toJson(Text.literal(message)));
- tag.put("Pos", NbtList);
- stack.setSubNbt("EntityTag", tag);
+
+ var changes = ComponentChanges.builder()
+ .add(DataComponentTypes.CUSTOM_NAME, Text.literal(message))
+ .add(DataComponentTypes.ENTITY_DATA, NbtComponent.of(tag))
+ .build();
+
+ stack.applyChanges(changes);
GiveUtils.giveItem(stack);
return SINGLE_SUCCESS;
})));
+ //TODO, make invisible through potion effect
builder.then(literal("bossbar").then(argument("message", StringArgumentType.greedyString()).executes(ctx -> {
String message = ctx.getArgument("message", String.class).replace("&", "\247");
ItemStack stack = new ItemStack(Items.BAT_SPAWN_EGG);
NbtCompound tag = new NbtCompound();
- tag.putString("CustomName", Text.Serializer.toJson(Text.literal(message)));
tag.putBoolean("NoAI", true);
tag.putBoolean("Silent", true);
tag.putBoolean("PersistenceRequired", true);
- tag.putBoolean("Invisible", true);
tag.put("id", NbtString.of("minecraft:wither"));
- stack.setSubNbt("EntityTag", tag);
+
+ var changes = ComponentChanges.builder()
+ .add(DataComponentTypes.CUSTOM_NAME, Text.literal(message))
+ .add(DataComponentTypes.ENTITY_DATA, NbtComponent.of(tag))
+ .build();
+ stack.applyChanges(changes);
+
GiveUtils.giveItem(stack);
return SINGLE_SUCCESS;
})));
+ // TODO : resolve textures, should be easy now that UUID is resolved
builder.then(literal("head").then(argument("owner", StringArgumentType.greedyString()).executes(ctx -> {
String playerName = ctx.getArgument("owner", String.class);
ItemStack itemStack = new ItemStack(Items.PLAYER_HEAD);
- NbtCompound tag = new NbtCompound();
- tag.putString("SkullOwner", playerName);
- itemStack.setNbt(tag);
+
+ var changes = ComponentChanges.builder()
+ .add(DataComponentTypes.PROFILE, new ProfileComponent(new GameProfile(getUUID(playerName), playerName)))
+ .build();
+
+ itemStack.applyChanges(changes);
+
GiveUtils.giveItem(itemStack);
return SINGLE_SUCCESS;
})));
diff --git a/src/main/java/anticope/rejects/commands/HeadsCommand.java b/src/main/java/anticope/rejects/commands/HeadsCommand.java
index 2101860c..7cc3f375 100644
--- a/src/main/java/anticope/rejects/commands/HeadsCommand.java
+++ b/src/main/java/anticope/rejects/commands/HeadsCommand.java
@@ -7,8 +7,6 @@
import meteordevelopment.meteorclient.utils.Utils;
import net.minecraft.command.CommandSource;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-
public class HeadsCommand extends Command {
public HeadsCommand() {
diff --git a/src/main/java/anticope/rejects/commands/KickCommand.java b/src/main/java/anticope/rejects/commands/KickCommand.java
index 7d55e520..6272eb2d 100644
--- a/src/main/java/anticope/rejects/commands/KickCommand.java
+++ b/src/main/java/anticope/rejects/commands/KickCommand.java
@@ -7,13 +7,10 @@
import net.minecraft.command.CommandSource;
import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
-import net.minecraft.network.packet.s2c.play.DisconnectS2CPacket;
+import net.minecraft.network.packet.s2c.common.DisconnectS2CPacket;
import net.minecraft.text.Text;
import org.apache.commons.lang3.SystemUtils;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class KickCommand extends Command {
public KickCommand() {
@@ -47,7 +44,7 @@ public void build(LiteralArgumentBuilder builder) {
return SINGLE_SUCCESS;
}));
builder.then(literal("pos").executes(ctx -> {
- mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, !mc.player.isOnGround()));
+ mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, !mc.player.isOnGround(), mc.player.horizontalCollision));
return SINGLE_SUCCESS;
}));
builder.then(literal("hurt").executes(ctx -> {
diff --git a/src/main/java/anticope/rejects/commands/LocateCommand.java b/src/main/java/anticope/rejects/commands/LocateCommand.java
index b1d131e2..0b1c1290 100644
--- a/src/main/java/anticope/rejects/commands/LocateCommand.java
+++ b/src/main/java/anticope/rejects/commands/LocateCommand.java
@@ -2,8 +2,12 @@
import anticope.rejects.arguments.EnumArgumentType;
import anticope.rejects.utils.WorldGenUtils;
+import anticope.rejects.utils.seeds.Seeds;
+
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
+import com.seedfinding.mccore.version.MCVersion;
+
import meteordevelopment.meteorclient.commands.Command;
import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
@@ -12,43 +16,79 @@
import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
-
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
+import cubitect.Cubiomes;
+import cubitect.Cubiomes.Pos;
public class LocateCommand extends Command {
- private final static DynamicCommandExceptionType NOT_FOUND = new DynamicCommandExceptionType(o -> {
- if (o instanceof WorldGenUtils.Feature) {
- return Text.literal(String.format(
- "%s not found.",
- Utils.nameToTitle(o.toString().replaceAll("_", "-")))
- );
- }
- return Text.literal("Not found.");
- });
-
- public LocateCommand() {
- super("locate", "Locates structures.", "loc");
- }
-
- @Override
- public void build(LiteralArgumentBuilder builder) {
- builder.then(literal("feature").then(argument("feature", EnumArgumentType.enumArgument(WorldGenUtils.Feature.stronghold)).executes(ctx -> {
- WorldGenUtils.Feature feature = EnumArgumentType.getEnum(ctx, "feature", WorldGenUtils.Feature.stronghold);
- BlockPos pos = WorldGenUtils.locateFeature(feature, mc.player.getBlockPos());
- if (pos != null) {
- MutableText text = Text.literal(String.format(
- "%s located at ",
- Utils.nameToTitle(feature.toString().replaceAll("_", "-"))
- ));
- Vec3d coords = new Vec3d(pos.getX(), pos.getY(), pos.getZ());
- text.append(ChatUtils.formatCoords(coords));
- text.append(".");
- info(text);
- return SINGLE_SUCCESS;
- }
- throw NOT_FOUND.create(feature);
- })));
- }
+ private final static DynamicCommandExceptionType NOT_FOUND = new DynamicCommandExceptionType(o -> {
+ if (o instanceof Cubiomes.StructureType) {
+ return Text.literal(String.format(
+ "%s not found.",
+ Utils.nameToTitle(o.toString().replaceAll("_", "-"))));
+ }
+ return Text.literal("Not found.");
+ });
+
+ public LocateCommand() {
+ super("locate", "Locates structures.", "loc");
+ }
+
+ @Override
+ public void build(LiteralArgumentBuilder builder) {
+ builder.then(literal("feature")
+ .then(argument("feature", EnumArgumentType.enumArgument(Cubiomes.StructureType.Village)).executes(ctx -> {
+ Cubiomes.StructureType feature = EnumArgumentType.getEnum(ctx, "feature", Cubiomes.StructureType.Village);
+ BlockPos playerPos = mc.player.getBlockPos();
+ long seed = Seeds.get().getSeed().seed;
+ MCVersion version = Seeds.get().getSeed().version;
+ Cubiomes.MCVersion cubiomesVersion = null;
+ if (version.isNewerOrEqualTo(MCVersion.v1_20)) {
+ cubiomesVersion = Cubiomes.MCVersion.MC_1_20;
+ } else if (version.isNewerOrEqualTo(MCVersion.v1_19)) {
+ switch (version) {
+ case v1_19:
+ case v1_19_1:
+ cubiomesVersion = Cubiomes.MCVersion.MC_1_19;
+ break;
+ case v1_19_2:
+ case v1_19_3:
+ case v1_19_4:
+ cubiomesVersion = Cubiomes.MCVersion.MC_1_19_2;
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " + version);
+ }
+ } else if (version.isNewerOrEqualTo(MCVersion.v1_18)) {
+ cubiomesVersion = Cubiomes.MCVersion.MC_1_18;
+ }
+ Pos pos = null;
+ if (cubiomesVersion != null) {
+ pos = Cubiomes.GetNearestStructure(feature, playerPos.getX(), playerPos.getZ(), seed,
+ cubiomesVersion);
+ } else {
+ BlockPos bpos = WorldGenUtils.locateFeature(feature, playerPos);
+ pos = new Pos();
+ pos.x = bpos.getX();
+ pos.z = bpos.getZ();
+
+ }
+ if (pos != null) {
+ // Calculate distance
+ int distance = (int) Math.hypot(pos.x - playerPos.getX(), pos.z - playerPos.getZ());
+ MutableText text = Text.literal(String.format(
+ "%s located at ",
+ Utils.nameToTitle(feature.toString().replaceAll("_", "-"))));
+ Vec3d coords = new Vec3d(pos.x, 0, pos.z);
+ text.append(ChatUtils.formatCoords(coords));
+ text.append(".");
+ if (distance > 0) {
+ text.append(String.format(" (%d blocks away)", distance));
+ }
+ info(text);
+ return SINGLE_SUCCESS;
+ }
+ throw NOT_FOUND.create(feature);
+ })));
+ }
}
diff --git a/src/main/java/anticope/rejects/commands/PanicCommand.java b/src/main/java/anticope/rejects/commands/PanicCommand.java
index a8025055..c2967505 100644
--- a/src/main/java/anticope/rejects/commands/PanicCommand.java
+++ b/src/main/java/anticope/rejects/commands/PanicCommand.java
@@ -8,8 +8,6 @@
import java.util.ArrayList;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-
public class PanicCommand extends Command {
public PanicCommand() {
super("panic", "Disables all modules.", "disable-all");
diff --git a/src/main/java/anticope/rejects/commands/ReconnectCommand.java b/src/main/java/anticope/rejects/commands/ReconnectCommand.java
index 121f7e0a..30fa33d0 100644
--- a/src/main/java/anticope/rejects/commands/ReconnectCommand.java
+++ b/src/main/java/anticope/rejects/commands/ReconnectCommand.java
@@ -2,16 +2,13 @@
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import meteordevelopment.meteorclient.commands.Command;
-import net.minecraft.client.gui.screen.ConnectScreen;
+import net.minecraft.client.gui.screen.multiplayer.ConnectScreen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.network.ServerAddress;
import net.minecraft.client.network.ServerInfo;
import net.minecraft.command.CommandSource;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class ReconnectCommand extends Command {
public ReconnectCommand() {
super("reconnect", "Reconnects server.");
@@ -24,7 +21,7 @@ public void build(LiteralArgumentBuilder builder) {
if (info != null) {
mc.world.disconnect();
ConnectScreen.connect(new MultiplayerScreen(new TitleScreen()), mc,
- ServerAddress.parse(info.address), info, false);
+ ServerAddress.parse(info.address), info, false, null);
}
return SINGLE_SUCCESS;
});
diff --git a/src/main/java/anticope/rejects/commands/SaveSkinCommand.java b/src/main/java/anticope/rejects/commands/SaveSkinCommand.java
index b220a5c6..b0ce77a0 100644
--- a/src/main/java/anticope/rejects/commands/SaveSkinCommand.java
+++ b/src/main/java/anticope/rejects/commands/SaveSkinCommand.java
@@ -23,8 +23,6 @@
import java.nio.charset.StandardCharsets;
import java.util.UUID;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-
public class SaveSkinCommand extends Command {
private final static SimpleCommandExceptionType IO_EXCEPTION = new SimpleCommandExceptionType(Text.literal("An exception occurred"));
diff --git a/src/main/java/anticope/rejects/commands/SeedCommand.java b/src/main/java/anticope/rejects/commands/SeedCommand.java
index 1e66390f..995b5b96 100644
--- a/src/main/java/anticope/rejects/commands/SeedCommand.java
+++ b/src/main/java/anticope/rejects/commands/SeedCommand.java
@@ -13,8 +13,6 @@
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-
public class SeedCommand extends Command {
private final static SimpleCommandExceptionType NO_SEED = new SimpleCommandExceptionType(Text.literal("No seed for current world saved."));
diff --git a/src/main/java/anticope/rejects/commands/ServerCommand.java b/src/main/java/anticope/rejects/commands/ServerCommand.java
index 67f51aa8..f783a7fd 100644
--- a/src/main/java/anticope/rejects/commands/ServerCommand.java
+++ b/src/main/java/anticope/rejects/commands/ServerCommand.java
@@ -20,9 +20,6 @@
import java.net.UnknownHostException;
import java.util.*;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
/*
Ported from Cornos
https://github.com/cornos/Cornos/blob/master/src/main/java/me/zeroX150/cornos/features/command/impl/Scan.java
diff --git a/src/main/java/anticope/rejects/commands/SetBlockCommand.java b/src/main/java/anticope/rejects/commands/SetBlockCommand.java
index 48aeb81e..b835a9cf 100644
--- a/src/main/java/anticope/rejects/commands/SetBlockCommand.java
+++ b/src/main/java/anticope/rejects/commands/SetBlockCommand.java
@@ -10,9 +10,6 @@
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class SetBlockCommand extends Command {
public SetBlockCommand() {
super("setblock", "Sets client side blocks", "sblk");
diff --git a/src/main/java/anticope/rejects/commands/SetVelocityCommand.java b/src/main/java/anticope/rejects/commands/SetVelocityCommand.java
index d96779cd..71b6d3b7 100644
--- a/src/main/java/anticope/rejects/commands/SetVelocityCommand.java
+++ b/src/main/java/anticope/rejects/commands/SetVelocityCommand.java
@@ -5,9 +5,6 @@
import meteordevelopment.meteorclient.commands.Command;
import net.minecraft.command.CommandSource;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class SetVelocityCommand extends Command {
public SetVelocityCommand() {
super("set-velocity", "Sets player velocity", "velocity", "vel");
diff --git a/src/main/java/anticope/rejects/commands/TeleportCommand.java b/src/main/java/anticope/rejects/commands/TeleportCommand.java
index d45f9c1e..3dbcd9fe 100644
--- a/src/main/java/anticope/rejects/commands/TeleportCommand.java
+++ b/src/main/java/anticope/rejects/commands/TeleportCommand.java
@@ -7,9 +7,6 @@
import net.minecraft.command.CommandSource;
import net.minecraft.util.math.Vec3d;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class TeleportCommand extends Command {
diff --git a/src/main/java/anticope/rejects/commands/TerrainExport.java b/src/main/java/anticope/rejects/commands/TerrainExport.java
index 3debfd83..2fdbf0a2 100644
--- a/src/main/java/anticope/rejects/commands/TerrainExport.java
+++ b/src/main/java/anticope/rejects/commands/TerrainExport.java
@@ -16,9 +16,6 @@
import java.io.IOException;
import java.nio.ByteBuffer;
-import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
public class TerrainExport extends Command {
private final static SimpleCommandExceptionType IO_EXCEPTION = new SimpleCommandExceptionType(Text.literal("An IOException occurred"));
diff --git a/src/main/java/anticope/rejects/gui/hud/RadarHud.java b/src/main/java/anticope/rejects/gui/hud/RadarHud.java
index 44d23f77..296722d3 100644
--- a/src/main/java/anticope/rejects/gui/hud/RadarHud.java
+++ b/src/main/java/anticope/rejects/gui/hud/RadarHud.java
@@ -116,7 +116,7 @@ public void render(HudRenderer renderer) {
double yPos = ((coords.getZ() - mc.player.getZ()) * scale.get() * zoom.get() + height / 2);
if (xPos < 0 || yPos < 0 || xPos > width - scale.get() || yPos > height - scale.get()) continue;
String icon = "*";
- if (letters.get() && waypoint.name.get().length() > 0)
+ if (letters.get() && !waypoint.name.get().isEmpty())
icon = waypoint.name.get().substring(0, 1);
renderer.text(icon, xPos + x, yPos + y, waypoint.color.get(), false);
}
diff --git a/src/main/java/anticope/rejects/gui/screens/HeadScreen.java b/src/main/java/anticope/rejects/gui/screens/HeadScreen.java
index f3c7e711..2208ad00 100644
--- a/src/main/java/anticope/rejects/gui/screens/HeadScreen.java
+++ b/src/main/java/anticope/rejects/gui/screens/HeadScreen.java
@@ -14,6 +14,8 @@
import meteordevelopment.meteorclient.utils.network.Http;
import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.NbtComponent;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
@@ -80,7 +82,7 @@ private void loadHeads() {
heads.add(createHeadStack(a.get("uuid"), a.get("value"), a.get("name")));
} catch (Exception e) { }
});
-
+
WTable t = theme.table();
for (ItemStack head : heads) {
t.add(theme.item(head));
@@ -118,11 +120,11 @@ private ItemStack createHeadStack(String uuid, String value, String name) {
properties.put("textures", textures);
skullOwner.put("Properties", properties);
tag.put("SkullOwner", skullOwner);
- head.setNbt(tag);
- head.setCustomName(Text.literal(name));
+ head.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(tag));
+ head.set(DataComponentTypes.CUSTOM_NAME, Text.literal(name));
return head;
}
-
+
@Override
public void initWidgets() {}
}
diff --git a/src/main/java/anticope/rejects/gui/screens/InteractionScreen.java b/src/main/java/anticope/rejects/gui/screens/InteractionScreen.java
index e56c4d5a..41cba2b5 100644
--- a/src/main/java/anticope/rejects/gui/screens/InteractionScreen.java
+++ b/src/main/java/anticope/rejects/gui/screens/InteractionScreen.java
@@ -15,15 +15,18 @@
import meteordevelopment.starscript.utils.Error;
import meteordevelopment.starscript.utils.StarscriptError;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
import net.minecraft.client.option.KeyBinding;
-import net.minecraft.client.render.GameRenderer;
+import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.util.InputUtil;
import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.component.DataComponentTypes;
import net.minecraft.entity.Entity;
+import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.Saddleable;
import net.minecraft.entity.mob.EndermanEntity;
import net.minecraft.entity.passive.AbstractHorseEntity;
@@ -36,6 +39,7 @@
import net.minecraft.text.Text;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
+import net.minecraft.util.PlayerInput;
import net.minecraft.util.math.MathHelper;
import org.joml.Vector2f;
import org.lwjgl.glfw.GLFW;
@@ -60,7 +64,7 @@ public class InteractionScreen extends Screen {
private final Map> functions;
private final Map msgs;
- private final Identifier GUI_ICONS_TEXTURE = new Identifier("textures/gui/icons.png");
+ private final Identifier GUI_ICONS_TEXTURE = Identifier.of("textures/gui/icons.png");
private final StaticListener shiftListener = new StaticListener();
@@ -91,30 +95,29 @@ public InteractionScreen(Entity entity, InteractionMenu module) {
closeScreen();
client.setScreen(new StatsScreen(e));
});
- if (entity instanceof PlayerEntity) {
- functions.put("Open Inventory", (Entity e) -> {
+ switch (entity) {
+ case PlayerEntity playerEntity -> functions.put("Open Inventory", (Entity e) -> {
closeScreen();
client.setScreen(new InventoryScreen((PlayerEntity) e));
});
- } else if (entity instanceof AbstractHorseEntity) {
- functions.put("Open Inventory", (Entity e) -> {
+ case AbstractHorseEntity abstractHorseEntity -> functions.put("Open Inventory", (Entity e) -> {
closeScreen();
if (client.player.isRiding()) {
- client.player.networkHandler.sendPacket(new PlayerInputC2SPacket(0, 0, false, true));
+// client.player.networkHandler.sendPacket(new PlayerInputC2SPacket(0, 0, false, true));
+ client.player.networkHandler.sendPacket(new PlayerInputC2SPacket(new PlayerInput(false, false, false, false, false, true, false)));
+
}
client.player.networkHandler.sendPacket(PlayerInteractEntityC2SPacket.interact(entity, true, Hand.MAIN_HAND));
client.player.setSneaking(false);
});
- } else if (entity instanceof StorageMinecartEntity) {
- functions.put("Open Inventory", (Entity e) -> {
+ case StorageMinecartEntity storageMinecartEntity -> functions.put("Open Inventory", (Entity e) -> {
closeScreen();
client.player.networkHandler.sendPacket(PlayerInteractEntityC2SPacket.interact(entity, true, Hand.MAIN_HAND));
});
- } else {
- functions.put("Open Inventory", (Entity e) -> {
+ case null, default -> functions.put("Open Inventory", (Entity e) -> {
closeScreen();
ItemStack container = new ItemStack(Items.CHEST);
- container.setCustomName(e.getName());
+ container.set(DataComponentTypes.CUSTOM_NAME, e.getName());
client.setScreen(new PeekScreen(container, getInventory(e)));
});
}
@@ -184,24 +187,27 @@ private ItemStack[] getInventory(Entity e) {
} catch (NullPointerException ex) {
}
}
- if (Saddleable.class.isInstance(e)) {
+ if (e instanceof Saddleable) {
if (((Saddleable) e).isSaddled()) {
stack[index[0]] = Items.SADDLE.getDefaultStack();
index[0]++;
}
}
- e.getHandItems().forEach(itemStack -> {
+ LivingEntity a = (LivingEntity) e;
+ a.getHandItems().forEach(itemStack -> {
if (itemStack != null) {
stack[index[0]] = itemStack;
index[0]++;
}
});
- e.getArmorItems().forEach(itemStack -> {
+
+ a.getArmorItems().forEach(itemStack -> {
if (itemStack != null) {
stack[index[0]] = itemStack;
index[0]++;
}
});
+
for (int i = index[0]; i < 27; i++) stack[i] = Items.AIR.getDefaultStack();
return stack;
}
@@ -246,12 +252,12 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) {
MatrixStack matrix = context.getMatrices();
// Fake crosshair stuff
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
- RenderSystem.setShader(GameRenderer::getPositionTexProgram);
+ RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX);
RenderSystem.enableBlend();
RenderSystem.blendFuncSeparate(GlStateManager.SrcFactor.ONE_MINUS_DST_COLOR,
GlStateManager.DstFactor.ONE_MINUS_SRC_COLOR, GlStateManager.SrcFactor.ONE,
GlStateManager.DstFactor.ZERO);
- context.drawTexture(GUI_ICONS_TEXTURE, crosshairX - 8, crosshairY - 8, 0, 0, 15, 15);
+ context.drawTexture(RenderLayer::getGuiTextured, GUI_ICONS_TEXTURE, crosshairX - 8, crosshairY - 8, 0, 0, 15, 15, 256, 256);
drawDots(context, (int) (Math.min(height, width) / 2 * 0.75), mouseX, mouseY);
matrix.scale(2f, 2f, 1f);
@@ -285,7 +291,7 @@ private Vector2f getMouseVecs(int mouseX, int mouseY) {
private void drawDots(DrawContext context, int radius, int mouseX, int mouseY) {
ArrayList pointList = new ArrayList();
- String cache[] = new String[functions.size()];
+ String[] cache = new String[functions.size()];
double lowestDistance = Double.MAX_VALUE;
int i = 0;
@@ -363,4 +369,4 @@ private void onKey(KeyEvent event) {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/anticope/rejects/gui/screens/StatsScreen.java b/src/main/java/anticope/rejects/gui/screens/StatsScreen.java
index 57e846eb..d5c8deb9 100644
--- a/src/main/java/anticope/rejects/gui/screens/StatsScreen.java
+++ b/src/main/java/anticope/rejects/gui/screens/StatsScreen.java
@@ -10,6 +10,7 @@
import meteordevelopment.orbit.EventHandler;
import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.events.world.TickEvent;
+import meteordevelopment.meteorclient.utils.world.TickRate;
import meteordevelopment.meteorclient.gui.GuiTheme;
import meteordevelopment.meteorclient.gui.GuiThemes;
import meteordevelopment.meteorclient.gui.WindowScreen;
@@ -43,26 +44,27 @@ private void updateData() {
if (entity instanceof LivingEntity liv) {
add(theme.label(String.format("Health: %.2f/%.2f", liv.getHealth(), liv.getMaxHealth())));
add(theme.label(String.format("Armor: %d/20", liv.getArmor())));
-
+
WSection effectList = add(theme.section("Status Effects", effectListExpanded)).expandX().widget();
effectList.action = () -> effectListExpanded = effectList.isExpanded();
liv.getActiveStatusEffects().forEach((effect, instance) -> {
- String status = lang.get(effect.getTranslationKey());
+ String status = lang.get(effect.value().getTranslationKey());
+ float tps = TickRate.INSTANCE.getTickRate();
if (instance.getAmplifier() != 0) {
- status += (String.format(" %d (%s)", instance.getAmplifier()+1, StatusEffectUtil.getDurationText(instance, 1)));
+ status += (String.format(" %d (%s)", instance.getAmplifier()+1, StatusEffectUtil.getDurationText(instance, 1, tps)));
} else {
- status += (String.format(" (%s)", StatusEffectUtil.getDurationText(instance, 1)));
+ status += (String.format(" (%s)", StatusEffectUtil.getDurationText(instance, 1, tps)));
}
effectList.add(theme.label(status)).expandX();
});
if (liv.getActiveStatusEffects().isEmpty()) {
effectList.add(theme.label("No effects")).expandX();
}
-
+
WSection attribList = add(theme.section("Attributes", attribListExpanded)).expandX().widget();
attribList.action = () -> attribListExpanded = attribList.isExpanded();
liv.getAttributes().getTracked().forEach((attrib) -> attribList.add(theme.label(String.format("%s: %.2f",
- lang.get(attrib.getAttribute().getTranslationKey()),
+ lang.get(attrib.getAttribute().value().getTranslationKey()),
attrib.getValue()
))).expandX());
}
@@ -71,7 +73,7 @@ private void updateData() {
dimension.add(theme.label(String.format("Position: %.2f, %.2f, %.2f", entity.getX(), entity.getY(), entity.getZ()))).expandX();
dimension.add(theme.label(String.format("Yaw: %.2f, Pitch: %.2f", entity.getYaw(), entity.getPitch()))).expandX();
Box box = entity.getBoundingBox();
- dimension.add(theme.label(String.format("Bounding Box: %.2f, %.2f, %.2f",
+ dimension.add(theme.label(String.format("Bounding Box: %.2f, %.2f, %.2f",
box.maxX-box.minX, box.maxY-box.minY, box.maxZ-box.minZ
))).expandX();
}
@@ -80,7 +82,7 @@ private void updateData() {
private void onTick(TickEvent.Post event) {
updateData();
}
-
+
@Override
public void initWidgets() {}
}
diff --git a/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java b/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java
index 568fd2dc..aeeddade 100644
--- a/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java
+++ b/src/main/java/anticope/rejects/gui/servers/LegacyServerFinderScreen.java
@@ -108,7 +108,7 @@ private void findServers() {
updatePingers(pingers);
}
}
- while (pingers.size() > 0) {
+ while (!pingers.isEmpty()) {
if (state == ServerFinderState.CANCELLED)
return;
@@ -156,7 +156,7 @@ private void updatePingers(ArrayList pingers) {
if (!isServerInList(pingers.get(i).getServerIP())) {
multiplayerScreen.getServerList()
.add(new ServerInfo("Server discovery " + working,
- pingers.get(i).getServerIP(), false), false);
+ pingers.get(i).getServerIP(), ServerInfo.ServerType.OTHER), false);
multiplayerScreen.getServerList().saveFile();
((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget()
.setSelected(null);
diff --git a/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java b/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java
index af96dcf1..26b8ac26 100644
--- a/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java
+++ b/src/main/java/anticope/rejects/gui/servers/ServerFinderScreen.java
@@ -136,7 +136,7 @@ private void parseVersionFilters() {
versionFilters.clear();
for (String version : versions) {
String trimmed = version.trim();
- if (trimmed.length() > 0)
+ if (!trimmed.isEmpty())
versionFilters.add(version.trim());
}
}
@@ -177,7 +177,7 @@ private void findServers() {
private boolean pingNewIP() {
synchronized (serverFinderLock) {
- if (ipsToPing.size() > 0) {
+ if (!ipsToPing.isEmpty()) {
String ip = ipsToPing.pop();
ServerPinger pinger = new ServerPinger(scanPortsBox.checked, searchNumber);
pinger.addServerFinderDoneListener(this);
@@ -241,7 +241,7 @@ public void onServerDone(ServerPinger pinger) {
if (!isServerInList(pinger.getServerIP()) && filterPass(pinger.getServerInfo())) {
synchronized (serverFinderLock) {
working++;
- multiplayerScreen.getServerList().add(new ServerInfo("Server discovery #" + working, pinger.getServerIP(), false), false);
+ multiplayerScreen.getServerList().add(new ServerInfo("Server discovery #" + working, pinger.getServerIP(), ServerInfo.ServerType.OTHER), false);
multiplayerScreen.getServerList().saveFile();
((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setSelected(null);
((MultiplayerScreenAccessor) multiplayerScreen).getServerListWidget().setServers(multiplayerScreen.getServerList());
diff --git a/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java b/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java
index bda7b3cc..a7ff64e1 100644
--- a/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java
+++ b/src/main/java/anticope/rejects/gui/servers/ServerManagerScreen.java
@@ -120,7 +120,7 @@ public void initWidgets() {
for (ServerInfo server : servers) presentAddresses.add(server.address);
for (String addr : MinecraftClient.getInstance().keyboard.getClipboard().split("[\r\n]+")) {
if (presentAddresses.add(addr = addr.split(" ")[0])) {
- servers.add(new ServerInfo("Server discovery #" + presentAddresses.size(), addr, false));
+ servers.add(new ServerInfo("Server discovery #" + presentAddresses.size(), addr, ServerInfo.ServerType.OTHER));
newIPs++;
}
}
diff --git a/src/main/java/anticope/rejects/gui/themes/rounded/widgets/pressable/WMeteorCheckbox.java b/src/main/java/anticope/rejects/gui/themes/rounded/widgets/pressable/WMeteorCheckbox.java
index e0e47f88..56feffbf 100644
--- a/src/main/java/anticope/rejects/gui/themes/rounded/widgets/pressable/WMeteorCheckbox.java
+++ b/src/main/java/anticope/rejects/gui/themes/rounded/widgets/pressable/WMeteorCheckbox.java
@@ -31,7 +31,7 @@ protected void onRender(GuiRenderer renderer, double mouseX, double mouseY, doub
if (animProgress > 0) {
double cs = (width - theme.scale(2)) / 1.75 * animProgress;
- GuiUtils.quadRounded(renderer, x + (width - cs) / 2, y + (height - cs) / 2, cs, cs, theme.checkboxColor.get(), ((MeteorRoundedGuiTheme)theme).roundAmount());
+ GuiUtils.quadRounded(renderer, x + (width - cs) / 2, y + (height - cs) / 2, cs, cs, theme.checkboxColor.get(), theme.roundAmount());
}
}
}
diff --git a/src/main/java/anticope/rejects/mixin/ClientCommonNetwokHandlerMixin.java b/src/main/java/anticope/rejects/mixin/ClientCommonNetwokHandlerMixin.java
new file mode 100644
index 00000000..8bb97073
--- /dev/null
+++ b/src/main/java/anticope/rejects/mixin/ClientCommonNetwokHandlerMixin.java
@@ -0,0 +1,26 @@
+package anticope.rejects.mixin;
+
+import anticope.rejects.modules.SilentDisconnect;
+import meteordevelopment.meteorclient.systems.modules.Modules;
+import meteordevelopment.meteorclient.utils.player.ChatUtils;
+import net.minecraft.client.network.ClientCommonNetworkHandler;
+import net.minecraft.network.DisconnectionInfo;
+import net.minecraft.text.Text;
+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;
+
+import static meteordevelopment.meteorclient.MeteorClient.mc;
+
+@Mixin(ClientCommonNetworkHandler.class)
+public class ClientCommonNetwokHandlerMixin {
+ @Inject(method = "onDisconnected", at = @At("HEAD"), cancellable = true)
+ private void onDisconnected(DisconnectionInfo info, CallbackInfo ci) {
+ if (Modules.get().isActive(SilentDisconnect.class) && mc.world != null && mc.player != null) {
+ ChatUtils.info(Text.translatable("disconnect.lost").getString() + ":");
+ ChatUtils.sendMsg(info.reason());
+ ci.cancel();
+ }
+ }
+}
diff --git a/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java
index 5073e642..725d5d1e 100644
--- a/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/anticope/rejects/mixin/ClientPlayNetworkHandlerMixin.java
@@ -1,20 +1,14 @@
package anticope.rejects.mixin;
import anticope.rejects.events.PlayerRespawnEvent;
-import anticope.rejects.modules.SilentDisconnect;
import meteordevelopment.meteorclient.MeteorClient;
-import meteordevelopment.meteorclient.systems.modules.Modules;
-import meteordevelopment.meteorclient.utils.player.ChatUtils;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.packet.s2c.play.PlayerRespawnS2CPacket;
-import net.minecraft.text.Text;
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;
-import static meteordevelopment.meteorclient.MeteorClient.mc;
-
@Mixin(ClientPlayNetworkHandler.class)
public class ClientPlayNetworkHandlerMixin {
@@ -23,13 +17,4 @@ public class ClientPlayNetworkHandlerMixin {
public void onPlayerRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) {
MeteorClient.EVENT_BUS.post(PlayerRespawnEvent.get());
}
-
- @Inject(method = "onDisconnected", at = @At("HEAD"), cancellable = true)
- private void onDisconnected(Text reason, CallbackInfo info) {
- if (Modules.get().isActive(SilentDisconnect.class) && mc.world != null && mc.player != null) {
- ChatUtils.info(Text.translatable("disconnect.lost").getString() + ":");
- ChatUtils.sendMsg(reason);
- info.cancel();
- }
- }
}
diff --git a/src/main/java/anticope/rejects/mixin/CommandSuggestorMixin.java b/src/main/java/anticope/rejects/mixin/CommandSuggestorMixin.java
index c9aee4ed..934e62d1 100644
--- a/src/main/java/anticope/rejects/mixin/CommandSuggestorMixin.java
+++ b/src/main/java/anticope/rejects/mixin/CommandSuggestorMixin.java
@@ -5,7 +5,6 @@
import meteordevelopment.meteorclient.systems.modules.render.NoRender;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ChatInputSuggestor;
-import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
diff --git a/src/main/java/anticope/rejects/mixin/CountPlacementModifierAccessor.java b/src/main/java/anticope/rejects/mixin/CountPlacementModifierAccessor.java
new file mode 100644
index 00000000..02cb6d46
--- /dev/null
+++ b/src/main/java/anticope/rejects/mixin/CountPlacementModifierAccessor.java
@@ -0,0 +1,12 @@
+package anticope.rejects.mixin;
+
+import net.minecraft.util.math.intprovider.IntProvider;
+import net.minecraft.world.gen.placementmodifier.CountPlacementModifier;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(CountPlacementModifier.class)
+public interface CountPlacementModifierAccessor {
+ @Accessor
+ IntProvider getCount();
+}
diff --git a/src/main/java/anticope/rejects/mixin/GameRendererMixin.java b/src/main/java/anticope/rejects/mixin/GameRendererMixin.java
index 97cb76e4..21b541f1 100644
--- a/src/main/java/anticope/rejects/mixin/GameRendererMixin.java
+++ b/src/main/java/anticope/rejects/mixin/GameRendererMixin.java
@@ -4,6 +4,8 @@
import meteordevelopment.meteorclient.systems.modules.Modules;
import net.minecraft.client.gl.PostEffectProcessor;
+import net.minecraft.client.render.RenderTickCounter;
+import net.minecraft.client.util.Pool;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -17,16 +19,18 @@
@Mixin(GameRenderer.class)
public class GameRendererMixin {
@Shadow @Final MinecraftClient client;
+ @Shadow @Final
+ Pool pool;
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawEntityOutlinesFramebuffer()V", ordinal = 0))
- private void renderShader(float tickDelta, long startTime, boolean tick, CallbackInfo ci) {
+ private void renderShader(RenderTickCounter tickCounter, boolean tick, CallbackInfo ci) {
Rendering renderingModule = Modules.get().get(Rendering.class);
if (renderingModule == null) return;
PostEffectProcessor shader = renderingModule.getShaderEffect();
if (shader != null) {
- shader.setupDimensions(client.getWindow().getFramebufferWidth(), client.getWindow().getFramebufferHeight());
- shader.render(tickDelta);
+// shader.setupDimensions(client.getWindow().getFramebufferWidth(), client.getWindow().getFramebufferHeight());
+ shader.render(this.client.getFramebuffer(), this.pool);
}
}
}
diff --git a/src/main/java/anticope/rejects/mixin/HeightContextMixin.java b/src/main/java/anticope/rejects/mixin/HeightContextMixin.java
new file mode 100644
index 00000000..18a50726
--- /dev/null
+++ b/src/main/java/anticope/rejects/mixin/HeightContextMixin.java
@@ -0,0 +1,22 @@
+package anticope.rejects.mixin;
+
+import net.minecraft.world.gen.HeightContext;
+import net.minecraft.world.gen.chunk.ChunkGenerator;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+@Mixin(HeightContext.class)
+public abstract class HeightContextMixin {
+
+ @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/gen/chunk/ChunkGenerator;getMinimumY()I"))
+ private int onMinY(ChunkGenerator instance) {
+ return instance == null ? -9999999 : instance.getMinimumY();
+ }
+
+
+ @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/gen/chunk/ChunkGenerator;getWorldHeight()I"))
+ private int onHeight(ChunkGenerator instance) {
+ return instance == null ? 100000000 : instance.getWorldHeight();
+ }
+}
diff --git a/src/main/java/anticope/rejects/mixin/HeightRangePlacementModifierAccessor.java b/src/main/java/anticope/rejects/mixin/HeightRangePlacementModifierAccessor.java
new file mode 100644
index 00000000..fe261f7c
--- /dev/null
+++ b/src/main/java/anticope/rejects/mixin/HeightRangePlacementModifierAccessor.java
@@ -0,0 +1,13 @@
+package anticope.rejects.mixin;
+
+import net.minecraft.world.gen.heightprovider.HeightProvider;
+import net.minecraft.world.gen.placementmodifier.HeightRangePlacementModifier;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(HeightRangePlacementModifier.class)
+public interface HeightRangePlacementModifierAccessor {
+
+ @Accessor
+ HeightProvider getHeight();
+}
diff --git a/src/main/java/anticope/rejects/mixin/LivingEntityRendererMixin.java b/src/main/java/anticope/rejects/mixin/LivingEntityRendererMixin.java
index 5ece6ba0..ff6b00f7 100644
--- a/src/main/java/anticope/rejects/mixin/LivingEntityRendererMixin.java
+++ b/src/main/java/anticope/rejects/mixin/LivingEntityRendererMixin.java
@@ -5,9 +5,11 @@
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.render.entity.LivingEntityRenderer;
+import net.minecraft.client.render.entity.model.EntityModel;
+import net.minecraft.client.render.entity.state.LivingEntityRenderState;
+import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity;
-import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.RotationAxis;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@@ -16,14 +18,14 @@
@Environment(EnvType.CLIENT)
@Mixin(LivingEntityRenderer.class)
-public class LivingEntityRendererMixin {
+public class LivingEntityRendererMixin> {
@Inject(method = "setupTransforms", at = @At(value = "TAIL"))
- private void dinnerboneEntities(LivingEntity entity, MatrixStack matrices, float _animationProgress, float _bodyYaw, float _tickDelta, CallbackInfo _info) {
+ private void dinnerboneEntities(S state, MatrixStack matrices, float animationProgress, float bodyYaw, CallbackInfo ci) {
Rendering renderingModule = Modules.get().get(Rendering.class);
if (renderingModule == null) return;
- if ((!(entity instanceof PlayerEntity)) && renderingModule.dinnerboneEnabled()) {
- matrices.translate(0.0D, entity.getHeight() + 0.1F, 0.0D);
+ if ((!(state instanceof PlayerEntityRenderState)) && renderingModule.dinnerboneEnabled()) {
+ matrices.translate(0.0D, state.height + 0.1F, 0.0D);
matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(180.0F));
}
}
diff --git a/src/main/java/anticope/rejects/mixin/RarityFilterPlacementModifierAccessor.java b/src/main/java/anticope/rejects/mixin/RarityFilterPlacementModifierAccessor.java
new file mode 100644
index 00000000..43537958
--- /dev/null
+++ b/src/main/java/anticope/rejects/mixin/RarityFilterPlacementModifierAccessor.java
@@ -0,0 +1,11 @@
+package anticope.rejects.mixin;
+
+import net.minecraft.world.gen.placementmodifier.RarityFilterPlacementModifier;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(RarityFilterPlacementModifier.class)
+public interface RarityFilterPlacementModifierAccessor {
+ @Accessor
+ int getChance();
+}
diff --git a/src/main/java/anticope/rejects/mixin/VehicleMoveC2SPacketAccessor.java b/src/main/java/anticope/rejects/mixin/VehicleMoveC2SPacketAccessor.java
index 0d3348f3..fff39c12 100644
--- a/src/main/java/anticope/rejects/mixin/VehicleMoveC2SPacketAccessor.java
+++ b/src/main/java/anticope/rejects/mixin/VehicleMoveC2SPacketAccessor.java
@@ -1,17 +1,18 @@
package anticope.rejects.mixin;
-import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
+import net.minecraft.network.packet.c2s.play.VehicleMoveC2SPacket;
+import net.minecraft.util.math.Vec3d;
import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.gen.Accessor;
+import org.spongepowered.asm.mixin.gen.Invoker;
-@Mixin(PlayerMoveC2SPacket.class)
+@Mixin(VehicleMoveC2SPacket.class)
public interface VehicleMoveC2SPacketAccessor {
- @Mutable
- @Accessor("x")
- void setX(double x);
+ @Accessor("position")
+ Vec3d getPosition();
- @Mutable
- @Accessor("z")
- void setZ(double z);
+ @Invoker("")
+ static VehicleMoveC2SPacket create(Vec3d position, float yaw, float pitch, boolean onGround) {
+ throw new AssertionError();
+ }
}
diff --git a/src/main/java/anticope/rejects/mixin/meteor/ModuleMixin.java b/src/main/java/anticope/rejects/mixin/meteor/ModuleMixin.java
index 2cc1eb41..6f90acfa 100644
--- a/src/main/java/anticope/rejects/mixin/meteor/ModuleMixin.java
+++ b/src/main/java/anticope/rejects/mixin/meteor/ModuleMixin.java
@@ -17,9 +17,9 @@ public class ModuleMixin {
@Mutable @Shadow public String name;
@Mutable @Shadow public String title;
-
- @Inject(method = "", at = @At("TAIL"))
- private void onInit(Category category, String name, String description, CallbackInfo info) {
+
+ @Inject(method = "*", at = @At("TAIL"))
+ private void onInit(Category category, String name, String description, String[] aliases, CallbackInfo info) {
if (RejectsConfig.get().duplicateModuleNames) {
this.name = RejectsUtils.getModuleName(name);
this.title = Utils.nameToTitle(this.name);
diff --git a/src/main/java/anticope/rejects/modules/AntiBot.java b/src/main/java/anticope/rejects/modules/AntiBot.java
index 4c28345b..b9c15788 100644
--- a/src/main/java/anticope/rejects/modules/AntiBot.java
+++ b/src/main/java/anticope/rejects/modules/AntiBot.java
@@ -66,7 +66,7 @@ public AntiBot() {
@EventHandler
public void onTick(TickEvent.Post tickEvent) {
for (Entity entity : mc.world.getEntities()) {
- if (entity == null || !(entity instanceof PlayerEntity playerEntity)) continue;
+ if (!(entity instanceof PlayerEntity playerEntity)) continue;
if (removeInvisible.get() && !entity.isInvisible()) continue;
if (isBot(playerEntity)) entity.remove(Entity.RemovalReason.DISCARDED);
diff --git a/src/main/java/anticope/rejects/modules/AntiCrash.java b/src/main/java/anticope/rejects/modules/AntiCrash.java
index 166ea913..f3c049cf 100644
--- a/src/main/java/anticope/rejects/modules/AntiCrash.java
+++ b/src/main/java/anticope/rejects/modules/AntiCrash.java
@@ -11,6 +11,7 @@
import net.minecraft.network.packet.s2c.play.ExplosionS2CPacket;
import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
+import net.minecraft.util.math.Vec3d;
public class AntiCrash extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
@@ -29,22 +30,25 @@ public AntiCrash() {
@EventHandler
private void onPacketReceive(PacketEvent.Receive event) {
if (event.packet instanceof ExplosionS2CPacket packet) {
- if (/* outside of world */ packet.getX() > 30_000_000 || packet.getY() > 30_000_000 || packet.getZ() > 30_000_000 || packet.getX() < -30_000_000 || packet.getY() < -30_000_000 || packet.getZ() < -30_000_000 ||
- // power too high
- packet.getRadius() > 1000 ||
- // too many blocks
- packet.getAffectedBlocks().size() > 100_000 ||
+ Vec3d explodePos = packet.center();
+ // TODO: 1.21.3
+ Vec3d playerKnockback = new Vec3d(0, 0, 0);
+ if(packet.playerKnockback().isPresent()) {
+ playerKnockback = packet.playerKnockback().get();
+ }
+ if (/* outside of world */ explodePos.getX() > 30_000_000 || explodePos.getY() > 30_000_000 || explodePos.getZ() > 30_000_000 || explodePos.getX() < -30_000_000 || explodePos.getY() < -30_000_000 || explodePos.getZ() < -30_000_000 ||
// too much knockback
- packet.getPlayerVelocityX() > 30_000_000 || packet.getPlayerVelocityY() > 30_000_000 || packet.getPlayerVelocityZ() > 30_000_000
+ playerKnockback.x > 30_000_000 || playerKnockback.y > 30_000_000 || playerKnockback.z > 30_000_000
// knockback can be negative?
- || packet.getPlayerVelocityX() < -30_000_000 || packet.getPlayerVelocityY() < -30_000_000 || packet.getPlayerVelocityZ() < -30_000_000
+ || playerKnockback.x < -30_000_000 || playerKnockback.y < -30_000_000 || playerKnockback.z < -30_000_000
) cancel(event);
} else if (event.packet instanceof ParticleS2CPacket packet) {
// too many particles
if (packet.getCount() > 100_000) cancel(event);
} else if (event.packet instanceof PlayerPositionLookS2CPacket packet) {
+ Vec3d playerPos = packet.change().position();
// out of world movement
- if (packet.getX() > 30_000_000 || packet.getY() > 30_000_000 || packet.getZ() > 30_000_000 || packet.getX() < -30_000_000 || packet.getY() < -30_000_000 || packet.getZ() < -30_000_000)
+ if (playerPos.x > 30_000_000 || playerPos.y > 30_000_000 || playerPos.z > 30_000_000 || playerPos.x < -30_000_000 || playerPos.y < -30_000_000 || playerPos.z < -30_000_000)
cancel(event);
} else if (event.packet instanceof EntityVelocityUpdateS2CPacket packet) {
// velocity
diff --git a/src/main/java/anticope/rejects/modules/AntiVanish.java b/src/main/java/anticope/rejects/modules/AntiVanish.java
index e3af5566..aa6e84ae 100644
--- a/src/main/java/anticope/rejects/modules/AntiVanish.java
+++ b/src/main/java/anticope/rejects/modules/AntiVanish.java
@@ -75,7 +75,7 @@ public WWidget getWidget(GuiTheme theme) {
@EventHandler
private void onPacket(PacketEvent.Receive event) {
if (mode.get() == Mode.RealJoinMessage && event.packet instanceof CommandSuggestionsS2CPacket packet) {
- if (completionIDs.contains(packet.getCompletionId())) {
+ if (completionIDs.contains(packet.id())) {
var lastUsernames = completionPlayerCache.stream().toList();
completionPlayerCache = packet.getSuggestions().getList().stream()
@@ -88,6 +88,8 @@ private void onPacket(PacketEvent.Receive event) {
for (String playerName : completionPlayerCache) {
if (Objects.equals(playerName, mc.player.getName().getString())) continue;
+ if (playerName.contains(" ")) continue;
+ if (playerName.length() < 3 || playerName.length() > 16) continue;
if (joinedOrQuit.test(playerName)) {
info("Player joined: " + playerName);
}
@@ -95,12 +97,14 @@ private void onPacket(PacketEvent.Receive event) {
for (String playerName : lastUsernames) {
if (Objects.equals(playerName, mc.player.getName().getString())) continue;
+ if (playerName.contains(" ")) continue;
+ if (playerName.length() < 3 || playerName.length() > 16) continue;
if (joinedOrQuit.test(playerName)) {
info("Player left: " + playerName);
}
}
- completionIDs.remove(Integer.valueOf(packet.getCompletionId()));
+ completionIDs.remove(Integer.valueOf(packet.id()));
event.cancel();
}
}
@@ -124,6 +128,8 @@ private void onTick(TickEvent.Post event) {
for (UUID uuid : oldPlayers.keySet()) {
if (playerCache.containsKey(uuid)) continue;
String name = oldPlayers.get(uuid);
+ if (name.contains(" ")) continue;
+ if (name.length() < 3 || name.length() > 16) continue;
if (messageCache.stream().noneMatch(s -> s.contains(name))) {
warning(name + " has gone into vanish.");
}
@@ -143,4 +149,4 @@ public enum Mode {
LeaveMessage,
RealJoinMessage//https://github.com/xtrm-en/meteor-antistaff/blob/main/src/main/java/me/xtrm/meteorclient/antistaff/modules/AntiStaff.java
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/anticope/rejects/modules/ArrowDmg.java b/src/main/java/anticope/rejects/modules/ArrowDmg.java
index 02c8488f..95587087 100644
--- a/src/main/java/anticope/rejects/modules/ArrowDmg.java
+++ b/src/main/java/anticope/rejects/modules/ArrowDmg.java
@@ -54,9 +54,9 @@ private void onStopUsingItem(StopUsingItemEvent event) {
for (int i = 0; i < packets.get() / 2; i++) {
p.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x,
- y - 1e-10, z, true));
+ y - 1e-10, z, true, mc.player.horizontalCollision));
p.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x,
- y + 1e-10, z, false));
+ y + 1e-10, z, false, mc.player.horizontalCollision));
}
}
diff --git a/src/main/java/anticope/rejects/modules/AutoBedTrap.java b/src/main/java/anticope/rejects/modules/AutoBedTrap.java
index 5aa08cd2..b5d1db16 100644
--- a/src/main/java/anticope/rejects/modules/AutoBedTrap.java
+++ b/src/main/java/anticope/rejects/modules/AutoBedTrap.java
@@ -124,7 +124,7 @@ public boolean placeTickAround(BlockPos block) {
if (cap >= bpt.get()) {
return true;
}
- };
+ }
}
cap = 0;
return true;
diff --git a/src/main/java/anticope/rejects/modules/AutoCraft.java b/src/main/java/anticope/rejects/modules/AutoCraft.java
index a5a17810..d19993b0 100644
--- a/src/main/java/anticope/rejects/modules/AutoCraft.java
+++ b/src/main/java/anticope/rejects/modules/AutoCraft.java
@@ -7,10 +7,14 @@
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module;
+import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.gui.screen.recipebook.RecipeResultCollection;
import net.minecraft.item.Item;
-import net.minecraft.recipe.Recipe;
+import net.minecraft.item.ItemStack;
+import net.minecraft.recipe.RecipeDisplayEntry;
+import net.minecraft.recipe.display.RecipeDisplay;
+import net.minecraft.recipe.display.SlotDisplayContexts;
import net.minecraft.screen.CraftingScreenHandler;
import net.minecraft.screen.slot.SlotActionType;
@@ -24,7 +28,7 @@ public class AutoCraft extends Module {
private final Setting> items = sgGeneral.add(new ItemListSetting.Builder()
.name("items")
.description("Items you want to get crafted.")
- .defaultValue(Arrays.asList())
+ .defaultValue(List.of())
.build()
);
@@ -55,11 +59,11 @@ public AutoCraft() {
@EventHandler
private void onTick(TickEvent.Post event) {
- if (mc.interactionManager == null) return;
+ if (!Utils.canUpdate() || mc.interactionManager == null) return;
+
if (items.get().isEmpty()) return;
if (!(mc.player.currentScreenHandler instanceof CraftingScreenHandler)) return;
-
if (antiDesync.get())
mc.player.getInventory().updateItems();
@@ -70,11 +74,19 @@ private void onTick(TickEvent.Post event) {
List- itemList = items.get();
List recipeResultCollectionList = mc.player.getRecipeBook().getOrderedResults();
for (RecipeResultCollection recipeResultCollection : recipeResultCollectionList) {
- for (Recipe> recipe : recipeResultCollection.getRecipes(true)) {
- if (!itemList.contains(recipe.getOutput(mc.world.getRegistryManager()).getItem())) continue;
- mc.interactionManager.clickRecipe(currentScreenHandler.syncId, recipe, craftAll.get());
- mc.interactionManager.clickSlot(currentScreenHandler.syncId, 0, 1,
- drop.get() ? SlotActionType.THROW : SlotActionType.QUICK_MOVE, mc.player);
+ // Get craftable recipes only
+ List craftRecipes = recipeResultCollection.filter(RecipeResultCollection.RecipeFilterMode.CRAFTABLE);
+ for (RecipeDisplayEntry recipe : craftRecipes) {
+ RecipeDisplay recipeDisplay = recipe.display();
+ List resultStacks = recipeDisplay.result().getStacks(SlotDisplayContexts.createParameters(mc.world));
+ for (ItemStack resultStack : resultStacks) {
+ // Check if the result item is in the item list
+ if (!itemList.contains(resultStack.getItem())) continue;
+
+ mc.interactionManager.clickRecipe(currentScreenHandler.syncId, recipe.id(), craftAll.get());
+ mc.interactionManager.clickSlot(currentScreenHandler.syncId, 0, 1,
+ drop.get() ? SlotActionType.THROW : SlotActionType.QUICK_MOVE, mc.player);
+ }
}
}
}
diff --git a/src/main/java/anticope/rejects/modules/AutoEnchant.java b/src/main/java/anticope/rejects/modules/AutoEnchant.java
new file mode 100644
index 00000000..a633bcce
--- /dev/null
+++ b/src/main/java/anticope/rejects/modules/AutoEnchant.java
@@ -0,0 +1,136 @@
+package anticope.rejects.modules;
+
+import anticope.rejects.MeteorRejectsAddon;
+
+import meteordevelopment.meteorclient.events.game.OpenScreenEvent;
+import meteordevelopment.meteorclient.settings.*;
+import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
+import meteordevelopment.meteorclient.utils.player.FindItemResult;
+import meteordevelopment.meteorclient.utils.player.InvUtils;
+import meteordevelopment.orbit.EventHandler;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.screen.EnchantmentScreenHandler;
+import net.minecraft.screen.ScreenHandler;
+
+import java.util.List;
+import java.util.Objects;
+
+public class AutoEnchant extends meteordevelopment.meteorclient.systems.modules.Module {
+
+ public final SettingGroup sgGeneral = settings.getDefaultGroup();
+
+ private final Setting delay = sgGeneral.add(new IntSetting.Builder()
+ .name("delay")
+ .description("The tick delay between enchanting items.")
+ .defaultValue(50)
+ .sliderMax(500)
+ .min(0)
+ .build()
+ );
+
+ private final Setting level = sgGeneral.add(new IntSetting.Builder()
+ .name("level")
+ .description("Choose enchantment levels 1-3")
+ .defaultValue(3)
+ .max(3)
+ .min(1)
+ .build()
+ );
+
+ private final Setting drop = sgGeneral.add(new BoolSetting.Builder()
+ .name("drop")
+ .description("Automatically drops enchanted items (useful for when not enough inventory space)")
+ .defaultValue(false)
+ .build()
+ );
+
+ private final Setting
> itemWhitelist = sgGeneral.add(new ItemListSetting.Builder()
+ .name("item-whitelist")
+ .description("Item that require enchantment.")
+ .defaultValue()
+ .filter(item -> item.equals(Items.BOOK) || new ItemStack(item).isDamageable())
+ .build()
+ );
+
+ public AutoEnchant() {
+ super(MeteorRejectsAddon.CATEGORY, "auto-enchant", "Automatically enchanting items.");
+ }
+
+ @EventHandler
+ private void onOpenScreen(OpenScreenEvent event) {
+ if (!(Objects.requireNonNull(mc.player).currentScreenHandler instanceof EnchantmentScreenHandler))
+ return;
+ MeteorExecutor.execute(this::autoEnchant);
+ }
+
+ private void autoEnchant() {
+ if (!(Objects.requireNonNull(mc.player).currentScreenHandler instanceof EnchantmentScreenHandler handler))
+ return;
+ if (mc.player.experienceLevel < 30) {
+ info("You don't have enough experience levels");
+ return;
+ }
+ while (getEmptySlotCount(handler) > 2 || drop.get()) {
+ if (!(mc.player.currentScreenHandler instanceof EnchantmentScreenHandler)) {
+ info("Enchanting table is closed.");
+ break;
+ }
+ if (handler.getLapisCount() < level.get() && !fillLapisItem()) {
+ info("Lapis lazuli is not found.");
+ break;
+ }
+ if (!fillCanEnchantItem()) {
+ info("No items found to enchant.");
+ break;
+ }
+ Objects.requireNonNull(mc.interactionManager).clickButton(handler.syncId, level.get() - 1);
+ if (getEmptySlotCount(handler) > 2) {
+ InvUtils.shiftClick().slotId(0);
+ } else if (drop.get() && handler.getSlot(0).hasStack()) {
+ // I don't know why an exception LegacyRandomSource is thrown here,
+ // so I used the main thread to drop items.
+ mc.execute(() -> InvUtils.drop().slotId(0));
+ }
+
+ /*
+ Although the description here indicates that the tick is the unit,
+ the actual delay is not the tick unit,
+ but it does not affect the normal operation in the game.
+ Perhaps we can ignore it
+ */
+ try {
+ Thread.sleep(delay.get());
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ private boolean fillCanEnchantItem() {
+ FindItemResult res = InvUtils.find(stack -> itemWhitelist.get().contains(stack.getItem()) && EnchantmentHelper.canHaveEnchantments(stack));
+ if (!res.found()) return false;
+ InvUtils.shiftClick().slot(res.slot());
+ return true;
+ }
+
+ private boolean fillLapisItem() {
+ FindItemResult res = InvUtils.find(Items.LAPIS_LAZULI);
+ if (!res.found()) return false;
+ InvUtils.shiftClick().slot(res.slot());
+ return true;
+ }
+
+ private int getEmptySlotCount(ScreenHandler handler) {
+ int emptySlotCount = 0;
+ for (int i = 0; i < handler.slots.size(); i++) {
+ if (!handler.slots.get(i).getStack().getItem().equals(Items.AIR))
+ continue;
+ emptySlotCount++;
+ }
+ return emptySlotCount;
+ }
+
+}
diff --git a/src/main/java/anticope/rejects/modules/AutoExtinguish.java b/src/main/java/anticope/rejects/modules/AutoExtinguish.java
index a05cada5..d4c0f9da 100644
--- a/src/main/java/anticope/rejects/modules/AutoExtinguish.java
+++ b/src/main/java/anticope/rejects/modules/AutoExtinguish.java
@@ -82,9 +82,9 @@ public class AutoExtinguish extends Module {
private boolean hasPlacedWater = false;
private BlockPos blockPos = null;
private boolean doesWaterBucketWork = true;
-
- private static final StatusEffect FIRE_RESISTANCE = Registries.STATUS_EFFECT.get(new Identifier("fire_resistance"));
-
+
+ private static final StatusEffect FIRE_RESISTANCE = Registries.STATUS_EFFECT.get(Identifier.of("fire_resistance"));
+
public AutoExtinguish() {
super(MeteorRejectsAddon.CATEGORY, "auto-extinguish", "Automatically extinguishes fire around you");
}
@@ -114,7 +114,7 @@ private void onTick(TickEvent.Pre event) {
place(slot);
hasPlacedWater = false;
- } else if (!mc.player.hasStatusEffect(FIRE_RESISTANCE) && mc.player.isOnFire()) {
+ } else if (!mc.player.hasStatusEffect(Registries.STATUS_EFFECT.getEntry(FIRE_RESISTANCE)) && mc.player.isOnFire()) {
blockPos = mc.player.getBlockPos();
final int slot = findSlot(Items.WATER_BUCKET);
if (mc.world.getBlockState(blockPos).getBlock() == Blocks.FIRE || mc.world.getBlockState(blockPos).getBlock() == Blocks.SOUL_FIRE) {
diff --git a/src/main/java/anticope/rejects/modules/AutoFarm.java b/src/main/java/anticope/rejects/modules/AutoFarm.java
index 5e86f58f..2109f2db 100644
--- a/src/main/java/anticope/rejects/modules/AutoFarm.java
+++ b/src/main/java/anticope/rejects/modules/AutoFarm.java
@@ -151,6 +151,8 @@ private void onBreakBlock(BreakBlockEvent event) {
else if (block == Blocks.POTATOES) item = Items.POTATO;
else if (block == Blocks.BEETROOTS) item = Items.BEETROOT_SEEDS;
else if (block == Blocks.NETHER_WART) item = Items.NETHER_WART;
+ else if (block == Blocks.PITCHER_CROP) item = Items.PITCHER_POD;
+ else if (block == Blocks.TORCHFLOWER) item = Items.TORCHFLOWER_SEEDS;
if (item != null) replantMap.put(event.blockPos, item);
}
}
@@ -257,32 +259,40 @@ private boolean isMature(BlockState state, Block block) {
if (block instanceof CropBlock cropBlock) {
return cropBlock.isMature(state);
} else if (block instanceof CocoaBlock cocoaBlock) {
- return !cocoaBlock.hasRandomTicks(state);
+ return state.get(cocoaBlock.AGE) >= 2;
} else if (block instanceof StemBlock) {
return state.get(StemBlock.AGE) == StemBlock.MAX_AGE;
} else if (block instanceof SweetBerryBushBlock sweetBerryBushBlock) {
- return !sweetBerryBushBlock.hasRandomTicks(state);
+ return state.get(sweetBerryBushBlock.AGE) >= 2;
} else if (block instanceof NetherWartBlock netherWartBlock) {
- return !netherWartBlock.hasRandomTicks(state);
+ return state.get(netherWartBlock.AGE) >= 3;
+ } else if (block instanceof PitcherCropBlock pitcherCropBlock) {
+ return state.get(pitcherCropBlock.AGE) >= 4;
}
return true;
}
private boolean bonemealFilter(Block block) {
return block instanceof CropBlock ||
- block instanceof CocoaBlock ||
block instanceof StemBlock ||
block instanceof MushroomPlantBlock ||
- block instanceof SweetBerryBushBlock ||
block instanceof AzaleaBlock ||
- block instanceof SaplingBlock;
+ block instanceof SaplingBlock ||
+ block == Blocks.COCOA ||
+ block == Blocks.SWEET_BERRY_BUSH ||
+ block == Blocks.PITCHER_CROP ||
+ block == Blocks.TORCHFLOWER;
}
private boolean harvestFilter(Block block) {
return block instanceof CropBlock ||
- block instanceof GourdBlock ||
- block instanceof NetherWartBlock ||
- block instanceof SweetBerryBushBlock;
+ block == Blocks.PUMPKIN ||
+ block == Blocks.MELON ||
+ block == Blocks.NETHER_WART ||
+ block == Blocks.SWEET_BERRY_BUSH ||
+ block == Blocks.COCOA ||
+ block == Blocks.PITCHER_CROP ||
+ block == Blocks.TORCHFLOWER;
}
private boolean plantFilter(Item item) {
@@ -292,6 +302,8 @@ private boolean plantFilter(Item item) {
item == Items.BEETROOT_SEEDS ||
item == Items.PUMPKIN_SEEDS ||
item == Items.MELON_SEEDS ||
- item == Items.NETHER_WART;
+ item == Items.NETHER_WART ||
+ item == Items.PITCHER_POD ||
+ item == Items.TORCHFLOWER_SEEDS;
}
}
diff --git a/src/main/java/anticope/rejects/modules/AutoGrind.java b/src/main/java/anticope/rejects/modules/AutoGrind.java
index 168f1237..2075f0e0 100644
--- a/src/main/java/anticope/rejects/modules/AutoGrind.java
+++ b/src/main/java/anticope/rejects/modules/AutoGrind.java
@@ -7,14 +7,19 @@
import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
import meteordevelopment.meteorclient.utils.player.InvUtils;
import meteordevelopment.orbit.EventHandler;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.ItemEnchantmentsComponent;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import net.minecraft.registry.RegistryKey;
+import net.minecraft.registry.entry.RegistryEntry;
+import net.minecraft.registry.tag.EnchantmentTags;
import net.minecraft.screen.GrindstoneScreenHandler;
import java.util.List;
-import java.util.Map;
+import java.util.Set;
public class AutoGrind extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
@@ -32,11 +37,11 @@ public class AutoGrind extends Module {
.name("item-blacklist")
.description("Items that should be ignored.")
.defaultValue()
- .filter(Item::isDamageable)
+ .filter(Item -> Item.getComponents().get(DataComponentTypes.DAMAGE) != null)
.build()
);
- private final Setting> enchantmentBlacklist = sgGeneral.add(new EnchantmentListSetting.Builder()
+ private final Setting>> enchantmentBlacklist = sgGeneral.add(new EnchantmentListSetting.Builder()
.name("enchantment-blacklist")
.description("Enchantments that should be ignored.")
.defaultValue()
@@ -63,7 +68,7 @@ private void onOpenScreen(OpenScreenEvent event) {
if (mc.currentScreen == null) break;
- InvUtils.quickMove().slot(i);
+ InvUtils.shiftClick().slot(i);
InvUtils.move().fromId(2).to(i);
}
}
@@ -73,17 +78,17 @@ private void onOpenScreen(OpenScreenEvent event) {
private boolean canGrind(ItemStack stack) {
if (itemBlacklist.get().contains(stack.getItem())) return false;
- Map enchantments = EnchantmentHelper.get(stack);
+ ItemEnchantmentsComponent enchantments = EnchantmentHelper.getEnchantments(stack);
int availEnchs = 0;
- for (Enchantment enchantment : enchantments.keySet()) {
+ for (RegistryEntry enchantment : enchantments.getEnchantments()) {
availEnchs++;
- if (enchantment.isCursed())
+ if (EnchantmentHelper.hasAnyEnchantmentsIn(stack, EnchantmentTags.CURSE))
availEnchs--;
- if (enchantmentBlacklist.get().contains(enchantment))
+ if (enchantmentBlacklist.get().contains(enchantment.value()))
return false;
}
- return enchantments.size() > 0 && availEnchs > 0;
+ return !enchantments.isEmpty() && availEnchs > 0;
}
}
diff --git a/src/main/java/anticope/rejects/modules/AutoPot.java b/src/main/java/anticope/rejects/modules/AutoPot.java
index 042a3426..c6b2df5b 100644
--- a/src/main/java/anticope/rejects/modules/AutoPot.java
+++ b/src/main/java/anticope/rejects/modules/AutoPot.java
@@ -6,10 +6,7 @@
import baritone.api.BaritoneAPI;
import meteordevelopment.meteorclient.events.entity.player.ItemUseCrosshairTargetEvent;
import meteordevelopment.meteorclient.events.world.TickEvent;
-import meteordevelopment.meteorclient.settings.BoolSetting;
-import meteordevelopment.meteorclient.settings.IntSetting;
-import meteordevelopment.meteorclient.settings.Setting;
-import meteordevelopment.meteorclient.settings.SettingGroup;
+import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.combat.AnchorAura;
@@ -19,50 +16,51 @@
import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.meteorclient.utils.player.Rotations;
import meteordevelopment.orbit.EventHandler;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.PotionContentsComponent;
import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
-import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
-import net.minecraft.potion.PotionUtil;
+import net.minecraft.registry.Registries;
+import net.minecraft.registry.entry.RegistryEntry;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
public class AutoPot extends Module {
- private static final Class extends Module>[] AURAS = new Class[] { KillAura.class, CrystalAura.class, AnchorAura.class, BedAura.class };
-
+ @SuppressWarnings("unchecked")
+ private static final Class extends Module>[] AURAS = new Class[]{KillAura.class, CrystalAura.class, AnchorAura.class, BedAura.class};
private final SettingGroup sgGeneral = settings.getDefaultGroup();
- private final Setting Healing = sgGeneral.add(new BoolSetting.Builder()
- .name("Healing")
- .description("Enables healing potions.")
- .defaultValue(true)
- .build()
- );
- private final Setting Strength = sgGeneral.add(new BoolSetting.Builder()
- .name("Strength")
- .description("Enables strength potions.")
- .defaultValue(true)
+ private final Setting> usablePotions = sgGeneral.add(new StatusEffectListSetting.Builder()
+ .name("potions-to-use")
+ .description("The potions to use.")
+ .defaultValue(
+ StatusEffects.INSTANT_HEALTH.value(),
+ StatusEffects.STRENGTH.value()
+ )
.build()
);
+
private final Setting useSplashPots = sgGeneral.add(new BoolSetting.Builder()
- .name("Splash-Pots")
- .description("Allow the use of splash pots")
+ .name("splash-potions")
+ .description("Allow the use of splash potions")
.defaultValue(true)
.build()
);
+
private final Setting health = sgGeneral.add(new IntSetting.Builder()
.name("health")
- .description("If health goes below this point, Healing Pot will trigger.")
+ .description("If health goes below this point, Healing potions will trigger.")
.defaultValue(15)
.min(0)
.sliderMax(20)
.build()
);
+
private final Setting pauseAuras = sgGeneral.add(new BoolSetting.Builder()
.name("pause-auras")
.description("Pauses all auras when eating.")
@@ -76,182 +74,59 @@ public class AutoPot extends Module {
.defaultValue(true)
.build()
);
+
private final Setting lookDown = sgGeneral.add(new BoolSetting.Builder()
.name("rotate")
- .description("Forces you to rotate downwards when throwing bottles.")
+ .description("Forces you to rotate downwards when throwing splash potions.")
.defaultValue(true)
.build()
);
+
private int slot, prevSlot;
private boolean drinking, splashing;
private final List> wasAura = new ArrayList<>();
private boolean wasBaritone;
-
+
public AutoPot() {
super(MeteorRejectsAddon.CATEGORY, "auto-pot", "Automatically Drinks Potions");
}
- //Gilded's first module, lets see how much i'll die making this
- //TODO:Rework everything to accept all pots
- //TODO: Does strength work better if you throw it up? will check.
+
+ // TODO : Add option to scan whole inv - then either swap item to hotbar if full or just place in first empty slot
+ // Note, Sometimes two or multiple splash pots are thrown - since the effect is not instant, the second pot is thrown before the effect of first is applied
@Override
public void onDeactivate() {
- if (drinking) stopDrinking();
- if (splashing) stopSplashing();
+ stopPotionUsage();
}
+
@EventHandler
private void onTick(TickEvent.Pre event) {
- if (Healing.get()) {
- if (ShouldDrinkHealth()) {
- //Heal Pot Slot
- int slot = HealingpotionSlot();
- //Slot Not Invalid
+ if (mc.player.isUsingItem()) return;
+ for (StatusEffect statusEffect : usablePotions.get()) {
+ RegistryEntry registryEntry = Registries.STATUS_EFFECT.getEntry(statusEffect);
+ if (!mc.player.hasStatusEffect(registryEntry)) {
+ slot = potionSlot(statusEffect);
if (slot != -1) {
- startDrinking();
- } else if (HealingpotionSlot() == -1 && useSplashPots.get()) {
- slot = HealingSplashpotionSlot();
- if (slot != -1) {
- startSplashing();
- }
- }
- }
- if (drinking) {
- if (ShouldDrinkHealth()) {
- if (isNotPotion(mc.player.getInventory().getStack(slot))) {
- slot = HealingpotionSlot();
- if (slot == -1) {
- info("Ran out of Pots while drinking");
- stopDrinking();
- return;
- }
- } else changeSlot(slot);
- }
- drink();
- if (ShouldNotDrinkHealth()) {
- info("Health Full");
- stopDrinking();
- return;
- }
- }
- if (splashing) {
- if (ShouldDrinkHealth()) {
- if (isNotSplashPotion(mc.player.getInventory().getStack(slot))) {
- slot = HealingSplashpotionSlot();
- if (slot == -1) {
- info("Ran out of Pots while splashing");
- stopSplashing();
- return;
- } else changeSlot(slot);
- }
- splash();
- if (ShouldNotDrinkHealth()) {
- info("Health Full");
- stopSplashing();
+ if (registryEntry == StatusEffects.INSTANT_HEALTH && ShouldDrinkHealth()) {
+ startPotionUse();
+ return;
+ } else if (registryEntry == StatusEffects.INSTANT_HEALTH) {
return;
}
- }
- }
- }
- if (Strength.get()) {
- if (ShouldDrinkStrength()) {
- //Strength Pot Slot
- int slot = StrengthpotionSlot();
- //Slot Not Invalid
- if (slot != -1) {
- startDrinking();
- }
- else if (StrengthpotionSlot() == -1 && useSplashPots.get()) {
- slot = StrengthSplashpotionSlot();
- if (slot != -1) {
- startSplashing();
- }
- }
- }
- if (drinking) {
- if (ShouldDrinkStrength()) {
- if (isNotPotion(mc.player.getInventory().getStack(slot))) {
- slot = StrengthpotionSlot();
- if (slot == -1) {
- stopDrinking();
- info("Out of Pots");
- return;
- } else changeSlot(slot);
- }
- drink();
- } else {
- stopDrinking();
- }
- }
- if (splashing) {
- if (ShouldDrinkStrength()) {
- if (isNotSplashPotion(mc.player.getInventory().getStack(slot))) {
- slot = StrengthSplashpotionSlot();
- if (slot == -1) {
- info("Ran out of Pots while splashing");
- stopSplashing();
- return;
- } else changeSlot(slot);
- }
- splash();
- } else {
- stopSplashing();
+ startPotionUse();
}
}
}
}
+
@EventHandler
private void onItemUseCrosshairTarget(ItemUseCrosshairTargetEvent event) {
if (drinking) event.target = null;
}
+
private void setPressed(boolean pressed) {
mc.options.useKey.setPressed(pressed);
}
- private void startDrinking() {
- prevSlot = mc.player.getInventory().selectedSlot;
- drink();
- // Pause auras
- wasAura.clear();
- if (pauseAuras.get()) {
- for (Class extends Module> klass : AURAS) {
- Module module = Modules.get().get(klass);
-
- if (module.isActive()) {
- wasAura.add(klass);
- module.toggle();
- }
- }
- }
- // Pause baritone
- wasBaritone = false;
- if (pauseBaritone.get() && BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing()) {
- wasBaritone = true;
- BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("pause");
- }
- }
- private void startSplashing() {
- prevSlot = mc.player.getInventory().selectedSlot;
- if (lookDown.get()){
- Rotations.rotate(mc.player.getYaw(), 90); splash();
- }
- splash();
- // Pause auras
- wasAura.clear();
- if (pauseAuras.get()) {
- for (Class extends Module> klass : AURAS) {
- Module module = Modules.get().get(klass);
- if (module.isActive()) {
- wasAura.add(klass);
- module.toggle();
- }
- }
- }
- // Pause baritone
- wasBaritone = false;
- if (pauseBaritone.get() && BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing()) {
- wasBaritone = true;
- BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("pause");
- }
- }
private void drink() {
changeSlot(slot);
setPressed(true);
@@ -259,38 +134,19 @@ private void drink() {
drinking = true;
}
+
private void splash() {
changeSlot(slot);
setPressed(true);
splashing = true;
}
- private void stopDrinking() {
- changeSlot(prevSlot);
- setPressed(false);
- drinking = false;
- // Resume auras
- if (pauseAuras.get()) {
- for (Class extends Module> klass : AURAS) {
- Module module = Modules.get().get(klass);
-
- if (wasAura.contains(klass) && !module.isActive()) {
- module.toggle();
- }
- }
- }
- // Resume baritone
- if (pauseBaritone.get() && wasBaritone) {
- BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("resume");
- }
- }
- private void stopSplashing() {
+ private void stopPotionUsage() {
changeSlot(prevSlot);
setPressed(false);
-
+ drinking = false;
splashing = false;
- // Resume auras
if (pauseAuras.get()) {
for (Class extends Module> klass : AURAS) {
Module module = Modules.get().get(klass);
@@ -300,33 +156,31 @@ private void stopSplashing() {
}
}
}
- // Resume baritone
if (pauseBaritone.get() && wasBaritone) {
- BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("resume");
+ BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("resume");
}
}
- private double truehealth() {
+
+ private double trueHealth() {
assert mc.player != null;
return mc.player.getHealth();
}
+
private void changeSlot(int slot) {
mc.player.getInventory().selectedSlot = slot;
this.slot = slot;
}
+
//Sunk 7 hours into these checks, if i die blame checks
- //Heal pot checks
- private int HealingpotionSlot() {
+ private int potionSlot(StatusEffect statusEffect) {
int slot = -1;
for (int i = 0; i < 9; i++) {
- // Skip if item stack is empty
ItemStack stack = mc.player.getInventory().getStack(i);
if (stack.isEmpty()) continue;
- if (stack.getItem() != Items.POTION) continue;
- if (stack.getItem() == Items.POTION) {
- List effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects();
- if (effects.size() > 0) {
- StatusEffectInstance effect = effects.get(0);
- if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) {
+ if (stack.getItem() == Items.POTION || (stack.getItem() == Items.SPLASH_POTION && useSplashPots.get())) {
+ PotionContentsComponent effects = stack.getComponents().getOrDefault(DataComponentTypes.POTION_CONTENTS, PotionContentsComponent.DEFAULT);
+ for (StatusEffectInstance effectInstance : effects.getEffects()) {
+ if (effectInstance.getTranslationKey().equals(statusEffect.getTranslationKey())) {
slot = i;
break;
}
@@ -335,87 +189,39 @@ private int HealingpotionSlot() {
}
return slot;
}
- private int HealingSplashpotionSlot() {
- int slot = -1;
- for (int i = 0; i < 9; i++) {
- // Skip if item stack is empty
- ItemStack stack = mc.player.getInventory().getStack(i);
- if (stack.isEmpty()) continue;
- if (stack.getItem() != Items.SPLASH_POTION) continue;
- if (stack.getItem() == Items.SPLASH_POTION) {
- List effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects();
- if (effects.size() > 0) {
- StatusEffectInstance effect = effects.get(0);
- if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) {
- slot = i;
- break;
- }
- }
- }
- }
- return slot;
- }
- //Strength Pot Checks
- private int StrengthSplashpotionSlot () {
- int slot = -1;
- for (int i = 0; i < 9; i++) {
- // Skip if item stack is empty
- ItemStack stack = mc.player.getInventory().getStack(i);
- if (stack.isEmpty()) continue;
- if (stack.getItem() != Items.SPLASH_POTION) continue;
- if (stack.getItem() == Items.SPLASH_POTION) {
- List effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects();
- if (effects.size() > 0) {
- StatusEffectInstance effect = effects.get(0);
- if (effect.getTranslationKey().equals("effect.minecraft.strength")) {
- slot = i;
- break;
- }
- }
+ private void startPotionUse() {
+ prevSlot = mc.player.getInventory().selectedSlot;
+
+ if (useSplashPots.get()) {
+ if (lookDown.get()) {
+ Rotations.rotate(mc.player.getYaw(), 90);
+ splash();
+ } else {
+ splash();
}
+ } else {
+ drink();
}
- return slot;
- }
- private int StrengthpotionSlot () {
- int slot = -1;
- for (int i = 0; i < 9; i++) {
- // Skip if item stack is empty
- ItemStack stack = mc.player.getInventory().getStack(i);
- if (stack.isEmpty()) continue;
- if (stack.getItem() != Items.POTION) continue;
- if (stack.getItem() == Items.POTION) {
- List effects = PotionUtil.getPotion(mc.player.getInventory().getStack(i)).getEffects();
- if (effects.size() > 0) {
- StatusEffectInstance effect = effects.get(0);
- if (effect.getTranslationKey().equals("effect.minecraft.strength")) {
- slot = i;
- break;
- }
- }
+ wasAura.clear();
+ if (pauseAuras.get()) {
+ for (Class extends Module> klass : AURAS) {
+ Module module = Modules.get().get(klass);
+ if (module.isActive()) {
+ wasAura.add(klass);
+ module.toggle();
+ }
}
}
- return slot;
- }
- private boolean isNotPotion(ItemStack stack) {
- Item item = stack.getItem();
- return item != Items.POTION;
- }
- private boolean isNotSplashPotion(ItemStack stack) {
- Item item = stack.getItem();
- return item != Items.SPLASH_POTION;
- }
- private boolean ShouldDrinkHealth(){
- if (truehealth() < health.get()) return true;
- return false;
- }
- private boolean ShouldNotDrinkHealth(){
- if (truehealth() >= health.get()) return true;
- return false;
+ wasBaritone = false;
+ if (pauseBaritone.get() && BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing()) {
+ wasBaritone = true;
+ BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("pause");
+ }
}
- private boolean ShouldDrinkStrength(){
- Map effects = mc.player.getActiveStatusEffects();
- return !effects.containsKey(StatusEffects.STRENGTH);
+
+ private boolean ShouldDrinkHealth() {
+ return trueHealth() < health.get();
}
}
diff --git a/src/main/java/anticope/rejects/modules/AutoRename.java b/src/main/java/anticope/rejects/modules/AutoRename.java
new file mode 100644
index 00000000..b3903aa0
--- /dev/null
+++ b/src/main/java/anticope/rejects/modules/AutoRename.java
@@ -0,0 +1,201 @@
+package anticope.rejects.modules;
+
+import anticope.rejects.MeteorRejectsAddon;
+import meteordevelopment.meteorclient.events.world.TickEvent;
+import meteordevelopment.meteorclient.settings.*;
+import meteordevelopment.meteorclient.systems.modules.Module;
+import meteordevelopment.meteorclient.utils.player.InvUtils;
+import meteordevelopment.orbit.EventHandler;
+import net.minecraft.block.ShulkerBoxBlock;
+import net.minecraft.client.gui.screen.ingame.AnvilScreen;
+import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.NbtComponent;
+import net.minecraft.item.BlockItem;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NbtCompound;
+import net.minecraft.nbt.NbtElement;
+import net.minecraft.screen.AnvilScreenHandler;
+
+import java.util.List;
+
+public class AutoRename extends Module {
+ private final SettingGroup sgGeneral = settings.getDefaultGroup();
+
+ private final Setting> items = sgGeneral.add(new ItemListSetting.Builder()
+ .name("items")
+ .description("Items you want to rename.")
+ .defaultValue(List.of())
+ .build()
+ );
+
+ private final Setting delay = sgGeneral.add(new IntSetting.Builder()
+ .name("delay")
+ .description("How many ticks to wait between actions.")
+ .defaultValue(2)
+ .min(0)
+ .sliderMax(40)
+ .build()
+ );
+
+ private final Setting name = sgGeneral.add(new StringSetting.Builder()
+ .name("name")
+ .description("Name for an item, empty for reverting name to default.")
+ .defaultValue("")
+ .build()
+ );
+
+ private final Setting firstItemInContainer = sgGeneral.add(new BoolSetting.Builder()
+ .name("first-item-in-container")
+ .description("Will rename containers based on name of first item in it.")
+ .defaultValue(false)
+ .build()
+ );
+
+ private final Setting> containerItems = sgGeneral.add(new ItemListSetting.Builder()
+ .name("container-items")
+ .description("Items to treat as containers.")
+ .defaultValue(List.of())
+ .build()
+ );
+
+ public AutoRename() {
+ super(MeteorRejectsAddon.CATEGORY, "auto-rename", "Automatically renames items.");
+ }
+
+ private int delayLeft = 0;
+ @EventHandler
+ private void onTick(TickEvent.Post ignoredEvent) {
+ if (mc.interactionManager == null) return;
+ if (items.get().isEmpty()) return;
+ if (!(mc.player.currentScreenHandler instanceof AnvilScreenHandler)) return;
+
+ if (delayLeft > 0) {
+ delayLeft--;
+ return;
+ } else {
+ delayLeft = delay.get();
+ }
+
+ var slot0 = mc.player.currentScreenHandler.getSlot(0);
+ var slot1 = mc.player.currentScreenHandler.getSlot(1);
+ var slot2 = mc.player.currentScreenHandler.getSlot(2);
+ if (slot1.hasStack()) {
+// info("Slot 1 occupied");
+ return; // touching anything
+ }
+ if (slot2.hasStack()) {
+ if (mc.player.experienceLevel < 1) {
+// info("No exp");
+ } else {
+// info("Extracting named");
+ extractNamed();
+ }
+ } else {
+ if (slot0.hasStack()) {
+// info("Renaming");
+ renameItem(slot0.getStack());
+ } else {
+// info("Populating");
+ populateAnvil();
+ }
+ }
+ }
+
+ private void renameItem(ItemStack s) {
+ var setname = "";
+ if (firstItemInContainer.get() && containerItems.get().contains(s.getItem())) {
+ setname = getFirstItemName(s);
+ } else {
+ setname = name.get();
+ }
+// info("Renaming");
+ if (mc.currentScreen == null || !(mc.currentScreen instanceof AnvilScreen)) {
+ error("Not anvil screen");
+ toggle();
+ return;
+ }
+ var widgets = mc.currentScreen.children();
+ var input = (TextFieldWidget)widgets.get(0);
+ input.setText(setname);
+ }
+
+ private String getFirstItemName(ItemStack stack) {
+ Item item = stack.getItem();
+ if (!(item instanceof BlockItem && ((BlockItem) item).getBlock() instanceof ShulkerBoxBlock)) {
+ return "";
+ }
+ NbtCompound compound = stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT).copyNbt();
+ if (compound == null) {
+ return "";
+ }
+ compound = compound.getCompound("BlockEntityTag");
+ if (compound == null) {
+ return "";
+ }
+ var list = compound.getList("Items", NbtElement.COMPOUND_TYPE);
+ if (list == null) {
+ return "";
+ }
+ var minslot = Byte.MAX_VALUE;
+ var name = "";
+ for (int i = 0; i < list.size(); i++) {
+ var invItem = list.getCompound(i);
+ var invSlot = invItem.getByte("Slot");
+ if (minslot < invSlot) {
+ continue;
+ }
+ var itemId = invItem.getString("id");
+ if (itemId == null) {
+ continue;
+ }
+ name = String.valueOf(invItem.getCompound("Name"));
+ minslot = invSlot;
+ }
+ return name;
+ }
+
+ private void extractNamed() {
+ var to = -1;
+ var inv = mc.player.currentScreenHandler;
+ for (int i = 3; i < 38; i++) {
+ var sl = inv.getSlot(i);
+ if (sl.hasStack()) {
+ to = i;
+ break;
+ }
+ }
+ if (to == -1) {
+// info("No output slot");
+ return;
+ }
+ var from = 2;
+// info("Shift click %d %d", from, to);
+ InvUtils.shiftClick().fromId(from).toId(to);
+ }
+
+ private void populateAnvil() {
+ var gItems = items.get();
+ var from = -1;
+ var inv = mc.player.currentScreenHandler;
+ for (int i = 3; i < 38; i++) {
+ var sl = inv.getSlot(i);
+ if (!sl.hasStack()) {
+ continue;
+ }
+ var st = sl.getStack();
+ if (gItems.contains(st.getItem()) && !st.getComponents().contains(DataComponentTypes.CUSTOM_NAME)) {
+ from = i;
+ break;
+ }
+ }
+ if (from == -1) {
+// info("Nothing to rename");
+ return;
+ }
+ var to = 0;
+// info("Shift click %d %d", from, to);
+ InvUtils.shiftClick().fromId(from).toId(to);
+ }
+}
diff --git a/src/main/java/anticope/rejects/modules/AutoSoup.java b/src/main/java/anticope/rejects/modules/AutoSoup.java
index ab16c683..cf1a9332 100644
--- a/src/main/java/anticope/rejects/modules/AutoSoup.java
+++ b/src/main/java/anticope/rejects/modules/AutoSoup.java
@@ -14,15 +14,17 @@
import net.minecraft.entity.Entity;
import net.minecraft.entity.passive.TameableEntity;
import net.minecraft.entity.passive.VillagerEntity;
+import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
-import net.minecraft.item.StewItem;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.BlockPos;
+import java.util.List;
+
public class AutoSoup extends Module {
private static final String desc = "Automatically eats soup when your health is low on some servers.";
@@ -104,14 +106,16 @@ private void onTick(TickEvent.Post event) {
// move soup in inventory to hotbar
if (soupInInventory != -1)
- InvUtils.quickMove().slot(soupInInventory);
+ InvUtils.quickSwap().slot(soupInInventory);
}
private int findSoup(int startSlot, int endSlot) {
+ List- stews = List.of(Items.RABBIT_STEW, Items.MUSHROOM_STEW, Items.BEETROOT_SOUP);
+
for (int i = startSlot; i < endSlot; i++) {
ItemStack stack = mc.player.getInventory().getStack(i);
- if (stack != null && stack.getItem() instanceof StewItem)
+ if (stack != null && stews.contains(stack.getItem()))
return i;
}
@@ -128,23 +132,26 @@ private boolean shouldEatSoup() {
}
private boolean isClickable(HitResult hitResult) {
- if (hitResult == null)
- return false;
-
- if (hitResult instanceof EntityHitResult) {
- Entity entity = ((EntityHitResult) mc.crosshairTarget).getEntity();
- return entity instanceof VillagerEntity
- || entity instanceof TameableEntity;
- }
-
- if (hitResult instanceof BlockHitResult) {
- BlockPos pos = ((BlockHitResult) mc.crosshairTarget).getBlockPos();
- if (pos == null)
+ switch (hitResult) {
+ case null -> {
return false;
-
- Block block = mc.world.getBlockState(pos).getBlock();
- return block instanceof BlockWithEntity
- || block instanceof CraftingTableBlock;
+ }
+ case EntityHitResult entityHitResult -> {
+ Entity entity = ((EntityHitResult) mc.crosshairTarget).getEntity();
+ return entity instanceof VillagerEntity
+ || entity instanceof TameableEntity;
+ }
+ case BlockHitResult blockHitResult -> {
+ BlockPos pos = ((BlockHitResult) mc.crosshairTarget).getBlockPos();
+ if (pos == null)
+ return false;
+
+ Block block = mc.world.getBlockState(pos).getBlock();
+ return block instanceof BlockWithEntity
+ || block instanceof CraftingTableBlock;
+ }
+ default -> {
+ }
}
return false;
diff --git a/src/main/java/anticope/rejects/modules/AutoTNT.java b/src/main/java/anticope/rejects/modules/AutoTNT.java
index 82ffb8d9..45156ee6 100644
--- a/src/main/java/anticope/rejects/modules/AutoTNT.java
+++ b/src/main/java/anticope/rejects/modules/AutoTNT.java
@@ -113,7 +113,7 @@ private void onPreTick(TickEvent.Pre event) {
@EventHandler
private void onPostTick(TickEvent.Post event) {
// Ignition
- if (ignite.get() && blocksToIgnite.size() > 0) {
+ if (ignite.get() && !blocksToIgnite.isEmpty()) {
if (igniteTick > igniteDelay.get()) {
// Sort based on closest tnt
blocksToIgnite.sort(Comparator.comparingDouble(PlayerUtils::distanceTo));
diff --git a/src/main/java/anticope/rejects/modules/AutoWither.java b/src/main/java/anticope/rejects/modules/AutoWither.java
index ab5185ae..fb8e98bc 100644
--- a/src/main/java/anticope/rejects/modules/AutoWither.java
+++ b/src/main/java/anticope/rejects/modules/AutoWither.java
@@ -139,7 +139,7 @@ private void onTick(TickEvent.Pre event) {
// Register
BlockIterator.register(horizontalRadius.get(), verticalRadius.get(), (blockPos, blockState) -> {
- Direction dir = Direction.fromRotation(Rotations.getYaw(blockPos)).getOpposite();
+ Direction dir = Direction.fromHorizontalDegrees(Rotations.getYaw(blockPos)).getOpposite();
if (isValidSpawn(blockPos, dir)) withers.add(witherPool.get().set(blockPos, dir));
});
}
@@ -267,15 +267,15 @@ private void onRender(Render3DEvent event) {
BlockPos leftHead = wither.foot.up().up().offset(wither.axis, -1);
BlockPos rightHead = wither.foot.up().up().offset(wither.axis, 1);
- event.renderer.box((double) midHead.getX() + 0.2, (double) midHead.getX(), (double) midHead.getX() + 0.2,
+ event.renderer.box((double) midHead.getX() + 0.2, midHead.getX(), (double) midHead.getX() + 0.2,
(double) midHead.getX() + 0.8, (double) midHead.getX() + 0.7, (double) midHead.getX() + 0.8,
sideColor.get(), lineColor.get(), shapeMode.get(), 0);
- event.renderer.box((double) leftHead.getX() + 0.2, (double) leftHead.getX(), (double) leftHead.getX() + 0.2,
+ event.renderer.box((double) leftHead.getX() + 0.2, leftHead.getX(), (double) leftHead.getX() + 0.2,
(double) leftHead.getX() + 0.8, (double) leftHead.getX() + 0.7, (double) leftHead.getX() + 0.8,
sideColor.get(), lineColor.get(), shapeMode.get(), 0);
- event.renderer.box((double) rightHead.getX() + 0.2, (double) rightHead.getX(), (double) rightHead.getX() + 0.2,
+ event.renderer.box((double) rightHead.getX() + 0.2, rightHead.getX(), (double) rightHead.getX() + 0.2,
(double) rightHead.getX() + 0.8, (double) rightHead.getX() + 0.7, (double) rightHead.getX() + 0.8,
sideColor.get(), lineColor.get(), shapeMode.get(), 0);
}
diff --git a/src/main/java/anticope/rejects/modules/BoatPhase.java b/src/main/java/anticope/rejects/modules/BoatPhase.java
index adf54a17..0bce19ed 100644
--- a/src/main/java/anticope/rejects/modules/BoatPhase.java
+++ b/src/main/java/anticope/rejects/modules/BoatPhase.java
@@ -130,7 +130,7 @@ private void onBoatMove(BoatMoveEvent event) {
else if (fall.get()) velY -= fallSpeed.get() / 20;
} else if (fall.get()) velY -= fallSpeed.get() / 20;
- ((IVec3d) boat.getVelocity()).set(velX,velY,velZ);
+ ((IVec3d) boat.getVelocity()).meteor$set(velX,velY,velZ);
}
}
}
diff --git a/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java b/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java
index 956b8cab..4a6b0f7d 100644
--- a/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java
+++ b/src/main/java/anticope/rejects/modules/BungeeCordSpoof.java
@@ -9,7 +9,7 @@
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.orbit.EventHandler;
-import net.minecraft.network.NetworkState;
+import net.minecraft.network.packet.c2s.handshake.ConnectionIntent;
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import java.util.List;
@@ -54,16 +54,16 @@ public BungeeCordSpoof() {
@EventHandler
private void onPacketSend(PacketEvent.Send event) {
- if (event.packet instanceof HandshakeC2SPacket packet && packet.getIntendedState() == NetworkState.LOGIN) {
+ if (event.packet instanceof HandshakeC2SPacket packet && packet.intendedState() == ConnectionIntent.LOGIN) {
if (whitelist.get() && !whitelistedServers.get().contains(Utils.getWorldName())) return;
- String address = packet.getAddress() + "\0" + forwardedIP + "\0" + mc.getSession().getUuid().replace("-", "")
+ String address = packet.address() + "\0" + forwardedIP + "\0" + mc.getSession().getUuidOrNull().toString().replace("-", "")
+ (spoofProfile.get() ? getProperty() : "");
- ((HandshakeC2SPacketAccessor) packet).setAddress(address);
+ ((HandshakeC2SPacketAccessor) (Object) packet).setAddress(address);
}
}
private String getProperty() {
- PropertyMap propertyMap = mc.getSession().getProfile().getProperties();
+ PropertyMap propertyMap = mc.getGameProfile().getProperties();
return "\0" + GSON.toJson(propertyMap.values().toArray());
}
}
diff --git a/src/main/java/anticope/rejects/modules/ChorusExploit.java b/src/main/java/anticope/rejects/modules/ChorusExploit.java
index 54555ad8..7486aa79 100644
--- a/src/main/java/anticope/rejects/modules/ChorusExploit.java
+++ b/src/main/java/anticope/rejects/modules/ChorusExploit.java
@@ -142,9 +142,10 @@ private void onPacketRecieve(PacketEvent.Receive event) {
if (event.packet instanceof PlayerPositionLookS2CPacket posPacket && ateChorus) {
event.setCancelled(true);
if (positionMode.get() == PositionMode.PosLook) {
- cposX = posPacket.getX();
- cposY = posPacket.getY();
- cposZ = posPacket.getZ();
+ Vec3d pos = posPacket.change().position();
+ cposX = pos.x;
+ cposY = pos.y;
+ cposZ = pos.z;
gotPosition = true;
}
}
diff --git a/src/main/java/anticope/rejects/modules/ColorSigns.java b/src/main/java/anticope/rejects/modules/ColorSigns.java
index b8a4ffb8..708171c6 100644
--- a/src/main/java/anticope/rejects/modules/ColorSigns.java
+++ b/src/main/java/anticope/rejects/modules/ColorSigns.java
@@ -2,30 +2,63 @@
import anticope.rejects.MeteorRejectsAddon;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
+import meteordevelopment.meteorclient.settings.BoolSetting;
+import meteordevelopment.meteorclient.settings.Setting;
+import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.orbit.EventHandler;
+import net.minecraft.network.packet.c2s.play.BookUpdateC2SPacket;
import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket;
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
+import net.minecraft.server.MinecraftServer;
+
+import java.util.List;
public class ColorSigns extends Module {
+ private final SettingGroup sgGeneral = settings.getDefaultGroup();
+
+ private final Setting signs = sgGeneral.add(new BoolSetting.Builder()
+ .name("signs")
+ .description("Allows you to use colors in signs.")
+ .defaultValue(true)
+ .build()
+ );
+
+ private final Setting books = sgGeneral.add(new BoolSetting.Builder()
+ .name("books")
+ .description("Allows you to use colors in books.")
+ .defaultValue(false)
+ .build()
+ );
+
public ColorSigns() {
super(MeteorRejectsAddon.CATEGORY, "color-signs", "Allows you to use colors on signs on NON-PAPER servers (use \"&\" for color symbols)");
}
-
+
@EventHandler
private void onPacketSend(PacketEvent.Send event) {
if (event.packet instanceof GameJoinS2CPacket) {
checkWarning();
return;
}
- if (!(event.packet instanceof UpdateSignC2SPacket)) return;
- UpdateSignC2SPacket p = (UpdateSignC2SPacket)event.packet;
- for (int l = 0; l < p.getText().length; l++) {
- String newText = p.getText()[l].replaceAll("(?i)\u00a7|&([0-9A-FK-OR])", "\u00a7\u00a7$1$1");
- p.getText()[l] = newText;
+ if (signs.get() && event.packet instanceof UpdateSignC2SPacket packet) {
+ for (int line = 0; line < packet.getText().length; line++) {
+ packet.getText()[line] = packet.getText()[line]
+ .replaceAll("(?i)(?:&|(? newPages = packet.pages().stream().map(text ->
+ text.replaceAll("(?i)&([0-9A-Z])", "§$1")).toList();
+ // BookUpdateC2SPacket.pages is final, so we need to create a new packet
+ if (!packet.pages().equals(newPages)) {
+ assert mc.getNetworkHandler() != null;
+ mc.getNetworkHandler().sendPacket(new BookUpdateC2SPacket(
+ packet.slot(), newPages, packet.title()));
+ event.cancel();
+ }
}
- event.packet = p;
}
@Override
@@ -35,7 +68,10 @@ public void onActivate() {
}
private void checkWarning() {
- String brand = mc.player.getServerBrand();
+ assert mc.player != null;
+ MinecraftServer server = mc.player.getServer();
+ if (server == null) return;
+ String brand = server.getServerModName();
if (brand == null) return;
if (brand.contains("Paper")) warning("You are on a paper server. Color signs won't work here");
}
diff --git a/src/main/java/anticope/rejects/modules/Confuse.java b/src/main/java/anticope/rejects/modules/Confuse.java
index 7484e612..473f045b 100644
--- a/src/main/java/anticope/rejects/modules/Confuse.java
+++ b/src/main/java/anticope/rejects/modules/Confuse.java
@@ -144,12 +144,12 @@ private void onTick(TickEvent.Pre event) {
if (mc.world.getBlockState(BlockPos.ofFloored(goal.x, goal.y, goal.z)).getBlock() == Blocks.AIR) {
hit = mc.world.raycast(new RaycastContext(mc.player.getPos(), goal, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.ANY, mc.player));
if (!moveThroughBlocks.get() && hit.isInsideBlock()) {
- delayWaited = (int) (delay.get() - 1);
+ delayWaited = delay.get() - 1;
break;
}
mc.player.updatePosition(goal.x, goal.y, goal.z);
} else {
- delayWaited = (int) (delay.get() - 1);
+ delayWaited = delay.get() - 1;
}
break;
@@ -159,7 +159,7 @@ private void onTick(TickEvent.Pre event) {
Vec3d goal2 = entityPos.add(diff1);
hit = mc.world.raycast(new RaycastContext(mc.player.getPos(), goal2, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.ANY, mc.player));
if (!moveThroughBlocks.get() && hit.isInsideBlock()) {
- delayWaited = (int) (delay.get() - 1);
+ delayWaited = delay.get() - 1;
break;
}
mc.player.updatePosition(goal2.x, goal2.y, goal2.z);
diff --git a/src/main/java/anticope/rejects/modules/CoordLogger.java b/src/main/java/anticope/rejects/modules/CoordLogger.java
index 399f81a3..9e498bce 100644
--- a/src/main/java/anticope/rejects/modules/CoordLogger.java
+++ b/src/main/java/anticope/rejects/modules/CoordLogger.java
@@ -99,21 +99,21 @@ private void onPacketReceive(PacketEvent.Receive event) {
EntityPositionS2CPacket packet = (EntityPositionS2CPacket) event.packet;
try {
- Entity entity = mc.world.getEntityById(packet.getId());
+ Entity entity = mc.world.getEntityById(packet.entityId());
// Player teleport
if (entity.getType().equals(EntityType.PLAYER) && players.get()) {
- Vec3d packetPosition = new Vec3d(packet.getX(), packet.getY(), packet.getZ());
+ Vec3d packetPosition = packet.change().position();
Vec3d playerPosition = entity.getPos();
if (playerPosition.distanceTo(packetPosition) >= minDistance.get()) {
- info(formatMessage("Player '" + entity.getEntityName() + "' has teleported to ", packetPosition));
+ info(formatMessage("Player '" + entity.getNameForScoreboard() + "' has teleported to ", packetPosition));
}
}
// World teleport
else if (entity.getType().equals(EntityType.WOLF) && wolves.get()) {
- Vec3d packetPosition = new Vec3d(packet.getX(), packet.getY(), packet.getZ());
+ Vec3d packetPosition = packet.change().position();
Vec3d wolfPosition = entity.getPos();
UUID ownerUuid = ((TameableEntity) entity).getOwnerUuid();
@@ -152,7 +152,7 @@ else if (entity.getType().equals(EntityType.WOLF) && wolves.get()) {
public MutableText formatMessage(String message, Vec3d coords) {
MutableText text = Text.literal(message);
text.append(ChatUtils.formatCoords(coords));
- text.append(Formatting.GRAY.toString()+".");
+ text.append(Formatting.GRAY +".");
return text;
}
diff --git a/src/main/java/anticope/rejects/modules/CustomPackets.java b/src/main/java/anticope/rejects/modules/CustomPackets.java
index 37b1bc18..2d3c948d 100644
--- a/src/main/java/anticope/rejects/modules/CustomPackets.java
+++ b/src/main/java/anticope/rejects/modules/CustomPackets.java
@@ -5,6 +5,7 @@
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
+import io.netty.buffer.Unpooled;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting;
@@ -13,7 +14,7 @@
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.network.PacketByteBuf;
-import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
+import net.minecraft.network.packet.s2c.common.CustomPayloadS2CPacket;
import net.minecraft.text.HoverEvent;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
@@ -53,27 +54,32 @@ public CustomPackets() {
@EventHandler
private void onCustomPayloadPacket(PacketEvent.Receive event) {
if (event.packet instanceof CustomPayloadS2CPacket packet) {
- switch (packet.getChannel().toString()) {
- case "badlion:mods" -> event.setCancelled(onBadlionModsPacket(packet));
- default -> onUnknownPacket(packet);
+ if (packet.payload().getId().toString().equals("badlion:mods")) {
+ event.setCancelled(onBadlionModsPacket(packet));
+ } else {
+ onUnknownPacket(packet);
}
}
}
+ PacketByteBuf buffer = new PacketByteBuf(Unpooled.buffer());
+
private void onUnknownPacket(CustomPayloadS2CPacket packet) {
if (!unknownPackets.get()) return;
- MutableText text = Text.literal(packet.getChannel().toString());
+ MutableText text = Text.literal(packet.payload().getId().toString());
+ buffer.clear();
text.setStyle(text.getStyle()
.withHoverEvent(new HoverEvent(
HoverEvent.Action.SHOW_TEXT,
- Text.literal(readString(packet.getData()))
- )));
+ Text.literal(readString(buffer)
+ ))));
info(text);
}
private boolean onBadlionModsPacket(CustomPayloadS2CPacket packet) {
if (!mods.get()) return false;
- String json = readString(packet.getData());
+ buffer.clear();
+ String json = readString(buffer);
Map mods = GSON_NON_PRETTY.fromJson(json, BADLION_MODS_TYPE);
ChatUtils.sendMsg("Badlion", format("Mods", formatMods(mods)));
return true;
diff --git a/src/main/java/anticope/rejects/modules/ExtraElytra.java b/src/main/java/anticope/rejects/modules/ExtraElytra.java
index a2fdb16f..d5862910 100644
--- a/src/main/java/anticope/rejects/modules/ExtraElytra.java
+++ b/src/main/java/anticope/rejects/modules/ExtraElytra.java
@@ -8,7 +8,6 @@
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.entity.EquipmentSlot;
-import net.minecraft.item.ElytraItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket;
@@ -72,18 +71,17 @@ private void onTick(TickEvent.Post event) {
if (chest.getItem() != Items.ELYTRA)
return;
- if (mc.player.isFallFlying()) {
+ if (mc.player.isGliding()) {
if (stopInWater.get() && mc.player.isTouchingWater()) {
sendStartStopPacket();
return;
}
-
controlSpeed();
controlHeight();
return;
}
- if (ElytraItem.isUsable(chest) && mc.options.jumpKey.isPressed())
+ if (chest.getDamage() < chest.getMaxDamage() - 1 && mc.options.jumpKey.isPressed())
doInstantFly();
}
diff --git a/src/main/java/anticope/rejects/modules/FullFlight.java b/src/main/java/anticope/rejects/modules/FullFlight.java
index f20e723d..023aa627 100644
--- a/src/main/java/anticope/rejects/modules/FullFlight.java
+++ b/src/main/java/anticope/rejects/modules/FullFlight.java
@@ -112,14 +112,16 @@ private void onSendPacket(PacketEvent.Send event) {
mc.player.getZ(),
packet.getYaw(0),
packet.getPitch(0),
- packet.isOnGround()
+ packet.isOnGround(),
+ packet.horizontalCollision()
);
} else {
fullPacket = new PlayerMoveC2SPacket.PositionAndOnGround(
mc.player.getX(),
mc.player.getY(),
mc.player.getZ(),
- packet.isOnGround()
+ packet.isOnGround(),
+ packet.horizontalCollision()
);
}
event.cancel();
@@ -146,8 +148,8 @@ private void onPlayerMove(PlayerMoveEvent event) {
if (blockCollisions.findAny().isPresent()) break;
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY() - 0.4, mc.player.getZ(), mc.player.isOnGround()));
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround()));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY() - 0.4, mc.player.getZ(), mc.player.isOnGround(), mc.player.horizontalCollision));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround(), mc.player.horizontalCollision));
}
case Old -> {
Box box = mc.player.getBoundingBox();
@@ -161,20 +163,20 @@ private void onPlayerMove(PlayerMoveEvent event) {
double groundExtra = ground + 0.1D;
for (double posY = mc.player.getY(); posY > groundExtra; posY -= 4D) {
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), posY, mc.player.getZ(), true));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), posY, mc.player.getZ(), true, mc.player.horizontalCollision));
if (posY - 4D < groundExtra) break; // Prevent next step
}
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), groundExtra, mc.player.getZ(), true));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), groundExtra, mc.player.getZ(), true, mc.player.horizontalCollision));
for (double posY = groundExtra; posY < mc.player.getY(); posY += 4D) {
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), posY, mc.player.getZ(), mc.player.isOnGround()));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), posY, mc.player.getZ(), mc.player.isOnGround(), mc.player.horizontalCollision));
if (posY + 4D > mc.player.getY()) break; // Prevent next step
}
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround()));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround(), mc.player.horizontalCollision));
}
}
diff --git a/src/main/java/anticope/rejects/modules/InstaMine.java b/src/main/java/anticope/rejects/modules/InstaMine.java
deleted file mode 100644
index d3a4f6e1..00000000
--- a/src/main/java/anticope/rejects/modules/InstaMine.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package anticope.rejects.modules;
-
-import anticope.rejects.MeteorRejectsAddon;
-import meteordevelopment.meteorclient.events.entity.player.StartBreakingBlockEvent;
-import meteordevelopment.meteorclient.events.render.Render3DEvent;
-import meteordevelopment.meteorclient.events.world.TickEvent;
-import meteordevelopment.meteorclient.renderer.ShapeMode;
-import meteordevelopment.meteorclient.settings.*;
-import meteordevelopment.meteorclient.systems.modules.Module;
-import meteordevelopment.meteorclient.utils.player.Rotations;
-import meteordevelopment.meteorclient.utils.render.color.SettingColor;
-import meteordevelopment.meteorclient.utils.world.BlockUtils;
-import meteordevelopment.orbit.EventHandler;
-import net.minecraft.item.Items;
-import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket;
-import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket;
-import net.minecraft.util.Hand;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-
-public class InstaMine extends Module {
-
- private final SettingGroup sgGeneral = settings.getDefaultGroup();
- private final SettingGroup sgRender = settings.createGroup("Render");
-
- private final Setting tickDelay = sgGeneral.add(new IntSetting.Builder()
- .name("delay")
- .description("The delay between breaks.")
- .defaultValue(0)
- .min(0)
- .sliderMax(20)
- .build()
- );
-
- private final Setting pick = sgGeneral.add(new BoolSetting.Builder()
- .name("only-pick")
- .description("Only tries to mine the block if you are holding a pickaxe.")
- .defaultValue(true)
- .build()
- );
-
- private final Setting rotate = sgGeneral.add(new BoolSetting.Builder()
- .name("rotate")
- .description("Faces the blocks being mined server side.")
- .defaultValue(true)
- .build()
- );
-
- // Render
-
- private final Setting render = sgRender.add(new BoolSetting.Builder()
- .name("render")
- .description("Renders a block overlay on the block being broken.")
- .defaultValue(true)
- .build()
- );
-
- private final Setting shapeMode = sgRender.add(new EnumSetting.Builder()
- .name("shape-mode")
- .description("How the shapes are rendered.")
- .defaultValue(ShapeMode.Both)
- .build()
- );
-
- private final Setting sideColor = sgRender.add(new ColorSetting.Builder()
- .name("side-color")
- .description("The color of the sides of the blocks being rendered.")
- .defaultValue(new SettingColor(204, 0, 0, 10))
- .build()
- );
-
- private final Setting lineColor = sgRender.add(new ColorSetting.Builder()
- .name("line-color")
- .description("The color of the lines of the blocks being rendered.")
- .defaultValue(new SettingColor(204, 0, 0, 255))
- .build()
- );
-
- private int ticks;
-
- private final BlockPos.Mutable blockPos = new BlockPos.Mutable(0, -1, 0);
- private Direction direction;
-
- public InstaMine() {
- super(MeteorRejectsAddon.CATEGORY, "insta-mine", "Attempts to instantly mine blocks.");
- }
-
- @Override
- public void onActivate() {
- ticks = 0;
- blockPos.set(0, -128, 0);
- }
-
- @EventHandler
- private void onStartBreakingBlock(StartBreakingBlockEvent event) {
- direction = event.direction;
- blockPos.set(event.blockPos);
- }
-
- @EventHandler
- private void onTick(TickEvent.Pre event) {
- if (ticks >= tickDelay.get()) {
- ticks = 0;
-
- if (shouldMine()) {
- if (rotate.get()) {
- Rotations.rotate(Rotations.getYaw(blockPos), Rotations.getPitch(blockPos), () -> mc.getNetworkHandler().sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, blockPos, direction)));
- } else {
- mc.getNetworkHandler().sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, blockPos, direction));
- }
-
- mc.getNetworkHandler().sendPacket(new HandSwingC2SPacket(Hand.MAIN_HAND));
-
- }
- } else {
- ticks++;
- }
- }
-
- private boolean shouldMine() {
- if (blockPos.getY() == -128) return false;
- if (!BlockUtils.canBreak(blockPos)) return false;
- return !pick.get() || (mc.player.getMainHandStack().getItem() == Items.DIAMOND_PICKAXE || mc.player.getMainHandStack().getItem() == Items.NETHERITE_PICKAXE);
- }
-
- @EventHandler
- private void onRender(Render3DEvent event) {
- if (!render.get() || !shouldMine()) return;
- event.renderer.box(blockPos, sideColor.get(), lineColor.get(), shapeMode.get(), 0);
- }
-}
diff --git a/src/main/java/anticope/rejects/modules/Jetpack.java b/src/main/java/anticope/rejects/modules/Jetpack.java
index 93ca1b32..b22a2dc6 100644
--- a/src/main/java/anticope/rejects/modules/Jetpack.java
+++ b/src/main/java/anticope/rejects/modules/Jetpack.java
@@ -29,7 +29,7 @@ public Jetpack() {
@EventHandler
private void onTick(TickEvent.Pre event) {
if (mc.options.jumpKey.isPressed()) {
- ((IVec3d) mc.player.getVelocity()).setY(jetpackSpeed.get());
+ ((IVec3d) mc.player.getVelocity()).meteor$setY(jetpackSpeed.get());
}
}
diff --git a/src/main/java/anticope/rejects/modules/KnockbackPlus.java b/src/main/java/anticope/rejects/modules/KnockbackPlus.java
index 4e73513b..b53e5e6d 100644
--- a/src/main/java/anticope/rejects/modules/KnockbackPlus.java
+++ b/src/main/java/anticope/rejects/modules/KnockbackPlus.java
@@ -31,8 +31,8 @@ public KnockbackPlus() {
@EventHandler
private void onSendPacket(PacketEvent.Send event) {
- if (event.packet instanceof IPlayerInteractEntityC2SPacket packet && packet.getType() == PlayerInteractEntityC2SPacket.InteractType.ATTACK) {
- Entity entity = packet.getEntity();
+ if (event.packet instanceof IPlayerInteractEntityC2SPacket packet && packet.meteor$getType() == PlayerInteractEntityC2SPacket.InteractType.ATTACK) {
+ Entity entity = packet.meteor$getEntity();
if (!(entity instanceof LivingEntity) || (entity != Modules.get().get(KillAura.class).getTarget() && ka.get()))
return;
diff --git a/src/main/java/anticope/rejects/modules/LawnBot.java b/src/main/java/anticope/rejects/modules/LawnBot.java
new file mode 100644
index 00000000..d2d0c11c
--- /dev/null
+++ b/src/main/java/anticope/rejects/modules/LawnBot.java
@@ -0,0 +1,98 @@
+package anticope.rejects.modules;
+
+import anticope.rejects.MeteorRejectsAddon;
+import meteordevelopment.meteorclient.events.world.TickEvent;
+import meteordevelopment.meteorclient.settings.*;
+import meteordevelopment.meteorclient.systems.modules.Module;
+import meteordevelopment.meteorclient.utils.player.InvUtils;
+import meteordevelopment.orbit.EventHandler;
+import net.minecraft.block.*;
+import net.minecraft.item.Item;
+import net.minecraft.item.Items;
+import net.minecraft.screen.slot.SlotActionType;
+import net.minecraft.util.Hand;
+import net.minecraft.util.hit.BlockHitResult;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.util.math.Vec3d;
+
+import java.util.ArrayList;
+import java.util.List;
+
+//TODO: add settings to find/use shovel, delay, range ?
+//https://github.com/DustinRepo/JexClient/blob/main/src/main/java/me/dustin/jex/feature/mod/impl/world/LawnBot.java
+public class LawnBot extends Module {
+ private final ArrayList myceliumSpots = new ArrayList<>();
+ private final SettingGroup sgGeneral = settings.getDefaultGroup();
+
+ private final Setting
> blockWhitelist = sgGeneral.add(new BlockListSetting.Builder()
+ .name("block-whitelist")
+ .description("Which blocks to replace with grass.")
+ .defaultValue()
+ .filter(this::grassFilter)
+ .build()
+ );
+
+ public LawnBot() {
+ super(MeteorRejectsAddon.CATEGORY, "lawnbot", "Replace a variety of dirt-type blocks with grass");
+ }
+
+ @EventHandler
+ private void onTick(TickEvent.Post event) {
+ Item grassBlockItem = Items.GRASS_BLOCK;
+ int grassCount = InvUtils.find(grassBlockItem).count();
+ if (grassCount == 0) {
+ return;
+ }
+
+ int grassHotbarSlot = InvUtils.findInHotbar((itemStack -> itemStack.getItem() == grassBlockItem)).slot();
+ if (grassHotbarSlot == -1) {
+ int grassInvSlot = InvUtils.find((itemStack -> itemStack.getItem() == grassBlockItem)).slot();
+ if (grassInvSlot == -1)
+ return;
+
+ mc.interactionManager.clickSlot(mc.player.currentScreenHandler.syncId, grassInvSlot < 9 ? grassInvSlot + 36 : grassInvSlot, 8, SlotActionType.SWAP, mc.player);
+ return;
+ }
+ for (int i = 0; i < myceliumSpots.size(); i++) {
+ BlockPos pos = myceliumSpots.get(i);
+ Block block = mc.world.getBlockState(pos).getBlock();
+ double distance = mc.player.getPos().distanceTo(new Vec3d(pos.getX(), pos.getY(), pos.getZ()));
+ if (block == Blocks.AIR && distance <= 5) {
+ mc.player.getInventory().selectedSlot = grassHotbarSlot;
+ mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(new Vec3d(pos.getX(), pos.getY(), pos.getZ()), Direction.UP, pos, false));
+ return;
+ } else if (!blockWhitelist.get().contains(block)) {
+ myceliumSpots.remove(i);
+ }
+ }
+ for (int i = 0; i < myceliumSpots.size(); i++) {
+ BlockPos pos = myceliumSpots.get(i);
+ Block block = mc.world.getBlockState(pos).getBlock();
+ double distance = mc.player.getPos().distanceTo(new Vec3d(pos.getX(), pos.getY(), pos.getZ()));
+ if (blockWhitelist.get().contains(block) && distance <= 5) {
+ mc.interactionManager.updateBlockBreakingProgress(pos, Direction.UP);
+ return;
+ }
+ }
+ myceliumSpots.clear();
+ for (int x = -5; x < 5; x++) {
+ for (int y = -3; y < 3; y++) {
+ for (int z = -5; z < 5; z++) {
+ BlockPos pos = mc.player.getBlockPos().add(x, y, z);
+ if (blockWhitelist.get().contains(mc.world.getBlockState(pos).getBlock())) {
+ myceliumSpots.add(pos);
+ }
+ }
+ }
+ }
+ }
+
+ private boolean grassFilter(Block block) {
+ return block == Blocks.MYCELIUM ||
+ block == Blocks.PODZOL ||
+ block == Blocks.DIRT_PATH ||
+ block == Blocks.COARSE_DIRT ||
+ block == Blocks.ROOTED_DIRT;
+ }
+}
diff --git a/src/main/java/anticope/rejects/modules/NewChunks.java b/src/main/java/anticope/rejects/modules/NewChunks.java
index ebc2ac08..87f4c783 100644
--- a/src/main/java/anticope/rejects/modules/NewChunks.java
+++ b/src/main/java/anticope/rejects/modules/NewChunks.java
@@ -17,11 +17,15 @@
import net.minecraft.util.math.Box;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.Direction;
+import net.minecraft.util.math.Vec3d;
+import net.minecraft.world.Heightmap;
import net.minecraft.world.chunk.WorldChunk;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
/*
Ported from: https://github.com/BleachDrinker420/BleachHack/blob/master/BleachHack-Fabric-1.16/src/main/java/bleach/hack/module/mods/NewChunks.java
@@ -92,6 +96,7 @@ public class NewChunks extends Module {
private final Set newChunks = Collections.synchronizedSet(new HashSet<>());
private final Set oldChunks = Collections.synchronizedSet(new HashSet<>());
private static final Direction[] searchDirs = new Direction[] { Direction.EAST, Direction.NORTH, Direction.WEST, Direction.SOUTH, Direction.UP };
+ private final Executor taskExecutor = Executors.newSingleThreadExecutor();
public NewChunks() {
super(MeteorRejectsAddon.CATEGORY,"new-chunks", "Detects completely new chunks using certain traits of them");
@@ -112,7 +117,7 @@ private void onRender(Render3DEvent event) {
synchronized (newChunks) {
for (ChunkPos c : newChunks) {
if (mc.getCameraEntity().getBlockPos().isWithinDistance(c.getStartPos(), 1024)) {
- render(new Box(c.getStartPos(), c.getStartPos().add(16, renderHeight.get(), 16)), newChunksSideColor.get(), newChunksLineColor.get(), shapeMode.get(), event);
+ render(new Box(Vec3d.of(c.getStartPos()), Vec3d.of(c.getStartPos().add(16, renderHeight.get(), 16))), newChunksSideColor.get(), newChunksLineColor.get(), shapeMode.get(), event);
}
}
}
@@ -122,7 +127,7 @@ private void onRender(Render3DEvent event) {
synchronized (oldChunks) {
for (ChunkPos c : oldChunks) {
if (mc.getCameraEntity().getBlockPos().isWithinDistance(c.getStartPos(), 1024)) {
- render(new Box(c.getStartPos(), c.getStartPos().add(16, renderHeight.get(), 16)), oldChunksSideColor.get(), oldChunksLineColor.get(), shapeMode.get(), event);
+ render(new Box(Vec3d.of(c.getStartPos()), Vec3d.of(c.getStartPos().add(16, renderHeight.get(), 16))), oldChunksSideColor.get(), oldChunksLineColor.get(), shapeMode.get(), event);
}
}
}
@@ -171,20 +176,20 @@ else if (event.packet instanceof BlockUpdateS2CPacket) {
else if (event.packet instanceof ChunkDataS2CPacket && mc.world != null) {
ChunkDataS2CPacket packet = (ChunkDataS2CPacket) event.packet;
- ChunkPos pos = new ChunkPos(packet.getX(), packet.getZ());
+ ChunkPos pos = new ChunkPos(packet.getChunkX(), packet.getChunkZ());
- if (!newChunks.contains(pos) && mc.world.getChunkManager().getChunk(packet.getX(), packet.getZ()) == null) {
+ if (!newChunks.contains(pos) && mc.world.getChunkManager().getChunk(packet.getChunkX(), packet.getChunkZ()) == null) {
WorldChunk chunk = new WorldChunk(mc.world, pos);
try {
- chunk.loadFromPacket(packet.getChunkData().getSectionsDataBuf(), new NbtCompound(), packet.getChunkData().getBlockEntities(packet.getX(), packet.getZ()));
+ taskExecutor.execute(() -> chunk.loadFromPacket(packet.getChunkData().getSectionsDataBuf(), new NbtCompound(), packet.getChunkData().getBlockEntities(packet.getChunkX(), packet.getChunkZ())));
} catch (ArrayIndexOutOfBoundsException e) {
return;
}
for (int x = 0; x < 16; x++) {
- for (int y = mc.world.getBottomY(); y < mc.world.getTopY(); y++) {
- for (int z = 0; z < 16; z++) {
+ for (int z = 0; z < 16; z++) {
+ for (int y = mc.world.getBottomY(); y < mc.world.getTopY(Heightmap.Type.MOTION_BLOCKING, x, z); y++) {
FluidState fluid = chunk.getFluidState(x, y, z);
if (!fluid.isEmpty() && !fluid.isStill()) {
diff --git a/src/main/java/anticope/rejects/modules/NoJumpDelay.java b/src/main/java/anticope/rejects/modules/NoJumpDelay.java
index 6776ac1e..4f381416 100644
--- a/src/main/java/anticope/rejects/modules/NoJumpDelay.java
+++ b/src/main/java/anticope/rejects/modules/NoJumpDelay.java
@@ -4,13 +4,8 @@
import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.mixin.LivingEntityAccessor;
import meteordevelopment.orbit.EventHandler;
-import meteordevelopment.meteorclient.systems.modules.Categories;
import meteordevelopment.meteorclient.systems.modules.Module;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
public class NoJumpDelay extends Module {
public NoJumpDelay() {
diff --git a/src/main/java/anticope/rejects/modules/ObsidianFarm.java b/src/main/java/anticope/rejects/modules/ObsidianFarm.java
index 931c60b2..d628b755 100644
--- a/src/main/java/anticope/rejects/modules/ObsidianFarm.java
+++ b/src/main/java/anticope/rejects/modules/ObsidianFarm.java
@@ -7,6 +7,7 @@
import meteordevelopment.meteorclient.systems.modules.player.AutoEat;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.block.Blocks;
+import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
@@ -40,7 +41,7 @@ private void onTick(TickEvent.Post event) {
return;
}
if (!allowBreakAgain) return;
- if ((mc.player.isUsingItem() || Modules.get().get(AutoEat.class).isActive()) && (mc.player.getOffHandStack().getItem().isFood() || mc.player.getMainHandStack().getItem().isFood()))
+ if ((mc.player.isUsingItem() || Modules.get().get(AutoEat.class).isActive()) && (mc.player.getOffHandStack().contains(DataComponentTypes.FOOD) || mc.player.getMainHandStack().contains(DataComponentTypes.FOOD)))
return;
if(mc.player.getMainHandStack().getItem() != Items.NETHERITE_PICKAXE && mc.player.getMainHandStack().getItem() != Items.DIAMOND_PICKAXE) {
@@ -65,7 +66,6 @@ private void onTick(TickEvent.Post event) {
}
}
-
private BlockPos findObsidian() {
List blocksList = new ArrayList<>();
@@ -106,14 +106,12 @@ private BlockPos findObsidian() {
return null;
}
-
private int findPickAxe() {
- int result = -1;
for (int i = 0; i < 9; i++) {
if (mc.player.getInventory().getStack(i).getItem() == Items.NETHERITE_PICKAXE) return i;
- if (mc.player.getInventory().getStack(i).getItem() == Items.DIAMOND_PICKAXE) result = i;
+ if (mc.player.getInventory().getStack(i).getItem() == Items.DIAMOND_PICKAXE) return i;
}
- return result;
+ return -1;
}
diff --git a/src/main/java/anticope/rejects/modules/OreSim.java b/src/main/java/anticope/rejects/modules/OreSim.java
index c62e3be6..6e137893 100755
--- a/src/main/java/anticope/rejects/modules/OreSim.java
+++ b/src/main/java/anticope/rejects/modules/OreSim.java
@@ -7,30 +7,36 @@
import anticope.rejects.utils.seeds.Seed;
import anticope.rejects.utils.seeds.Seeds;
import baritone.api.BaritoneAPI;
-import com.seedfinding.mccore.version.MCVersion;
import meteordevelopment.meteorclient.events.render.Render3DEvent;
+import meteordevelopment.meteorclient.events.world.BlockUpdateEvent;
import meteordevelopment.meteorclient.events.world.ChunkDataEvent;
import meteordevelopment.meteorclient.events.world.TickEvent;
+import meteordevelopment.meteorclient.pathing.BaritoneUtils;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module;
+import meteordevelopment.meteorclient.utils.Utils;
+import meteordevelopment.meteorclient.utils.player.PlayerUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.world.ClientWorld;
-import net.minecraft.registry.RegistryKeys;
-import net.minecraft.util.Identifier;
+import net.minecraft.registry.RegistryKey;
import net.minecraft.util.math.*;
import net.minecraft.util.math.random.ChunkRandom;
import net.minecraft.world.Heightmap;
+import net.minecraft.world.biome.Biome;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraft.world.chunk.ChunkSection;
import net.minecraft.world.chunk.ChunkStatus;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
public class OreSim extends Module {
- private final HashMap>> chunkRenderers = new HashMap<>();
+ private final Map>> chunkRenderers = new ConcurrentHashMap<>();
private Seed worldSeed = null;
- private List oreConfig;
- public ArrayList oreGoals = new ArrayList<>();
- private ChunkPos prevOffset = new ChunkPos(0, 0);
+ private Map, List> oreConfig;
+ public List oreGoals = new ArrayList<>();
public enum AirCheck {
ON_LOAD,
@@ -39,7 +45,6 @@ public enum AirCheck {
}
private final SettingGroup sgGeneral = settings.getDefaultGroup();
- private final SettingGroup sgOres = settings.createGroup("Ores");
private final Setting horizontalRadius = sgGeneral.add(new IntSetting.Builder()
.name("chunk-range")
@@ -67,11 +72,12 @@ public enum AirCheck {
public OreSim() {
super(MeteorRejectsAddon.CATEGORY, "ore-sim", "Xray on crack.");
+ SettingGroup sgOres = settings.createGroup("Ores");
Ore.oreSettings.forEach(sgOres::add);
}
public boolean baritone() {
- return isActive() && baritone.get();
+ return isActive() && baritone.get() && BaritoneUtils.IS_AVAILABLE;
}
@EventHandler
@@ -97,16 +103,15 @@ private void onRender(Render3DEvent event) {
}
private void renderChunk(int x, int z, Render3DEvent event) {
- long chunkKey = (long) x + ((long) z << 32);
+ long chunkKey = ChunkPos.toLong(x,z);
if (chunkRenderers.containsKey(chunkKey)) {
- for (Ore ore : oreConfig) {
- if (ore.enabled.get()) {
- if (!chunkRenderers.get(chunkKey).containsKey(ore)) {
- continue;
- }
- for (Vec3d pos : chunkRenderers.get(chunkKey).get(ore)) {
- event.renderer.boxLines(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1, ore.color, 0);
+ Map> chunk = chunkRenderers.get(chunkKey);
+
+ for (Map.Entry> oreRenders : chunk.entrySet()) {
+ if (oreRenders.getKey().active.get()) {
+ for (Vec3d pos : oreRenders.getValue()) {
+ event.renderer.boxLines(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1, oreRenders.getKey().color, 0);
}
}
}
@@ -114,40 +119,23 @@ private void renderChunk(int x, int z, Render3DEvent event) {
}
@EventHandler
- private void onTick(TickEvent.Pre event) {
- if (mc.player == null || mc.world == null || oreConfig == null) return;
+ private void onBlockUpdate(BlockUpdateEvent event) {
+ if (airCheck.get() != AirCheck.RECHECK || event.newState.isOpaque()) return;
- if (airCheck.get() == AirCheck.RECHECK) {
- long chunkX = mc.player.getChunkPos().x;
- long chunkZ = mc.player.getChunkPos().z;
- ClientWorld world = mc.world;
- int renderdistance = mc.options.getViewDistance().getValue();
-
- //maybe another config option? But its already crowded
- int chunkCounter = 5;
-
- loop:
- while (true) {
- for (long offsetX = prevOffset.x; offsetX <= renderdistance; offsetX++) {
- for (long offsetZ = prevOffset.z; offsetZ <= renderdistance; offsetZ++) {
- prevOffset = new ChunkPos((int) offsetX, (int) offsetZ);
- if (chunkCounter <= 0) {
- break loop;
- }
- long chunkKey = (chunkX + offsetX) + ((chunkZ + offsetZ) << 32);
-
- if (chunkRenderers.containsKey(chunkKey)) {
- chunkRenderers.get(chunkKey).values().forEach(oreSet -> oreSet.removeIf(ore -> !world.getBlockState(new BlockPos((int) ore.x, (int) ore.y, (int) ore.z)).isOpaque()));
- }
- chunkCounter--;
- }
- prevOffset = new ChunkPos((int) offsetX, -renderdistance);
- }
- prevOffset = new ChunkPos(-renderdistance, -renderdistance);
+ long chunkKey = ChunkPos.toLong(event.pos);
+ if (chunkRenderers.containsKey(chunkKey)) {
+ Vec3d pos = Vec3d.of(event.pos);
+ for (var ore : chunkRenderers.get(chunkKey).values()) {
+ ore.remove(pos);
}
}
+ }
+
+ @EventHandler
+ private void onTick(TickEvent.Pre event) {
+ if (mc.player == null || mc.world == null || oreConfig == null) return;
- if (baritone.get() && BaritoneAPI.getProvider().getPrimaryBaritone().getMineProcess().isActive()) {
+ if (baritone() && BaritoneAPI.getProvider().getPrimaryBaritone().getMineProcess().isActive()) {
oreGoals.clear();
var chunkPos = mc.player.getChunkPos();
int rangeVal = 4;
@@ -164,18 +152,15 @@ private void onTick(TickEvent.Pre event) {
private ArrayList addToBaritone(int chunkX, int chunkZ) {
ArrayList baritoneGoals = new ArrayList<>();
- long chunkKey = (long) chunkX + ((long) chunkZ << 32);
- if (!this.chunkRenderers.containsKey(chunkKey)) {
- return baritoneGoals;
- } else {
- this.oreConfig.stream().filter((config) -> config.enabled.get()).forEach((ore) -> chunkRenderers
- .get(chunkKey)
- .getOrDefault(ore, new HashSet<>())
- .stream()
+ long chunkKey = ChunkPos.toLong(chunkX, chunkZ);
+ if (this.chunkRenderers.containsKey(chunkKey)) {
+ this.chunkRenderers.get(chunkKey).entrySet().stream()
+ .filter(entry -> entry.getKey().active.get())
+ .flatMap(entry -> entry.getValue().stream())
.map(BlockPos::ofFloored)
- .forEach(baritoneGoals::add));
- return baritoneGoals;
+ .forEach(baritoneGoals::add);
}
+ return baritoneGoals;
}
@Override
@@ -187,6 +172,12 @@ public void onActivate() {
reload();
}
+ @Override
+ public void onDeactivate() {
+ this.chunkRenderers.clear();
+ this.oreConfig = null;
+ }
+
@EventHandler
private void onSeedChanged(SeedChangedEvent event) {
reload();
@@ -198,18 +189,12 @@ private void onPlayerRespawn(PlayerRespawnEvent event) {
}
private void loadVisibleChunks() {
- int renderdistance = mc.options.getViewDistance().getValue();
-
if (mc.player == null) {
return;
}
- int playerChunkX = mc.player.getChunkPos().x;
- int playerChunkZ = mc.player.getChunkPos().z;
- for (int i = playerChunkX - renderdistance; i < playerChunkX + renderdistance; i++) {
- for (int j = playerChunkZ - renderdistance; j < playerChunkZ + renderdistance; j++) {
- doMathOnChunk(i, j);
- }
+ for (Chunk chunk : Utils.chunks(false)) {
+ doMathOnChunk(chunk);
}
}
@@ -217,12 +202,7 @@ private void reload() {
Seed seed = Seeds.get().getSeed();
if (seed == null) return;
worldSeed = seed;
- oreConfig = Ore.getConfig(Seeds.get().getSeed().version);
- if (oreConfig == null) {
- error("Ore Sim only works with seeds from version 1.14 or higher. (Current seed is from version " + Seeds.get().getSeed().version.toString() + ")");
- this.toggle();
- return;
- }
+ oreConfig = Ore.getRegistry(PlayerUtils.getDimension());
chunkRenderers.clear();
if (mc.world != null && worldSeed != null) {
@@ -232,11 +212,13 @@ private void reload() {
@EventHandler
public void onChunkData(ChunkDataEvent event) {
- doMathOnChunk(event.chunk.getPos().x, event.chunk.getPos().z);
+ doMathOnChunk(event.chunk());
}
- private void doMathOnChunk(int chunkX, int chunkZ) {
- long chunkKey = (long) chunkX + ((long) chunkZ << 32);
+ private void doMathOnChunk(Chunk chunk) {
+
+ var chunkPos = chunk.getPos();
+ long chunkKey = chunkPos.toLong();
ClientWorld world = mc.world;
@@ -244,84 +226,53 @@ private void doMathOnChunk(int chunkX, int chunkZ) {
return;
}
- if (world.getChunkManager().getChunk(chunkX, chunkZ, ChunkStatus.FULL, false) == null) {
- return;
- }
-
- chunkX = chunkX << 4;
- chunkZ = chunkZ << 4;
-
-
- ChunkRandom random = new ChunkRandom(ChunkRandom.RandomProvider.LEGACY.create(0));
+ Set> biomes = new HashSet<>();
+ ChunkPos.stream(chunkPos, 1).forEach(chunkPosx -> {
+ Chunk chunkxx = world.getChunk(chunkPosx.x, chunkPosx.z, ChunkStatus.BIOMES, false);
+ if (chunkxx == null) return;
- if (worldSeed.version.isNewerOrEqualTo(MCVersion.v1_18)) { //1.18 and above
- random = new ChunkRandom(ChunkRandom.RandomProvider.XOROSHIRO.create(0));
- }
+ for(ChunkSection chunkSection : chunkxx.getSectionArray()) {
+ chunkSection.getBiomeContainer().forEachValue(entry -> biomes.add(entry.getKey().get()));
+ }
+ });
+ Set oreSet = biomes.stream().flatMap(b -> getDefaultOres(b).stream()).collect(Collectors.toSet());
- HashMap> h = new HashMap<>();
+ int chunkX = chunkPos.x << 4;
+ int chunkZ = chunkPos.z << 4;
+ ChunkRandom random = new ChunkRandom(ChunkRandom.RandomProvider.XOROSHIRO.create(0));
long populationSeed = random.setPopulationSeed(worldSeed.seed, chunkX, chunkZ);
+ HashMap> h = new HashMap<>();
- var optional = world.getBiomeAccess().getBiomeForNoiseGen(new BlockPos(chunkX, 0, chunkZ)).getKeyOrValue();
- Identifier id = (optional.right().isPresent()) ? world.getRegistryManager().get(RegistryKeys.BIOME).getId(optional.right().get()) : optional.left().get().getValue();
- if (id == null) {
- error("Something went wrong, you may have some mods that mess with world generation");
- toggle();
- return;
- }
- String biomeName = id.getPath();
- Identifier dimensionName = world.getDimension().effects();
-
- for (Ore ore : oreConfig) {
-
- if (!dimensionName.getPath().equals(ore.dimension.getPath())) {
- continue;
- }
+ for (Ore ore : oreSet) {
HashSet ores = new HashSet<>();
- int index;
- if (ore.index.containsKey(biomeName)) {
- index = ore.index.get(biomeName);
- } else {
- index = ore.index.get("default");
- }
- if (index < 0) {
- continue;
- }
-
- random.setDecoratorSeed(populationSeed, index, ore.step);
+ random.setDecoratorSeed(populationSeed, ore.index, ore.step);
int repeat = ore.count.get(random);
for (int i = 0; i < repeat; i++) {
- if (ore.chance != 1F && random.nextFloat() >= ore.chance) {
+ if (ore.rarity != 1F && random.nextFloat() >= 1/ore.rarity) {
continue;
}
int x = random.nextInt(16) + chunkX;
- int z;
- int y;
- if (worldSeed.version.isBetween(MCVersion.v1_14, MCVersion.v1_14_4)) {
- y = ore.depthAverage ? random.nextInt(ore.maxY) + random.nextInt(ore.maxY) - ore.maxY : random.nextInt(ore.maxY - ore.minY);
- z = random.nextInt(16) + chunkZ;
- } else {
- z = random.nextInt(16) + chunkZ;
- y = ore.depthAverage ? random.nextInt(ore.maxY) + random.nextInt(ore.maxY) - ore.maxY : random.nextInt(ore.maxY - ore.minY);
+ int z = random.nextInt(16) + chunkZ;
+ int y = ore.heightProvider.get(random, ore.heightContext);
+ BlockPos origin = new BlockPos(x,y,z);
+
+ RegistryKey biome = chunk.getBiomeForNoiseGen(x,y,z).getKey().get();
+
+ if (!getDefaultOres(biome).contains(ore)) {
+ continue;
}
- y += ore.minY;
-
- switch (ore.generator) {
- case DEFAULT ->
- ores.addAll(generateNormal(world, random, new BlockPos(x, y, z), ore.size, ore.discardOnAir));
- case EMERALD -> {
- if (airCheck.get() == AirCheck.OFF || world.getBlockState(new BlockPos(x, y, z)).isOpaque()) {
- ores.add(new Vec3d(x, y, z));
- }
- }
- case NO_SURFACE -> ores.addAll(generateHidden(world, random, new BlockPos(x, y, z), ore.size));
- default -> System.out.println(ore.type + " has some unknown generator. Fix it!");
+
+ if (ore.scattered) {
+ ores.addAll(generateHidden(world, random, origin, ore.size));
+ } else {
+ ores.addAll(generateNormal(world, random, origin, ore.size, ore.discardOnAirChance));
}
}
if (!ores.isEmpty()) {
@@ -331,6 +282,14 @@ private void doMathOnChunk(int chunkX, int chunkZ) {
chunkRenderers.put(chunkKey, h);
}
+ private List getDefaultOres(RegistryKey biomeRegistryKey) {
+ if (oreConfig.containsKey(biomeRegistryKey)) {
+ return oreConfig.get(biomeRegistryKey);
+ } else {
+ return this.oreConfig.values().stream().findAny().get();
+ }
+ }
+
// ====================================
// Mojang code
// ====================================
diff --git a/src/main/java/anticope/rejects/modules/PacketFly.java b/src/main/java/anticope/rejects/modules/PacketFly.java
index 16339740..6f8fa705 100644
--- a/src/main/java/anticope/rejects/modules/PacketFly.java
+++ b/src/main/java/anticope/rejects/modules/PacketFly.java
@@ -4,11 +4,11 @@
import meteordevelopment.meteorclient.events.entity.player.PlayerMoveEvent;
import meteordevelopment.meteorclient.events.entity.player.SendMovementPacketsEvent;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
-import meteordevelopment.meteorclient.mixin.PlayerPositionLookS2CPacketAccessor;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.player.PlayerUtils;
import meteordevelopment.orbit.EventHandler;
+import net.minecraft.entity.player.PlayerPosition;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.c2s.play.TeleportConfirmC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
@@ -128,7 +128,7 @@ public void onSendMovementPackets(SendMovementPacketsEvent.Pre event) {
double speed = 0.0;
boolean checkCollisionBoxes = checkHitBoxes();
- speed = mc.player.input.jumping && (checkCollisionBoxes || !(mc.player.input.movementForward != 0.0 || mc.player.input.movementSideways != 0.0)) ? (antiKick.get() && !checkCollisionBoxes ? (resetCounter(downDelayFlying.get()) ? -0.032 : verticalSpeed.get()/20) : verticalSpeed.get()/20) : (mc.player.input.sneaking ? verticalSpeed.get()/-20 : (!checkCollisionBoxes ? (resetCounter(downDelay.get()) ? (antiKick.get() ? -0.04 : 0.0) : 0.0) : 0.0));
+ speed = mc.player.input.playerInput.jump() && (checkCollisionBoxes || !(mc.player.input.movementForward != 0.0 || mc.player.input.movementSideways != 0.0)) ? (antiKick.get() && !checkCollisionBoxes ? (resetCounter(downDelayFlying.get()) ? -0.032 : verticalSpeed.get()/20) : verticalSpeed.get()/20) : (mc.player.input.playerInput.sneak() ? verticalSpeed.get()/-20 : (!checkCollisionBoxes ? (resetCounter(downDelay.get()) ? (antiKick.get() ? -0.04 : 0.0) : 0.0) : 0.0));
Vec3d horizontal = PlayerUtils.getHorizontalVelocity(horizontalSpeed.get());
@@ -154,12 +154,17 @@ public void onPacketSent(PacketEvent.Send event) {
public void onPacketReceive(PacketEvent.Receive event) {
if (event.packet instanceof PlayerPositionLookS2CPacket && !(mc.player == null || mc.world == null)) {
PlayerPositionLookS2CPacket packet = (PlayerPositionLookS2CPacket) event.packet;
+ PlayerPosition oldPos = packet.change();
if (setYaw.get()) {
- ((PlayerPositionLookS2CPacketAccessor) event.packet).setPitch(mc.player.getPitch());
- ((PlayerPositionLookS2CPacketAccessor) event.packet).setYaw(mc.player.getYaw());
+ PlayerPosition newPos = new PlayerPosition(oldPos.position(), oldPos.deltaMovement(), mc.player.getYaw(), mc.player.getPitch());
+ event.packet = PlayerPositionLookS2CPacket.of(
+ packet.teleportId(),
+ newPos,
+ packet.relatives()
+ );
}
if (setID.get()) {
- teleportID = packet.getTeleportId();
+ teleportID = packet.teleportId();
}
}
}
@@ -180,9 +185,9 @@ private void sendPackets(double x, double y, double z, boolean teleport) {
Vec3d vec = new Vec3d(x, y, z);
Vec3d position = mc.player.getPos().add(vec);
Vec3d outOfBoundsVec = outOfBoundsVec(vec, position);
- packetSender(new PlayerMoveC2SPacket.PositionAndOnGround(position.x, position.y, position.z, mc.player.isOnGround()));
+ packetSender(new PlayerMoveC2SPacket.PositionAndOnGround(position.x, position.y, position.z, mc.player.isOnGround(), mc.player.horizontalCollision));
if (invalidPacket.get()) {
- packetSender(new PlayerMoveC2SPacket.PositionAndOnGround(outOfBoundsVec.x, outOfBoundsVec.y, outOfBoundsVec.z, mc.player.isOnGround()));
+ packetSender(new PlayerMoveC2SPacket.PositionAndOnGround(outOfBoundsVec.x, outOfBoundsVec.y, outOfBoundsVec.z, mc.player.isOnGround(), mc.player.horizontalCollision));
}
if (setPos.get()) {
mc.player.setPos(position.x, position.y, position.z);
diff --git a/src/main/java/anticope/rejects/modules/Rendering.java b/src/main/java/anticope/rejects/modules/Rendering.java
index a6186fd0..bbc7c85b 100644
--- a/src/main/java/anticope/rejects/modules/Rendering.java
+++ b/src/main/java/anticope/rejects/modules/Rendering.java
@@ -7,38 +7,17 @@
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module;
import net.minecraft.client.gl.PostEffectProcessor;
+import net.minecraft.client.render.DefaultFramebufferSet;
import net.minecraft.util.Identifier;
-import java.io.IOException;
-
public class Rendering extends Module {
public enum Shader {
None,
- Notch,
- FXAA,
- Art,
- Bumpy,
- Blobs,
- Blobs2,
- Pencil,
- Vibrant,
- Deconverge,
- Flip,
- Invert,
- NTSC,
- Outline,
- Phosphor,
- Scanline,
- Sobel,
- Bits,
- Desaturate,
- Green,
Blur,
- Wobble,
- Antialias,
Creeper,
- Spider
+ Invert,
+ Spider,
}
private final SettingGroup sgInvisible = settings.createGroup("Invisible");
@@ -102,17 +81,16 @@ public void onDeactivate() {
}
public void onChanged(Shader s) {
- String name;
- if (s == Shader.Vibrant) name = "color_convolve";
- else if (s == Shader.Scanline) name = "scan_pincushion";
- else name = s.toString().toLowerCase();
- Identifier shaderID = new Identifier(String.format("shaders/post/%s.json", name));
- try {
- PostEffectProcessor shader = new PostEffectProcessor(mc.getTextureManager(), mc.getResourceManager(), mc.getFramebuffer(), shaderID);
- this.shader = shader;
- } catch (IOException e) {
+ if (mc.world == null) return;
+ String name = s.toString().toLowerCase();
+
+ if (name.equals("none")) {
this.shader = null;
+ return;
}
+
+ Identifier shaderID = Identifier.ofVanilla(name);
+ this.shader = mc.getShaderLoader().loadPostEffect(shaderID, DefaultFramebufferSet.MAIN_ONLY);
}
public boolean renderStructureVoid() {
diff --git a/src/main/java/anticope/rejects/modules/RoboWalk.java b/src/main/java/anticope/rejects/modules/RoboWalk.java
index 23208cbe..50d317d9 100644
--- a/src/main/java/anticope/rejects/modules/RoboWalk.java
+++ b/src/main/java/anticope/rejects/modules/RoboWalk.java
@@ -8,6 +8,7 @@
import meteordevelopment.orbit.EventHandler;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.c2s.play.VehicleMoveC2SPacket;
+import net.minecraft.util.math.Vec3d;
public class RoboWalk extends Module {
public RoboWalk() {
@@ -30,11 +31,11 @@ private void onPacketSend(PacketEvent.Send event) {
((PlayerMoveC2SPacketAccessor) packet).setX(x);
((PlayerMoveC2SPacketAccessor) packet).setZ(z);
} else if (event.packet instanceof VehicleMoveC2SPacket packet) {
- double x = smooth(packet.getX());
- double z = smooth(packet.getZ());
+ Vec3d pos = ((VehicleMoveC2SPacketAccessor) (Object) packet).getPosition();
+ double x = smooth(pos.getX());
+ double z = smooth(pos.getZ());
- ((VehicleMoveC2SPacketAccessor) packet).setX(x);
- ((VehicleMoveC2SPacketAccessor) packet).setZ(z);
+ event.packet = VehicleMoveC2SPacketAccessor.create(new Vec3d(x, pos.getY(), z), packet.yaw(), packet.pitch(), packet.onGround());
}
}
}
diff --git a/src/main/java/anticope/rejects/modules/ShieldBypass.java b/src/main/java/anticope/rejects/modules/ShieldBypass.java
index 36e8f2b1..4cbec7d7 100644
--- a/src/main/java/anticope/rejects/modules/ShieldBypass.java
+++ b/src/main/java/anticope/rejects/modules/ShieldBypass.java
@@ -81,13 +81,13 @@ public void bypass(Entity target, Cancellable event) {
event.cancel();
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(newPos.getX(), newPos.getY(), newPos.getZ(), true));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(newPos.getX(), newPos.getY(), newPos.getZ(), true, false));
mc.getNetworkHandler().sendPacket(PlayerInteractEntityC2SPacket.attack(e, mc.player.isSneaking()));
mc.getNetworkHandler().sendPacket(new HandSwingC2SPacket(mc.player.getActiveHand()));
mc.player.resetLastAttackedTicks();
- mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), true));
+ mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), true, mc.player.horizontalCollision));
}
}
}
diff --git a/src/main/java/anticope/rejects/modules/SkeletonESP.java b/src/main/java/anticope/rejects/modules/SkeletonESP.java
index 22731eb8..b293bf16 100644
--- a/src/main/java/anticope/rejects/modules/SkeletonESP.java
+++ b/src/main/java/anticope/rejects/modules/SkeletonESP.java
@@ -17,12 +17,14 @@
import meteordevelopment.meteorclient.utils.render.color.SettingColor;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.option.Perspective;
import net.minecraft.client.render.*;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.PlayerEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
+import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
@@ -61,7 +63,7 @@ private void onRender(Render3DEvent event) {
MatrixStack matrixStack = event.matrices;
float g = event.tickDelta;
- RenderSystem.setShader(GameRenderer::getPositionColorProgram);
+ RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableDepthTest();
@@ -79,8 +81,8 @@ private void onRender(Render3DEvent event) {
PlayerEntity playerEntity = (PlayerEntity) entity;
Vec3d footPos = getEntityRenderPosition(playerEntity, g);
- PlayerEntityRenderer livingEntityRenderer = (PlayerEntityRenderer) (LivingEntityRenderer, ?>) mc.getEntityRenderDispatcher().getRenderer(playerEntity);
- PlayerEntityModel playerEntityModel = (PlayerEntityModel) livingEntityRenderer.getModel();
+ PlayerEntityRenderer livingEntityRenderer = (PlayerEntityRenderer) (LivingEntityRenderer, ?, ?>) mc.getEntityRenderDispatcher().getRenderer(playerEntity);
+ PlayerEntityModel playerEntityModel = livingEntityRenderer.getModel();
float h = MathHelper.lerpAngleDegrees(g, playerEntity.prevBodyYaw, playerEntity.bodyYaw);
if (mc.player == entity && Rotations.rotationTimer < rotationHoldTicks) h = Rotations.serverYaw;
@@ -94,12 +96,17 @@ private void onRender(Render3DEvent event) {
float m = playerEntity.getPitch(g);
if (mc.player == entity && Rotations.rotationTimer < rotationHoldTicks) m = Rotations.serverPitch;
- playerEntityModel.animateModel(playerEntity, q, p, g);
- playerEntityModel.setAngles(playerEntity, q, p, o, k, m);
+ PlayerEntityRenderState renderState = new PlayerEntityRenderState();
+ renderState.limbFrequency = q;
+ renderState.limbAmplitudeMultiplier = p;
+ renderState.age = o;
+ renderState.yawDegrees = k;
+ renderState.pitch = m;
+ playerEntityModel.setAngles(renderState);
boolean swimming = playerEntity.isInSwimmingPose();
boolean sneaking = playerEntity.isSneaking();
- boolean flying = playerEntity.isFallFlying();
+ boolean flying = playerEntity.isGliding();
ModelPart head = playerEntityModel.head;
ModelPart leftArm = playerEntityModel.leftArm;
@@ -115,26 +122,26 @@ private void onRender(Render3DEvent event) {
matrixStack.multiply(new Quaternionf().setAngleAxis((90 + m) * Math.PI / 180F, -1, 0, 0));
if (swimming) matrixStack.translate(0, -0.95f, 0);
- BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
- bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR);
+ Tessellator tessellator = Tessellator.getInstance();
+ BufferBuilder bufferBuilder = tessellator.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR);
Matrix4f matrix4f = matrixStack.peek().getPositionMatrix();
- bufferBuilder.vertex(matrix4f, 0, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
- bufferBuilder.vertex(matrix4f, 0, sneaking ? 1.05f : 1.4f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();//spine
+ bufferBuilder.vertex(matrix4f, 0, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
+ bufferBuilder.vertex(matrix4f, 0, sneaking ? 1.05f : 1.4f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);//spine
- bufferBuilder.vertex(matrix4f, -0.37f, sneaking ? 1.05f : 1.35f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();//shoulders
- bufferBuilder.vertex(matrix4f, 0.37f, sneaking ? 1.05f : 1.35f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
+ bufferBuilder.vertex(matrix4f, -0.37f, sneaking ? 1.05f : 1.35f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);//shoulders
+ bufferBuilder.vertex(matrix4f, 0.37f, sneaking ? 1.05f : 1.35f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
- bufferBuilder.vertex(matrix4f, -0.15f, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();//pelvis
- bufferBuilder.vertex(matrix4f, 0.15f, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
+ bufferBuilder.vertex(matrix4f, -0.15f, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);//pelvis
+ bufferBuilder.vertex(matrix4f, 0.15f, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
// Head
matrixStack.push();
matrixStack.translate(0, sneaking ? 1.05f : 1.4f, 0);
rotate(matrixStack, head);
matrix4f = matrixStack.peek().getPositionMatrix();
- bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
- bufferBuilder.vertex(matrix4f, 0, 0.15f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
+ bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
+ bufferBuilder.vertex(matrix4f, 0, 0.15f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
matrixStack.pop();
// Right Leg
@@ -142,8 +149,8 @@ private void onRender(Render3DEvent event) {
matrixStack.translate(0.15f, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0);
rotate(matrixStack, rightLeg);
matrix4f = matrixStack.peek().getPositionMatrix();
- bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
- bufferBuilder.vertex(matrix4f, 0, -0.6f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
+ bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
+ bufferBuilder.vertex(matrix4f, 0, -0.6f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
matrixStack.pop();
// Left Leg
@@ -151,8 +158,8 @@ private void onRender(Render3DEvent event) {
matrixStack.translate(-0.15f, sneaking ? 0.6f : 0.7f, sneaking ? 0.23f : 0);
rotate(matrixStack, leftLeg);
matrix4f = matrixStack.peek().getPositionMatrix();
- bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
- bufferBuilder.vertex(matrix4f, 0, -0.6f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
+ bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
+ bufferBuilder.vertex(matrix4f, 0, -0.6f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
matrixStack.pop();
// Right Arm
@@ -160,8 +167,8 @@ private void onRender(Render3DEvent event) {
matrixStack.translate(0.37f, sneaking ? 1.05f : 1.35f, 0);
rotate(matrixStack, rightArm);
matrix4f = matrixStack.peek().getPositionMatrix();
- bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
- bufferBuilder.vertex(matrix4f, 0, -0.55f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
+ bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
+ bufferBuilder.vertex(matrix4f, 0, -0.55f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
matrixStack.pop();
// Left Arm
@@ -169,11 +176,11 @@ private void onRender(Render3DEvent event) {
matrixStack.translate(-0.37f, sneaking ? 1.05f : 1.35f, 0);
rotate(matrixStack, leftArm);
matrix4f = matrixStack.peek().getPositionMatrix();
- bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
- bufferBuilder.vertex(matrix4f, 0, -0.55f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a).next();
+ bufferBuilder.vertex(matrix4f, 0, 0, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
+ bufferBuilder.vertex(matrix4f, 0, -0.55f, 0).color(skeletonColor.r, skeletonColor.g, skeletonColor.b, skeletonColor.a);
matrixStack.pop();
- bufferBuilder.clear();
+ tessellator.clear();
BufferRenderer.drawWithGlobalProgram(bufferBuilder.end());
if (swimming) matrixStack.translate(0, 0.95f, 0);
@@ -189,7 +196,7 @@ private void onRender(Render3DEvent event) {
RenderSystem.disableBlend();
RenderSystem.enableDepthTest();
RenderSystem.depthMask(true);
- RenderSystem.setShader(GameRenderer::getPositionColorProgram);
+ RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
}
private void rotate(MatrixStack matrix, ModelPart modelPart) {
diff --git a/src/main/java/anticope/rejects/modules/SoundLocator.java b/src/main/java/anticope/rejects/modules/SoundLocator.java
index cb3b8783..9532b8f8 100644
--- a/src/main/java/anticope/rejects/modules/SoundLocator.java
+++ b/src/main/java/anticope/rejects/modules/SoundLocator.java
@@ -114,7 +114,7 @@ private void onPlaySound(PlaySoundEvent event) {
if(whitelist.get()) {
// Whitelist ON
for (SoundEvent sound : sounds.get()) {
- if (sound.getId().equals(event.sound.getId())) {
+ if (sound.id().equals(event.sound.getId())) {
printSound(event.sound);
break;
}
diff --git a/src/main/java/anticope/rejects/modules/TreeAura.java b/src/main/java/anticope/rejects/modules/TreeAura.java
index e1d41331..3507dd9f 100644
--- a/src/main/java/anticope/rejects/modules/TreeAura.java
+++ b/src/main/java/anticope/rejects/modules/TreeAura.java
@@ -1,6 +1,7 @@
package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon;
+import anticope.rejects.utils.WorldUtils;
import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module;
@@ -117,7 +118,7 @@ private void doBonemeal(BlockPos sapling) {
private boolean canPlant(BlockPos pos) {
Block b = mc.world.getBlockState(pos).getBlock();
- if (b.equals(Blocks.GRASS) || b.equals(Blocks.GRASS_BLOCK) || b.equals(Blocks.DIRT) || b.equals(Blocks.COARSE_DIRT)) {
+ if (b.equals(Blocks.SHORT_GRASS) || b.equals(Blocks.GRASS_BLOCK) || b.equals(Blocks.DIRT) || b.equals(Blocks.COARSE_DIRT)) {
final AtomicBoolean plant = new AtomicBoolean(true);
IntStream.rangeClosed(1, 5).forEach(i -> {
// Check above
@@ -139,22 +140,9 @@ private boolean canPlant(BlockPos pos) {
return false;
}
- private List getBlocks(BlockPos centerPos, int radius, int height) {
- ArrayList blocks = new ArrayList<>();
- for (int i = centerPos.getX() - radius; i < centerPos.getX() + radius; i++) {
- for (int j = centerPos.getY() - height; j < centerPos.getY() + height; j++) {
- for (int k = centerPos.getZ() - radius; k < centerPos.getZ() + radius; k++) {
- BlockPos pos = new BlockPos(i, j, k);
- if (distanceBetween(centerPos, pos) <= radius && !blocks.contains(pos)) blocks.add(pos);
- }
- }
- }
- return blocks;
- }
-
private List findSaplings(BlockPos centerPos, int radius, int height) {
ArrayList blocc = new ArrayList<>();
- List blocks = getBlocks(centerPos, radius, height);
+ List blocks = WorldUtils.getSphere(centerPos, radius, height);
for (BlockPos b : blocks) if (isSapling(b)) blocc.add(b);
return blocc;
}
@@ -169,7 +157,7 @@ private BlockPos findPlantedSapling() {
private List getPlantLocations(BlockPos centerPos, int radius, int height) {
ArrayList blocc = new ArrayList<>();
- List blocks = getBlocks(centerPos, radius, height);
+ List blocks = WorldUtils.getSphere(centerPos, radius, height);
for (BlockPos b : blocks) if (canPlant(b)) blocc.add(b);
return blocc;
}
diff --git a/src/main/java/anticope/rejects/modules/VehicleOneHit.java b/src/main/java/anticope/rejects/modules/VehicleOneHit.java
index ea8b4339..da88c031 100644
--- a/src/main/java/anticope/rejects/modules/VehicleOneHit.java
+++ b/src/main/java/anticope/rejects/modules/VehicleOneHit.java
@@ -25,24 +25,19 @@ public class VehicleOneHit extends Module {
.build()
);
- private boolean ignorePackets;
-
public VehicleOneHit() {
super(MeteorRejectsAddon.CATEGORY, "vehicle-one-hit", "Destroy vehicles with one hit.");
}
@EventHandler
private void onPacketSend(PacketEvent.Send event) {
- if (ignorePackets
- || !(event.packet instanceof PlayerInteractEntityC2SPacket)
- || !(mc.crosshairTarget instanceof EntityHitResult ehr)
- || (!(ehr.getEntity() instanceof AbstractMinecartEntity) && !(ehr.getEntity() instanceof BoatEntity))
+ if (!(event.packet instanceof PlayerInteractEntityC2SPacket)
+ || !(mc.crosshairTarget instanceof EntityHitResult ehr)
+ || (!(ehr.getEntity() instanceof AbstractMinecartEntity) && !(ehr.getEntity() instanceof BoatEntity))
) return;
- ignorePackets = true;
for (int i = 0; i < amount.get() - 1; i++) {
- mc.player.networkHandler.sendPacket(event.packet);
+ mc.player.networkHandler.getConnection().send(event.packet, null);
}
- ignorePackets = false;
}
}
\ No newline at end of file
diff --git a/src/main/java/anticope/rejects/utils/GiveUtils.java b/src/main/java/anticope/rejects/utils/GiveUtils.java
index 308ccd00..22065c85 100644
--- a/src/main/java/anticope/rejects/utils/GiveUtils.java
+++ b/src/main/java/anticope/rejects/utils/GiveUtils.java
@@ -1,19 +1,28 @@
package anticope.rejects.utils;
+import it.unimi.dsi.fastutil.ints.IntArrayList;
+import it.unimi.dsi.fastutil.ints.IntList;
+import net.minecraft.component.ComponentChanges;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.*;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.Enchantments;
+import net.minecraft.entity.effect.StatusEffect;
+import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtList;
import net.minecraft.nbt.StringNbtReader;
+import net.minecraft.registry.Registries;
+import net.minecraft.registry.Registry;
+import net.minecraft.registry.RegistryKeys;
+import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
+import java.util.*;
import java.util.function.Function;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
@@ -32,98 +41,122 @@ public class GiveUtils {
private final static SimpleCommandExceptionType NO_SPACE = new SimpleCommandExceptionType(Text.literal("No space in hotbar."));
private static final List HIDDEN_ENTITIES = Arrays.asList(
- new Identifier("giant"),
- new Identifier("ender_dragon"),
- new Identifier("wither"),
- new Identifier("iron_golem"),
- new Identifier("ender_dragon"),
- new Identifier("tnt_minecart"),
- new Identifier("lightning_bolt"));
+ Identifier.of("giant"),
+ Identifier.of("ender_dragon"),
+ Identifier.of("wither"),
+ Identifier.of("iron_golem"),
+ Identifier.of("ender_dragon"),
+ Identifier.of("tnt_minecart"),
+ Identifier.of("lightning_bolt"));
// Some ported from: https://github.com/BleachDrinker420/BleachHack/blob/master/BleachHack-Fabric-1.16/src/main/java/bleach/hack/command/commands/CmdGive.java
- private static final List> STRING_PRESETS = Arrays.asList(
- Triple.of("lag_spawner", Items.SPAWNER, "{BlockEntityTag:{MaxNearbyEntities:32767,RequiredPlayerRange:32767,SpawnCount:32767,MaxSpawnDelay:0,SpawnRange:32767,Delay:0,MinSpawnDelay:0}}"),
- Triple.of("tnt_spawner", Items.SPAWNER, "{BlockEntityTag:{MaxNearbyEntities:32767,RequiredPlayerRange:32767,SpawnCount:50,SpawnData:{Fuse:1,id:\"minecraft:tnt\"},MaxSpawnDelay:0,SpawnRange:10,Delay:0,MinSpawnDelay:0}}"),
- Triple.of("boat_spawner", Items.SPAWNER, "{BlockEntityTag:{SpawnData:{Type:\"jungle\",CustomName:'{\"text\":\"Boat\",\"color\":\"aqua\",\"bold\":true,\"italic\":true,\"underlined\":true}',Invulnerable:1b,id:\"minecraft:boat\",Glowing:1b,CustomNameVisible:1b},SpawnRange:10,SpawnCount:50}}"),
- Triple.of("pigs_egg", Items.CHICKEN_SPAWN_EGG, "{EntityTag:{MaxNearbyEntities:1000,RequiredPlayerRange:100,CustomDisplayTile:1b,DisplayState:{Properties:{hinge:\"left\",half:\"upper\",open:\"true\"},Name:\"minecraft:acacia_door\"},SpawnData:{id:\"minecraft:minecart\"},id:\"minecraft:spawner_minecart\",MaxSpawnDelay:0,Delay:1,MinSpawnDelay:0}}"),
- Triple.of("end_portal_arrow", Items.ELDER_GUARDIAN_SPAWN_EGG, "{EntityTag:{SoundEvent:\"block.end_portal.spawn\",pickup:1b,id:\"minecraft:arrow\"}}"),
- Triple.of("wither_spawn_arrow", Items.ELDER_GUARDIAN_SPAWN_EGG, "{EntityTag:{SoundEvent:\"entity.wither.spawn\",pickup:1b,id:\"minecraft:arrow\"}}"),
- Triple.of("eg_curse_arrow", Items.ELDER_GUARDIAN_SPAWN_EGG, "{EntityTag:{SoundEvent:\"entity.elder_guardian.curse\",pickup:1b,id:\"minecraft:arrow\"}}"),
- Triple.of("big_slime", Items.SLIME_SPAWN_EGG, "{EntityTag:{Size:50,id:\"minecraft:slime\"}}"),
- Triple.of("particle_area_expand", Items.SKELETON_SPAWN_EGG, "{EntityTag:{Particle:\"angry_villager\",Radius:1.0f,RadiusOnUse:1.0f,Duration:10000,id:\"minecraft:area_effect_cloud\",RadiusPerTick:10.0f}}"),
- Triple.of("armor_stand_spawner_minecart", Items.BAT_SPAWN_EGG, "{EntityTag:{SpawnData:{id:\"minecraft:armor_stand\"},id:\"minecraft:spawner_minecart\"}}"),
- Triple.of("dud_tnt", Items.DROWNED_SPAWN_EGG, "{EntityTag:{Fuse:30000,Invulnerable:1b,id:\"minecraft:tnt\"}}")
+ private static final List> ENTITY_PRESETS = Arrays.asList(
+ Triple.of("pigs_egg", Items.CHICKEN_SPAWN_EGG, "{MaxNearbyEntities:1000,RequiredPlayerRange:100,CustomDisplayTile:1b,DisplayState:{Properties:{hinge:\"left\",half:\"upper\",open:\"true\"},Name:\"minecraft:acacia_door\"},SpawnData:{id:\"minecraft:minecart\"},id:\"minecraft:spawner_minecart\",MaxSpawnDelay:0,Delay:1,MinSpawnDelay:0}"),
+ Triple.of("end_portal_arrow", Items.ELDER_GUARDIAN_SPAWN_EGG, "{SoundEvent:\"block.end_portal.spawn\",pickup:1b,id:\"minecraft:arrow\"}"),
+ Triple.of("wither_spawn_arrow", Items.ELDER_GUARDIAN_SPAWN_EGG, "{SoundEvent:\"entity.wither.spawn\",pickup:1b,id:\"minecraft:arrow\"}"),
+ Triple.of("eg_curse_arrow", Items.ELDER_GUARDIAN_SPAWN_EGG, "{SoundEvent:\"entity.elder_guardian.curse\",pickup:1b,id:\"minecraft:arrow\"}"),
+ Triple.of("big_slime", Items.SLIME_SPAWN_EGG, "{Size:50,id:\"minecraft:slime\"}"),
+ Triple.of("particle_area_expand", Items.SKELETON_SPAWN_EGG, "{Particle:\"angry_villager\",Radius:1.0f,RadiusOnUse:1.0f,Duration:10000,id:\"minecraft:area_effect_cloud\",RadiusPerTick:10.0f}"),
+ Triple.of("armor_stand_spawner_minecart", Items.BAT_SPAWN_EGG, "{SpawnData:{id:\"minecraft:armor_stand\"},id:\"minecraft:spawner_minecart\"}"),
+ Triple.of("dud_tnt", Items.DROWNED_SPAWN_EGG, "{Fuse:30000,Invulnerable:1b,id:\"minecraft:tnt\"}")
+ );
+
+ private static final List> BLOCK_PRESETS = Arrays.asList(
+ Triple.of("lag_spawner", Items.SPAWNER, "{MaxNearbyEntities:32767,RequiredPlayerRange:32767,SpawnCount:50,MaxSpawnDelay:0,id:\"minecraft:spawner\",SpawnRange:32767,Delay:0,MinSpawnDelay:0}"),
+ Triple.of("tnt_spawner", Items.SPAWNER, "{MaxNearbyEntities:32767,RequiredPlayerRange:32767,SpawnCount:50,SpawnData:{entity:{id:\"minecraft:tnt\",fuse:1}},MaxSpawnDelay:0,id:\"minecraft:mob_spawner\",SpawnRange:10,Delay:0,MinSpawnDelay:0}"),
+ Triple.of("boat_spawner", Items.SPAWNER, "{SpawnCount:50,SpawnData:{entity:{Type:\"jungle\",CustomName:'{\"bold\":true,\"color\":\"aqua\",\"italic\":true,\"text\":\"Boat\",\"underlined\":true}',Invulnerable:1b,id:\"minecraft:boat\",Glowing:1b,CustomNameVisible:1b}},id:\"minecraft:spawner\",SpawnRange:10}")
);
private static final Random random = new Random();
+ private static Registry enchantmentRegistry;
public static void giveItem(ItemStack item) throws CommandSyntaxException {
if (!mc.player.getAbilities().creativeMode) throw NOT_IN_CREATIVE.create();
-
+
if (!mc.player.getInventory().insertStack(item)) {
throw NO_SPACE.create();
}
}
static {
- STRING_PRESETS.forEach((preset) -> {
+ ENTITY_PRESETS.forEach((preset) -> {
+ PRESETS.put(preset.getLeft(), (preview) -> {
+ if (preview) preset.getMiddle().getDefaultStack();
+ ItemStack item = preset.getMiddle().getDefaultStack();
+ try {
+ item.set(DataComponentTypes.ENTITY_DATA, NbtComponent.of(StringNbtReader.parse(preset.getRight())));
+ } catch (CommandSyntaxException e) { }
+ item.set(DataComponentTypes.CUSTOM_NAME, Text.literal(toName(preset.getLeft())));
+ return item;
+ });
+ });
+
+ BLOCK_PRESETS.forEach((preset) -> {
PRESETS.put(preset.getLeft(), (preview) -> {
if (preview) preset.getMiddle().getDefaultStack();
ItemStack item = preset.getMiddle().getDefaultStack();
try {
- item.setNbt(StringNbtReader.parse(preset.getRight()));
+ item.set(DataComponentTypes.BLOCK_ENTITY_DATA, NbtComponent.of(StringNbtReader.parse(preset.getRight())));
} catch (CommandSyntaxException e) { }
- item.setCustomName(Text.literal(toName(preset.getLeft())));
+ item.set(DataComponentTypes.CUSTOM_NAME, Text.literal(toName(preset.getLeft())));
return item;
});
});
+ // TODO update
PRESETS.put("force_op", (preview) -> {
if (preview) Items.SPIDER_SPAWN_EGG.getDefaultStack();
ItemStack item = Items.SPIDER_SPAWN_EGG.getDefaultStack();
String nick = mc.player.getName().getString();
+
try {
- item.setNbt(StringNbtReader.parse("{EntityTag:{Time:1,BlockState:{Name:\"minecraft:spawner\"},id:\"minecraft:falling_block\",TileEntityData:{SpawnCount:20,SpawnData:{id:\"minecraft:villager\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:redstone_block\"},id:\"minecraft:falling_block\",Passengers:[{id:\"minecraft:fox\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:activator_rail\"},id:\"minecraft:falling_block\",Passengers:[{Command:\"execute as @e run op "+nick+"\",id:\"minecraft:command_block_minecart\"}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]},MaxSpawnDelay:100,SpawnRange:10,Delay:1,MinSpawnDelay:100}}}"));
+ item.set(DataComponentTypes.ENTITY_DATA, NbtComponent.of(StringNbtReader.parse("{Time:1,BlockState:{Name:\"minecraft:spawner\"},id:\"minecraft:falling_block\",TileEntityData:{SpawnCount:20,SpawnData:{id:\"minecraft:villager\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:redstone_block\"},id:\"minecraft:falling_block\",Passengers:[{id:\"minecraft:fox\",Passengers:[{Time:1,BlockState:{Name:\"minecraft:activator_rail\"},id:\"minecraft:falling_block\",Passengers:[{Command:\"execute as @e run op "+nick+"\",id:\"minecraft:command_block_minecart\"}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]}]}],NoAI:1b,Health:1.0f,ActiveEffects:[{Duration:1000,Id:20b,Amplifier:4b}]},MaxSpawnDelay:100,SpawnRange:10,Delay:1,MinSpawnDelay:100}}")));
} catch (CommandSyntaxException e) { }
- item.setCustomName(Text.literal("Force OP"));
+ item.set(DataComponentTypes.CUSTOM_NAME, Text.of("Force OP"));
return item;
});
+ // Thanks wurst !
PRESETS.put("troll_potion", (preview) -> {
if (preview) Items.LINGERING_POTION.getDefaultStack();
ItemStack stack = Items.LINGERING_POTION.getDefaultStack();
- NbtList effects = new NbtList();
+ ArrayList effects = new ArrayList<>();
for(int i = 1; i <= 31; i++)
{
- NbtCompound effect = new NbtCompound();
- effect.putByte("Amplifier", (byte)127);
- effect.putInt("Duration", Integer.MAX_VALUE);
- effect.putInt("Id", i);
- effects.add(effect);
+ StatusEffect effect =
+ Registries.STATUS_EFFECT.getEntry(i).get().value();
+ RegistryEntry entry =
+ Registries.STATUS_EFFECT.getEntry(effect);
+ effects.add(new StatusEffectInstance(entry, Integer.MAX_VALUE,
+ Integer.MAX_VALUE));
}
- NbtCompound nbt = new NbtCompound();
- nbt.put("CustomPotionEffects", effects);
- stack.setNbt(nbt);
- stack.setCustomName(Text.literal("Lingering Potion of Trolling"));
+
+ stack.set(DataComponentTypes.POTION_CONTENTS, new PotionContentsComponent(Optional.empty(), Optional.empty(),
+ effects, Optional.empty()));
+ stack.set(DataComponentTypes.CUSTOM_NAME, Text.literal("Lingering Potion of Trolling"));
return stack;
});
PRESETS.put("32k", (preview) -> {
- if (preview) return Items.DIAMOND_SWORD.getDefaultStack();
- ItemStack stack =Items.DIAMOND_SWORD.getDefaultStack();
- NbtList enchants = new NbtList();
- addEnchant(enchants, "minecraft:sharpness");
- addEnchant(enchants, "minecraft:knockback");
- addEnchant(enchants, "minecraft:fire_aspect");
- addEnchant(enchants, "minecraft:looting", (short)10);
- addEnchant(enchants, "minecraft:sweeping", (short)3);
- addEnchant(enchants, "minecraft:unbreaking");
- addEnchant(enchants, "minecraft:mending", (short)1);
- addEnchant(enchants, "minecraft:vanishing_curse", (short)1);
- NbtCompound nbt = new NbtCompound();
- nbt.put("Enchantments", enchants);
- stack.setNbt(nbt);
- stack.setCustomName(Text.literal("Bonk"));
+ enchantmentRegistry = mc.world.getRegistryManager().getOrThrow(RegistryKeys.ENCHANTMENT);
+
+ if (preview || enchantmentRegistry == null) return Items.DIAMOND_SWORD.getDefaultStack();
+ ItemStack stack = Items.DIAMOND_SWORD.getDefaultStack();
+
+ stack.apply(DataComponentTypes.ENCHANTMENTS, ItemEnchantmentsComponent.DEFAULT, component -> {
+ ItemEnchantmentsComponent.Builder builder = new ItemEnchantmentsComponent.Builder(component);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.SHARPNESS), 255);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.KNOCKBACK), 255);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.FIRE_ASPECT), 255);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.LOOTING), 10);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.SWEEPING_EDGE), 3);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.UNBREAKING), 255);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.MENDING), 1);
+ builder.add(enchantmentRegistry.getOrThrow(Enchantments.VANISHING_CURSE), 1);
+ return builder.build();
+ });
+
+ stack.set(DataComponentTypes.CUSTOM_NAME, Text.literal("Bonk"));
return stack;
});
@@ -135,45 +168,43 @@ public static void giveItem(ItemStack item) throws CommandSyntaxException {
for(int i = 0; i < 40000; i++)
nbtList.add(new NbtList());
nbtCompound.put("nothingsuspicioushere", nbtList);
- stack.setNbt(nbtCompound);
- stack.setCustomName(Text.literal("Copy Me"));
+ stack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbtCompound));
+ stack.set(DataComponentTypes.CUSTOM_NAME, Text.literal("Copy Me"));
return stack;
});
PRESETS.put("firework", (preview) -> {
if (preview) return Items.FIREWORK_ROCKET.getDefaultStack();
-
ItemStack firework = new ItemStack(Items.FIREWORK_ROCKET);
- NbtCompound baseCompound = new NbtCompound();
- NbtCompound tagCompound = new NbtCompound();
- NbtList explosionList = new NbtList();
- for(int i = 0; i < 5000; i++)
- {
- NbtCompound explosionCompound = new NbtCompound();
- explosionCompound.putByte("Type", (byte)random.nextInt(5));
+ IntList colors = new IntArrayList(new int[]{1973019,11743532,3887386,5320730,2437522,8073150,2651799,11250603,4408131,14188952,4312372,14602026,6719955,12801229,15435844,15790320});
+ ArrayList explosions = new ArrayList<>();
+ for(int i = 0; i < 200; i++) {
+ explosions.add(new FireworkExplosionComponent(FireworkExplosionComponent.Type.byId(random.nextInt(5)), colors, colors, true, true));
+ }
- int colors[] = {1973019,11743532,3887386,5320730,2437522,8073150,2651799,11250603,4408131,14188952,4312372,14602026,6719955,12801229,15435844,15790320};
+ var changes = ComponentChanges.builder()
+ .add(DataComponentTypes.FIREWORKS, new FireworksComponent(1, explosions))
+ .build();
+
+ firework.applyChanges(changes);
- explosionCompound.putIntArray("Colors", colors);
- explosionList.add(explosionCompound);
- }
- tagCompound.putInt("Flight", 0);
- tagCompound.put("Explosions", explosionList);
- baseCompound.put("Fireworks", tagCompound);
- firework.setNbt(baseCompound);
return firework;
});
-
+
HIDDEN_ENTITIES.forEach((id) -> {
PRESETS.put(id.getPath()+"_spawn_egg", (preview) -> {
if (preview) return Items.PIG_SPAWN_EGG.getDefaultStack();
ItemStack egg = Items.PIG_SPAWN_EGG.getDefaultStack();
- NbtCompound tag = new NbtCompound();
+
NbtCompound entityTag = new NbtCompound();
entityTag.putString("id", id.toString());
- tag.put("EntityTag", entityTag);
- egg.setNbt(tag);
- egg.setCustomName(Text.literal(String.format("%s", toName(id.getPath()))));
+
+ var changes = ComponentChanges.builder()
+ .add(DataComponentTypes.CUSTOM_NAME, Text.literal(String.format("%s", toName(id.getPath()))))
+ .add(DataComponentTypes.ENTITY_DATA, NbtComponent.of(entityTag))
+ .build();
+
+ egg.applyChanges(changes);
return egg;
});
});
@@ -191,14 +222,4 @@ private static String toName(Object id) {
return WordUtils.capitalizeFully(id.toString().replace("_", " "));
}
- private static void addEnchant(NbtList tag, String id, short v) {
- NbtCompound enchant = new NbtCompound();
- enchant.putShort("lvl", v);
- enchant.putString("id", id);
- tag.add(enchant);
- }
-
- private static void addEnchant(NbtList tag, String id) {
- addEnchant(tag, id, Short.MAX_VALUE);
- }
}
diff --git a/src/main/java/anticope/rejects/utils/Ore.java b/src/main/java/anticope/rejects/utils/Ore.java
index d2ef6265..311b3830 100755
--- a/src/main/java/anticope/rejects/utils/Ore.java
+++ b/src/main/java/anticope/rejects/utils/Ore.java
@@ -1,16 +1,36 @@
package anticope.rejects.utils;
+import anticope.rejects.mixin.CountPlacementModifierAccessor;
+import anticope.rejects.mixin.HeightRangePlacementModifierAccessor;
+import anticope.rejects.mixin.RarityFilterPlacementModifierAccessor;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.utils.render.color.Color;
-import com.seedfinding.mccore.version.MCVersion;
-import net.minecraft.util.Identifier;
+import meteordevelopment.meteorclient.utils.world.Dimension;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.registry.*;
+import net.minecraft.registry.entry.RegistryEntry;
+
+import net.minecraft.registry.entry.RegistryEntryList;
import net.minecraft.util.math.intprovider.ConstantIntProvider;
import net.minecraft.util.math.intprovider.IntProvider;
-import net.minecraft.util.math.intprovider.UniformIntProvider;
-import net.minecraft.world.dimension.DimensionTypes;
+
+import net.minecraft.world.HeightLimitView;
+import net.minecraft.world.biome.Biome;
+import net.minecraft.world.dimension.DimensionOptions;
+import net.minecraft.world.gen.HeightContext;
+import net.minecraft.world.gen.WorldPresets;
+import net.minecraft.world.gen.feature.*;
+import net.minecraft.world.gen.feature.util.PlacedFeatureIndexer;
+import net.minecraft.world.gen.heightprovider.HeightProvider;
+import net.minecraft.world.gen.placementmodifier.CountPlacementModifier;
+import net.minecraft.world.gen.placementmodifier.HeightRangePlacementModifier;
+import net.minecraft.world.gen.placementmodifier.PlacementModifier;
+import net.minecraft.world.gen.placementmodifier.RarityFilterPlacementModifier;
+
import java.util.*;
+
public class Ore {
private static final Setting coal = new BoolSetting.Builder().name("Coal").build();
@@ -24,210 +44,132 @@ public class Ore {
private static final Setting quartz = new BoolSetting.Builder().name("Quartz").build();
private static final Setting debris = new BoolSetting.Builder().name("Ancient Debris").build();
public static final List> oreSettings = new ArrayList<>(Arrays.asList(coal, iron, gold, redstone, diamond, lapis, copper, emerald, quartz, debris));
- public final Type type;
- public final Identifier dimension;
- public final Map index;
- public final boolean depthAverage;
- public final Generator generator;
- public final int size;
- public final Setting enabled;
- public final Color color;
- public int step;
- public IntProvider count;
- public int minY;
- public int maxY;
- public float discardOnAir;
- public float chance;
-
- Ore(Type type, Identifier dimension, Map index, int step, IntProvider count, float chance, boolean depthAverage, int minY, int maxY, Generator generator, int size, float discardOnAir, Setting enabled, Color color) {
- this.type = type;
- this.dimension = dimension;
- this.index = index;
- this.step = step;
- this.count = count;
- this.depthAverage = depthAverage;
- this.minY = minY;
- this.maxY = maxY;
- this.generator = generator;
- this.size = size;
- this.enabled = enabled;
- this.color = color;
- this.discardOnAir = discardOnAir;
- this.chance = chance;
- }
-
- Ore(Type type, Identifier dimension, int index, int step, IntProvider count, float chance, boolean depthAverage, int minY, int maxY, Generator generator, int size, float discardOnAir, Setting enabled, Color color) {
- this(type, dimension, indexToMap(index), step, count, chance, depthAverage, minY, maxY, generator, size, discardOnAir, enabled, color);
- }
- Ore(Type type, Identifier dimension, int index, int step, IntProvider count, boolean depthAverage, int minY, int maxY,
- @SuppressWarnings("SameParameterValue") Generator generator, int size, Setting enabled, Color color) {
- this(type, dimension, indexToMap(index), step, count, 1F, depthAverage, minY, maxY, generator, size, 0F, enabled, color);
+ public static Map, List> getRegistry(Dimension dimension) {
+
+ RegistryWrapper.WrapperLookup registry = BuiltinRegistries.createWrapperLookup();
+ RegistryWrapper.Impl features = registry.getOrThrow(RegistryKeys.PLACED_FEATURE);
+ var reg = registry.getOrThrow(RegistryKeys.WORLD_PRESET).getOrThrow(WorldPresets.DEFAULT).value().createDimensionsRegistryHolder().dimensions();
+
+ var dim = switch (dimension) {
+ case Overworld -> reg.get(DimensionOptions.OVERWORLD);
+ case Nether -> reg.get(DimensionOptions.NETHER);
+ case End -> reg.get(DimensionOptions.END);
+ };
+
+ var biomes = dim.chunkGenerator().getBiomeSource().getBiomes();
+ var biomes1 = biomes.stream().toList();
+
+ List indexer = PlacedFeatureIndexer.collectIndexedFeatures(
+ biomes1, biomeEntry -> biomeEntry.value().getGenerationSettings().getFeatures(), true
+ );
+
+
+ Map featureToOre = new HashMap<>();
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_COAL_LOWER, 6, coal, new Color(47, 44, 54));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_COAL_UPPER, 6, coal, new Color(47, 44, 54));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_IRON_MIDDLE, 6, iron, new Color(236, 173, 119));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_IRON_SMALL, 6, iron, new Color(236, 173, 119));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_IRON_UPPER, 6, iron, new Color(236, 173, 119));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_GOLD, 6, gold, new Color(247, 229, 30));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_GOLD_LOWER, 6, gold, new Color(247, 229, 30));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_GOLD_EXTRA, 6, gold, new Color(247, 229, 30));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_GOLD_NETHER, 7, gold, new Color(247, 229, 30));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_GOLD_DELTAS, 7, gold, new Color(247, 229, 30));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_REDSTONE, 6, redstone, new Color(245, 7, 23));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_REDSTONE_LOWER, 6, redstone, new Color(245, 7, 23));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_DIAMOND, 6, diamond, new Color(33, 244, 255));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_DIAMOND_BURIED, 6, diamond, new Color(33, 244, 255));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_DIAMOND_LARGE, 6, diamond, new Color(33, 244, 255));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_DIAMOND_MEDIUM, 6, diamond, new Color(33, 244, 255));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_LAPIS, 6, lapis, new Color(8, 26, 189));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_LAPIS_BURIED, 6, lapis, new Color(8, 26, 189));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_COPPER, 6, copper, new Color(239, 151, 0));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_COPPER_LARGE, 6, copper, new Color(239, 151, 0));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_EMERALD, 6, emerald, new Color(27, 209, 45));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_QUARTZ_NETHER, 7, quartz, new Color(205, 205, 205));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_QUARTZ_DELTAS, 7, quartz, new Color(205, 205, 205));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_DEBRIS_SMALL, 7, debris, new Color(209, 27, 245));
+ registerOre(featureToOre, indexer, features, OrePlacedFeatures.ORE_ANCIENT_DEBRIS_LARGE, 7, debris, new Color(209, 27, 245));
+
+
+ Map, List> biomeOreMap = new HashMap<>();
+
+ biomes1.forEach(biome -> {
+ biomeOreMap.put(biome.getKey().get(), new ArrayList<>());
+ biome.value().getGenerationSettings().getFeatures().stream()
+ .flatMap(RegistryEntryList::stream)
+ .map(RegistryEntry::value)
+ .filter(featureToOre::containsKey)
+ .forEach(feature -> {
+ biomeOreMap.get(biome.getKey().get()).add(featureToOre.get(feature));
+ });
+ });
+ return biomeOreMap;
}
- Ore(Type type, Identifier dimension, Map index, int step, IntProvider count, boolean depthAverage, int minY, int maxY,
- @SuppressWarnings("SameParameterValue") Generator generator, int size, Setting enabled, Color color) {
- this(type, dimension, index, step, count, 1F, depthAverage, minY, maxY, generator, size, 0F, enabled, color);
- }
+ private static void registerOre(
+ Map map,
+ List indexer,
+ RegistryWrapper.Impl oreRegistry,
+ RegistryKey oreKey,
+ int genStep,
+ Setting active,
+ Color color
+ ) {
+ var orePlacement = oreRegistry.getOrThrow(oreKey).value();
- private static HashMap indexToMap(int index) {
- HashMap map = new HashMap<>();
- map.put("default", index);
- return map;
- }
-
- private static List V1_19() {
- return V1_18();
- }
+ int index = indexer.get(genStep).indexMapping().applyAsInt(orePlacement);
- private static List V1_18() {
- List ores = new ArrayList<>();
+ Ore ore = new Ore(orePlacement, genStep, index, active, color);
- HashMap extraGoldIndex = new HashMap<>();
- extraGoldIndex.put("default", -1);
- String[] extraGoldBiomes = new String[]{"badlands", "eroded_badlands", "wooded_badlands"};
- for (String extraGoldBiome : extraGoldBiomes) {
- extraGoldIndex.put(extraGoldBiome, 27);
- }
-
- HashMap emeraldIndex = new HashMap<>();
- emeraldIndex.put("default", -1);
- String[] emeraldBiomes = new String[]{"windswept_hills", "meadow", "grove", "jagged_peaks", "snowy_slopes", "frozen_peaks", "stony_peaks"};
- for (String emeraldBiome : emeraldBiomes) {
- emeraldIndex.put(emeraldBiome, 27);
- }
-
- ores.add(new Ore(Type.COAL, DimensionTypes.OVERWORLD_ID, 9, 6, ConstantIntProvider.create(30), false, 136, 320, Generator.DEFAULT, 17, coal, new Color(47, 44, 54)));
- ores.add(new Ore(Type.COAL, DimensionTypes.OVERWORLD_ID, 10, 6, ConstantIntProvider.create(20), 1F, true, 97, 97, Generator.DEFAULT, 17, 0.5F, coal, new Color(47, 44, 54)));
- ores.add(new Ore(Type.IRON, DimensionTypes.OVERWORLD_ID, 11, 6, ConstantIntProvider.create(90), true, 233, 153, Generator.DEFAULT, 9, iron, new Color(236, 173, 119)));
- ores.add(new Ore(Type.IRON, DimensionTypes.OVERWORLD_ID, 12, 6, ConstantIntProvider.create(10), true, 17, 41, Generator.DEFAULT, 9, iron, new Color(236, 173, 119)));
- ores.add(new Ore(Type.IRON, DimensionTypes.OVERWORLD_ID, 13, 6, ConstantIntProvider.create(10), false, -64, 73, Generator.DEFAULT, 4, iron, new Color(236, 173, 119)));
- ores.add(new Ore(Type.GOLD_EXTRA, DimensionTypes.OVERWORLD_ID, extraGoldIndex, 6, ConstantIntProvider.create(50), false, 32, 257, Generator.DEFAULT, 9, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.GOLD, DimensionTypes.OVERWORLD_ID, 14, 6, ConstantIntProvider.create(4), 1F, true, -15, 49, Generator.DEFAULT, 9, 0.5F, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.GOLD, DimensionTypes.OVERWORLD_ID, 15, 6, UniformIntProvider.create(0, 1), 1F, false, -64, -47, Generator.DEFAULT, 9, 0.5F, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.REDSTONE, DimensionTypes.OVERWORLD_ID, 16, 6, ConstantIntProvider.create(4), false, -64, 16, Generator.DEFAULT, 8, redstone, new Color(245, 7, 23)));
- ores.add(new Ore(Type.REDSTONE, DimensionTypes.OVERWORLD_ID, 17, 6, ConstantIntProvider.create(8), true, -63, 33, Generator.DEFAULT, 8, redstone, new Color(245, 7, 23)));
- ores.add(new Ore(Type.DIAMOND, DimensionTypes.OVERWORLD_ID, 18, 6, ConstantIntProvider.create(7), 1F, true, -63, 81, Generator.DEFAULT, 4, 0.5F, diamond, new Color(33, 244, 255)));
- ores.add(new Ore(Type.DIAMOND, DimensionTypes.OVERWORLD_ID, 19, 6, ConstantIntProvider.create(1), (1F / 9F), true, -63, 81, Generator.DEFAULT, 12, 0.7F, diamond, new Color(33, 244, 255)));
- ores.add(new Ore(Type.DIAMOND, DimensionTypes.OVERWORLD_ID, 20, 6, ConstantIntProvider.create(4), 1F, true, -63, 81, Generator.DEFAULT, 8, 1F, diamond, new Color(33, 244, 255)));
- ores.add(new Ore(Type.LAPIS, DimensionTypes.OVERWORLD_ID, 21, 6, ConstantIntProvider.create(2), true, 1, 33, Generator.DEFAULT, 7, lapis, new Color(8, 26, 189)));
- ores.add(new Ore(Type.LAPIS, DimensionTypes.OVERWORLD_ID, 22, 6, ConstantIntProvider.create(4), 1F, false, -64, 65, Generator.DEFAULT, 7, 1F, lapis, new Color(8, 26, 189)));
- ores.add(new Ore(Type.EMERALD, DimensionTypes.OVERWORLD_ID, emeraldIndex, 6, ConstantIntProvider.create(100), true, 233, 249, Generator.DEFAULT, 3, emerald, new Color(27, 209, 45)));
- //This only generates near dripstone caves. I'll need propper biome detection to get this right
- //ores.add(new Ore(Type.COPPER, "overworld", 23, 6, ConstantIntProvider.create(16), true, 49, 65, Generator.DEFAULT, 20, copper, new Color(239, 151, 0)));
- ores.add(new Ore(Type.COPPER, DimensionTypes.OVERWORLD_ID, 24, 6, ConstantIntProvider.create(16), true, 49, 65, Generator.DEFAULT, 10, copper, new Color(239, 151, 0)));
- ores.add(new Ore(Type.GOLD_NETHER, DimensionTypes.THE_NETHER_ID, Map.of("default", 19, "basalt_deltas", -1), 7, ConstantIntProvider.create(10), false, 10, 118, Generator.DEFAULT, 10, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.QUARTZ, DimensionTypes.THE_NETHER_ID, Map.of("default", 20, "basalt_deltas", -1), 7, ConstantIntProvider.create(16), false, 10, 118, Generator.DEFAULT, 14, quartz, new Color(205, 205, 205)));
- ores.add(new Ore(Type.GOLD_NETHER, DimensionTypes.THE_NETHER_ID, Map.of("default", -1, "basalt_deltas", 13), 7, ConstantIntProvider.create(20), false, 10, 118, Generator.DEFAULT, 10, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.QUARTZ, DimensionTypes.THE_NETHER_ID, Map.of("default", -1, "basalt_deltas", 14), 7, ConstantIntProvider.create(32), false, 10, 118, Generator.DEFAULT, 14, quartz, new Color(205, 205, 205)));
- ores.add(new Ore(Type.LDEBRIS, DimensionTypes.THE_NETHER_ID, 21, 7, ConstantIntProvider.create(1), true, 17, 9, Generator.NO_SURFACE, 3, debris, new Color(209, 27, 245)));
- ores.add(new Ore(Type.SDEBRIS, DimensionTypes.THE_NETHER_ID, 22, 7, ConstantIntProvider.create(1), false, 8, 120, Generator.NO_SURFACE, 2, debris, new Color(209, 27, 245)));
- return ores;
+ map.put(orePlacement, ore);
}
- private static List baseConfig() {
- List ores = new ArrayList<>();
- HashMap emeraldIndexes = new HashMap<>();
- emeraldIndexes.put("default", -1);
- String[] emeraldBiomes = new String[]{"mountains", "mountain_edge", "wooded_mountains", "gravelly_mountains", "modified_gravelly_mountains", "paper"};
- for (String emeraldBiome : emeraldBiomes) {
- emeraldIndexes.put(emeraldBiome, 17);
- }
- HashMap LDebrisIndexes = new HashMap<>();
- LDebrisIndexes.put("default", 15);
- LDebrisIndexes.put("crimson_forest", 12);
- LDebrisIndexes.put("warped_forest", 13);
- HashMap SDebrisIndexes = new HashMap<>();
- LDebrisIndexes.forEach((biome, index) -> SDebrisIndexes.put(biome, index + 1));
- HashMap extraGoldIndexes = new HashMap<>();
- extraGoldIndexes.put("default", -1);
- String[] extraGoldBiomes = new String[]{"badlands", "badlands_plateau", "modified_badlands_plateau", "wooded_badlands_plateau", "modified_wooded_badlands_plateau", "eroded_badlands", "paper"};
- for (String extraGoldBiome : extraGoldBiomes) {
- extraGoldIndexes.put(extraGoldBiome, 14);
- }
- ores.add(new Ore(Type.COAL, DimensionTypes.OVERWORLD_ID, 7, 6, ConstantIntProvider.create(20), false, 0, 128, Generator.DEFAULT, 20, coal, new Color(47, 44, 54)));
- ores.add(new Ore(Type.IRON,DimensionTypes.OVERWORLD_ID, 8, 6, ConstantIntProvider.create(20), false, 0, 64, Generator.DEFAULT, 9, iron, new Color(236, 173, 119)));
- ores.add(new Ore(Type.GOLD, DimensionTypes.OVERWORLD_ID, 9, 6, ConstantIntProvider.create(2), false, 0, 32, Generator.DEFAULT, 9, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.REDSTONE, DimensionTypes.OVERWORLD_ID, 10, 6, ConstantIntProvider.create(8), false, 0, 16, Generator.DEFAULT, 8, redstone, new Color(245, 7, 23)));
- ores.add(new Ore(Type.DIAMOND, DimensionTypes.OVERWORLD_ID, 11, 6, ConstantIntProvider.create(1), false, 0, 16, Generator.DEFAULT, 8, diamond, new Color(33, 244, 255)));
- ores.add(new Ore(Type.LAPIS, DimensionTypes.OVERWORLD_ID, 12, 6, ConstantIntProvider.create(1), true, 16, 16, Generator.DEFAULT, 7, lapis, new Color(8, 26, 189)));
- ores.add(new Ore(Type.COPPER, DimensionTypes.OVERWORLD_ID, 13, 6, ConstantIntProvider.create(6), true, 49, 49, Generator.DEFAULT, 10, copper, new Color(239, 151, 0)));
- ores.add(new Ore(Type.GOLD_EXTRA, DimensionTypes.OVERWORLD_ID, extraGoldIndexes, 6, ConstantIntProvider.create(20), false, 32, 80, Generator.DEFAULT, 9, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.EMERALD, DimensionTypes.OVERWORLD_ID, emeraldIndexes, 6, UniformIntProvider.create(6, 8), false, 4, 32, Generator.EMERALD, 1, emerald, new Color(27, 209, 45)));
- ores.add(new Ore(Type.GOLD_NETHER, DimensionTypes.THE_NETHER_ID, Map.of("default", 13, "basalt_deltas", -1), 7, ConstantIntProvider.create(10), false, 10, 118, Generator.DEFAULT, 10, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.QUARTZ, DimensionTypes.THE_NETHER_ID, Map.of("default", 14, "basalt_deltas", -1), 7, ConstantIntProvider.create(16), false, 10, 118, Generator.DEFAULT, 14, quartz, new Color(205, 205, 205)));
- ores.add(new Ore(Type.GOLD_NETHER, DimensionTypes.THE_NETHER_ID, Map.of("default", -1, "basalt_deltas", 13), 7, ConstantIntProvider.create(20), false, 10, 118, Generator.DEFAULT, 10, gold, new Color(247, 229, 30)));
- ores.add(new Ore(Type.QUARTZ, DimensionTypes.THE_NETHER_ID, Map.of("default", -1, "basalt_deltas", 14), 7, ConstantIntProvider.create(32), false, 10, 118, Generator.DEFAULT, 14, quartz, new Color(205, 205, 205)));
- ores.add(new Ore(Type.LDEBRIS, DimensionTypes.THE_NETHER_ID, LDebrisIndexes, 7, ConstantIntProvider.create(1), true, 17, 9, Generator.NO_SURFACE, 3, debris, new Color(209, 27, 245)));
- ores.add(new Ore(Type.SDEBRIS, DimensionTypes.THE_NETHER_ID, SDebrisIndexes, 7, ConstantIntProvider.create(1), false, 8, 120, Generator.NO_SURFACE, 2, debris, new Color(209, 27, 245)));
- return ores;
- }
+ public int step;
+ public int index;
+ public Setting active;
+ public IntProvider count = ConstantIntProvider.create(1);
+ public HeightProvider heightProvider;
+ public HeightContext heightContext;
+ public float rarity = 1;
+ public float discardOnAirChance;
+ public int size;
+ public Color color;
+ public boolean scattered;
+
+ private Ore(PlacedFeature feature, int step, int index, Setting active, Color color) {
+ this.step = step;
+ this.index = index;
+ this.active = active;
+ this.color = color;
+ int bottom = MinecraftClient.getInstance().world.getBottomY();
+ int height = MinecraftClient.getInstance().world.getDimension().logicalHeight();
+ this.heightContext = new HeightContext(null, HeightLimitView.create(bottom, height));
- private static List V1_17_1() {
- return baseConfig();
- }
+ for (PlacementModifier modifier : feature.placementModifiers()) {
+ if (modifier instanceof CountPlacementModifier) {
+ this.count = ((CountPlacementModifierAccessor) modifier).getCount();
- private static List V1_17() {
- List ores = baseConfig();
- for (Ore ore : ores) {
- if (ore.type.equals(Type.DIAMOND)) {
- ore.maxY = 17;
- }
- if (ore.type.equals(Type.EMERALD)) {
- ore.count = UniformIntProvider.create(6, 24);
- }
- }
- return ores;
- }
+ } else if (modifier instanceof HeightRangePlacementModifier) {
+ this.heightProvider = ((HeightRangePlacementModifierAccessor) modifier).getHeight();
- private static List V1_16() {
- List ores = baseConfig();
- ores.removeIf(ore -> ore.type.equals(Type.COPPER));
- for (Ore ore : ores) {
- if (ore.type == Type.EMERALD || ore.type == Type.GOLD_EXTRA) {
- ore.index.keySet().forEach(key -> ore.index.put(key, ore.index.get(key) - 3));
- } else if (ore.dimension == DimensionTypes.OVERWORLD_ID) {
- ore.index.keySet().forEach(key -> ore.index.put(key, ore.index.get(key) - 2));
- } else if (ore.type == Type.LDEBRIS) {
- ore.minY = 16;
- ore.maxY = 8;
+ } else if (modifier instanceof RarityFilterPlacementModifier) {
+ this.rarity = ((RarityFilterPlacementModifierAccessor) modifier).getChance();
}
}
- return ores;
- }
- private static List V1_15() {
- List ores = V1_16();
- ores.removeIf(ore -> ore.type == Type.SDEBRIS || ore.type == Type.LDEBRIS || ore.type == Type.GOLD_NETHER);
- for (Ore ore : ores) {
- ore.step -= 2;
- }
- return ores;
- }
+ FeatureConfig featureConfig = feature.feature().value().config();
- public static List getConfig(MCVersion version) {
- if (version.isNewerOrEqualTo(MCVersion.v1_19)) {
- return V1_19();
- } else if (version.isNewerOrEqualTo(MCVersion.v1_18)) {
- return V1_18();
- } else if (version.isNewerOrEqualTo(MCVersion.v1_17_1)) {
- return V1_17_1();
- } else if (version.isNewerOrEqualTo(MCVersion.v1_17)) {
- return V1_17();
- } else if (version.isNewerOrEqualTo(MCVersion.v1_16)) {
- return V1_16();
- } else if (version.isNewerOrEqualTo(MCVersion.v1_14)) {
- return V1_15();
+ if (featureConfig instanceof OreFeatureConfig oreFeatureConfig) {
+ this.discardOnAirChance = oreFeatureConfig.discardOnAirChance;
+ this.size = oreFeatureConfig.size;
} else {
- return null;
+ throw new IllegalStateException("config for " + feature + "is not OreFeatureConfig.class");
}
- }
-
- public enum Type {
- DIAMOND, REDSTONE, GOLD, IRON, COAL, EMERALD, SDEBRIS, LDEBRIS, LAPIS, COPPER, QUARTZ, GOLD_NETHER, GOLD_EXTRA
- }
- public enum Generator {
- DEFAULT, EMERALD, NO_SURFACE
+ if (feature.feature().value().feature() instanceof ScatteredOreFeature) {
+ this.scattered = true;
+ }
}
}
diff --git a/src/main/java/anticope/rejects/utils/RejectsUtils.java b/src/main/java/anticope/rejects/utils/RejectsUtils.java
index 3cc55586..0bb8c71e 100644
--- a/src/main/java/anticope/rejects/utils/RejectsUtils.java
+++ b/src/main/java/anticope/rejects/utils/RejectsUtils.java
@@ -70,9 +70,9 @@ public static float fullFlightMove(PlayerMoveEvent event, double speed, boolean
double xDir = Math.cos(Math.toRadians(dir + 90));
double zDir = Math.sin(Math.toRadians(dir + 90));
- ((IVec3d) event.movement).setXZ(xDir * speed, zDir * speed);
+ ((IVec3d) event.movement).meteor$setXZ(xDir * speed, zDir * speed);
} else {
- ((IVec3d) event.movement).setXZ(0, 0);
+ ((IVec3d) event.movement).meteor$setXZ(0, 0);
}
float ySpeed = 0;
@@ -81,7 +81,7 @@ public static float fullFlightMove(PlayerMoveEvent event, double speed, boolean
ySpeed += speed;
if (mc.options.sneakKey.isPressed())
ySpeed -= speed;
- ((IVec3d) event.movement).setY(verticalSpeedMatch ? ySpeed : ySpeed / 2);
+ ((IVec3d) event.movement).meteor$setY(verticalSpeedMatch ? ySpeed : ySpeed / 2);
return ySpeed;
}
diff --git a/src/main/java/anticope/rejects/utils/WorldGenUtils.java b/src/main/java/anticope/rejects/utils/WorldGenUtils.java
index d34ba83a..947830df 100644
--- a/src/main/java/anticope/rejects/utils/WorldGenUtils.java
+++ b/src/main/java/anticope/rejects/utils/WorldGenUtils.java
@@ -3,6 +3,8 @@
import anticope.rejects.utils.seeds.Seed;
import anticope.rejects.utils.seeds.Seeds;
import baritone.api.BaritoneAPI;
+import cubitect.Cubiomes;
+
import com.seedfinding.mcbiome.source.BiomeSource;
import com.seedfinding.mcfeature.misc.SlimeChunk;
import com.seedfinding.mcfeature.structure.*;
@@ -17,6 +19,8 @@
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.MapDecorationsComponent;
import net.minecraft.entity.Entity;
import net.minecraft.entity.mob.*;
import net.minecraft.entity.passive.IronGolemEntity;
@@ -24,7 +28,6 @@
import net.minecraft.entity.vehicle.ChestMinecartEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
-import net.minecraft.nbt.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
@@ -126,7 +129,20 @@ public enum Feature {
desert_pyramid
}
- public static BlockPos locateFeature(Feature feature, BlockPos center) {
+ public static BlockPos locateFeature(Cubiomes.StructureType cfeature, BlockPos center) {
+ Feature feature = switch (cfeature) {
+ case Treasure -> Feature.buried_treasure;
+ case Mansion -> Feature.mansion;
+ case Stronghold -> Feature.stronghold;
+ case Fortress -> Feature.nether_fortress;
+ case Monument -> Feature.ocean_monument;
+ case Bastion -> Feature.bastion_remnant;
+ case End_City -> Feature.end_city;
+ case Village -> Feature.village;
+ case Mineshaft -> Feature.mineshaft;
+ case Desert_Pyramid -> Feature.desert_pyramid;
+ default -> null;
+ };
Seed seed = Seeds.get().getSeed();
BlockPos pos = null;
if (!checkIfInDimension(getDimension(feature))) {
@@ -330,12 +346,14 @@ private static BlockPos toBlockPos(BPos pos) {
return new BlockPos(pos.getX(), pos.getY(), pos.getZ());
}
+ // TODO: check this lmao
private static boolean isValidMap(Feature feature, ItemStack stack) {
- if (!stack.hasNbt()) return false;
- if (!stack.getNbt().contains("display")) return false;
- NbtCompound displayTag = stack.getNbt().getCompound("display");
- if (!displayTag.contains("Name")) return false;
- String nameTag = displayTag.getString("Name");
+ if (stack.getComponents().isEmpty()) return false;
+ if (!stack.getComponents().contains(DataComponentTypes.MAP_DECORATIONS)) return false;
+ MapDecorationsComponent displayTag = stack.getDefaultComponents().get(DataComponentTypes.MAP_DECORATIONS);
+
+ if (!displayTag.toString().contains("Name")) return false;
+ String nameTag = String.valueOf(displayTag.decorations().get("Name"));
if (!nameTag.contains("translate")) return false;
if (feature == Feature.buried_treasure) {
@@ -349,15 +367,17 @@ private static boolean isValidMap(Feature feature, ItemStack stack) {
}
private static BlockPos getMapMarker(ItemStack stack) {
- if (!stack.hasNbt()) return null;
- if (!stack.getNbt().contains("Decorations")) return null;
- NbtList decorationsTag = stack.getNbt().getList("Decorations", NbtElement.COMPOUND_TYPE);
- if (decorationsTag.size() < 1) return null;
- NbtCompound iconTag = decorationsTag.getCompound(0);
+ if (stack.getComponents().isEmpty()) return null;
+ if (!stack.getDefaultComponents().contains(DataComponentTypes.MAP_DECORATIONS)) return null;
+
+ MapDecorationsComponent decorationsTag = stack.get(DataComponentTypes.MAP_DECORATIONS);
+ if (decorationsTag.decorations().isEmpty()) return null;
+ MapDecorationsComponent.Decoration iconTag = decorationsTag.decorations().get(0);
+ // check this
return new BlockPos(
- (int)iconTag.getDouble("x"),
- (int)iconTag.getDouble("y"),
- (int)iconTag.getDouble("z")
+ (int)iconTag.x(),
+ 0,
+ (int)iconTag.z()
);
}
}
diff --git a/src/main/java/anticope/rejects/utils/WorldUtils.java b/src/main/java/anticope/rejects/utils/WorldUtils.java
index 7d01c8f5..a2e2040e 100644
--- a/src/main/java/anticope/rejects/utils/WorldUtils.java
+++ b/src/main/java/anticope/rejects/utils/WorldUtils.java
@@ -41,13 +41,13 @@ public static double distanceBetween(BlockPos pos1, BlockPos pos2) {
public static boolean interact(BlockPos pos, FindItemResult findItemResult, boolean rotate) {
if (!findItemResult.found()) return false;
Runnable action = () -> {
- boolean wasSneaking = mc.player.input.sneaking;
- mc.player.input.sneaking = false;
+ boolean wasSneaking = mc.player.isSneaking();
+ mc.player.setSneaking(false);
InvUtils.swap(findItemResult.slot(), true);
mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(Vec3d.ofCenter(pos), Direction.UP, pos, false));
mc.player.swingHand(Hand.MAIN_HAND);
InvUtils.swapBack();
- mc.player.input.sneaking = wasSneaking;
+ mc.player.setSneaking(wasSneaking);
};
if (rotate) Rotations.rotate(Rotations.getYaw(pos), Rotations.getPitch(pos), -100, action);
else action.run();
diff --git a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java
index 628aa67d..83caa473 100644
--- a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java
+++ b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilAccount.java
@@ -7,7 +7,7 @@
import meteordevelopment.meteorclient.systems.accounts.Account;
import meteordevelopment.meteorclient.systems.accounts.AccountType;
import meteordevelopment.meteorclient.utils.misc.NbtException;
-import net.minecraft.client.util.Session;
+import net.minecraft.client.session.Session;
import net.minecraft.nbt.NbtCompound;
import static meteordevelopment.meteorclient.MeteorClient.mc;
@@ -27,7 +27,7 @@ public boolean fetchInfo() {
Session session = CustomYggdrasilLogin.login(name, password, server);
cache.username = session.getUsername();
- cache.uuid = session.getUuid();
+ cache.uuid = session.getUuidOrNull().toString();
return true;
} catch (AuthenticationException e) {
diff --git a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java
index 7602726d..c505df3a 100644
--- a/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java
+++ b/src/main/java/anticope/rejects/utils/accounts/CustomYggdrasilLogin.java
@@ -2,33 +2,33 @@
package anticope.rejects.utils.accounts;
-import com.google.common.collect.Iterables;
import com.google.gson.*;
import com.mojang.authlib.Environment;
-import com.mojang.authlib.GameProfile;
+import com.mojang.authlib.SignatureState;
import com.mojang.authlib.exceptions.AuthenticationException;
-import com.mojang.authlib.minecraft.InsecurePublicKeyException;
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
+import com.mojang.authlib.minecraft.MinecraftProfileTextures;
import com.mojang.authlib.properties.Property;
+import com.mojang.authlib.yggdrasil.ServicesKeyInfo;
import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService;
+import com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo;
import com.mojang.authlib.yggdrasil.response.MinecraftTexturesPayload;
import com.mojang.util.UUIDTypeAdapter;
import meteordevelopment.meteorclient.utils.network.Http;
-import net.minecraft.client.util.Session;
+import net.minecraft.client.session.Session;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.net.Proxy;
import java.nio.charset.StandardCharsets;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.X509EncodedKeySpec;
import java.util.*;
+import static meteordevelopment.meteorclient.MeteorClient.mc;
+
public class CustomYggdrasilLogin {
+ public static Environment localYggdrasilApi = new Environment("/sessionserver", "/minecraftservices", "Custom-Yggdrasil");
+
public static Session login(String name, String password, String server) throws AuthenticationException {
try {
String url = server + "/authserver/authenticate";
@@ -47,7 +47,7 @@ public static Session login(String name, String password, String server) throws
throw new AuthenticationException(json.get("errorMessage").getAsString());
}
String token = json.get("accessToken").getAsString();
- String uuid = json.get("selectedProfile").getAsJsonObject().get("id").getAsString();
+ UUID uuid = UUID.fromString(json.get("selectedProfile").getAsJsonObject().get("id").getAsString());
String username = json.get("selectedProfile").getAsJsonObject().get("name").getAsString();
return new Session(username, uuid, token, Optional.empty(), Optional.empty(), Session.AccountType.MOJANG);
} catch (Exception e) {
@@ -55,106 +55,65 @@ public static Session login(String name, String password, String server) throws
}
}
- public static class LocalYggdrasilApi implements Environment {
- private final String url;
-
- public LocalYggdrasilApi(String serverUrl) {
- this.url = serverUrl;
- }
-
- @Override
- public String getAuthHost() {
- return url + "/authserver";
- }
-
- @Override
- public String getAccountsHost() {
- return url + "/api";
- }
-
- @Override
- public String getSessionHost() {
- return url + "/sessionserver";
- }
-
- @Override
- public String getServicesHost() {
- return url + "/minecraftservices";
- }
-
- @Override
- public String getName() {
- return "Custom-Yggdrasil";
- }
-
- @Override
- public String asString() {
- return new StringJoiner(", ", "", "")
- .add("authHost='" + getAuthHost() + "'")
- .add("accountsHost='" + getAccountsHost() + "'")
- .add("sessionHost='" + getSessionHost() + "'")
- .add("servicesHost='" + getServicesHost() + "'")
- .add("name='" + getName() + "'")
- .toString();
- }
- }
-
public static class LocalYggdrasilMinecraftSessionService extends YggdrasilMinecraftSessionService {
private static final Logger LOGGER = LogManager.getLogger();
- private final PublicKey publicKey;
+ private final ServicesKeyInfo publicKey;
private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create();
public LocalYggdrasilMinecraftSessionService(YggdrasilAuthenticationService service, String serverUrl) {
- super(service, new LocalYggdrasilApi(serverUrl));
+ super(service.getServicesKeySet(), mc.getNetworkProxy(), localYggdrasilApi);
String data = Http.get(serverUrl).sendString();
JsonObject json = JsonParser.parseString(data).getAsJsonObject();
this.publicKey = getPublicKey(json.get("signaturePublickey").getAsString());
}
- private static PublicKey getPublicKey(String key) {
+ private static ServicesKeyInfo getPublicKey(String key) {
key = key.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");
try {
byte[] byteKey = Base64.getDecoder().decode(key.replace("\n", ""));
- X509EncodedKeySpec spec = new X509EncodedKeySpec(byteKey);
- KeyFactory factory = KeyFactory.getInstance("RSA");
- return factory.generatePublic(spec);
- } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
+ return YggdrasilServicesKeyInfo.parse(byteKey);
+ } catch (IllegalArgumentException e) {
e.printStackTrace();
}
return null;
}
- @Override
- public Map getTextures(final GameProfile profile, final boolean requireSecure) {
- final Property textureProperty = Iterables.getFirst(profile.getProperties().get("textures"), null);
-
- if (textureProperty == null)
- return new HashMap<>();
-
- if (requireSecure) {
- if (!textureProperty.hasSignature()) {
- LOGGER.error("Signature is missing from textures payload");
- throw new InsecurePublicKeyException("Signature is missing from textures payload");
- }
- if (!textureProperty.isSignatureValid(publicKey)) {
- LOGGER.error("Textures payload has been tampered with (signature invalid)");
- throw new InsecurePublicKeyException("Textures payload has been tampered with (signature invalid)");
- }
+ private SignatureState getPropertySignatureState(final Property property) {
+ if (!property.hasSignature()) {
+ return SignatureState.UNSIGNED;
+ }
+ if (!publicKey.validateProperty(property)) {
+ return SignatureState.INVALID;
}
+ return SignatureState.SIGNED;
+ }
+
+ @Override
+ public MinecraftProfileTextures unpackTextures(final Property packedTextures) {
+ final String value = packedTextures.value();
+ final SignatureState signatureState = getPropertySignatureState(packedTextures);
final MinecraftTexturesPayload result;
try {
- final String json = new String(org.apache.commons.codec.binary.Base64.decodeBase64(textureProperty.getValue()), StandardCharsets.UTF_8);
+ final String json = new String(Base64.getDecoder().decode(value), StandardCharsets.UTF_8);
result = gson.fromJson(json, MinecraftTexturesPayload.class);
- } catch (final JsonParseException e) {
+ } catch (final JsonParseException | IllegalArgumentException e) {
LOGGER.error("Could not decode textures payload", e);
- return new HashMap<>();
+ return MinecraftProfileTextures.EMPTY;
+ }
+
+ if (result == null || result.textures() == null || result.textures().isEmpty()) {
+ return MinecraftProfileTextures.EMPTY;
}
- if (result == null || result.getTextures() == null)
- return new HashMap<>();
+ final Map textures = result.textures();
- return result.getTextures();
+ return new MinecraftProfileTextures(
+ textures.get(MinecraftProfileTexture.Type.SKIN),
+ textures.get(MinecraftProfileTexture.Type.CAPE),
+ textures.get(MinecraftProfileTexture.Type.ELYTRA),
+ signatureState
+ );
}
}
@@ -162,7 +121,7 @@ public static class LocalYggdrasilAuthenticationService extends YggdrasilAuthent
public final String server;
public LocalYggdrasilAuthenticationService(Proxy proxy, String server) {
- super(proxy, new LocalYggdrasilApi(server));
+ super(proxy, localYggdrasilApi);
this.server = server;
}
}
diff --git a/src/main/java/anticope/rejects/utils/accounts/GetPlayerUUID.java b/src/main/java/anticope/rejects/utils/accounts/GetPlayerUUID.java
new file mode 100644
index 00000000..030485c9
--- /dev/null
+++ b/src/main/java/anticope/rejects/utils/accounts/GetPlayerUUID.java
@@ -0,0 +1,48 @@
+package anticope.rejects.utils.accounts;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+
+public class GetPlayerUUID {
+
+ public static UUID getUUID(String playerName) {
+ // Thanks Bento
+ try {
+ Gson gsonReader = new Gson();
+ JsonObject jsonObject = gsonReader.fromJson(
+ getURLContent("https://api.mojang.com/users/profiles/minecraft/" + playerName),
+ JsonObject.class);
+
+ String userIdString = jsonObject.get("id").toString().replace("\"", "")
+ .replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5");
+
+ return UUID.fromString(userIdString);
+ } catch (Exception ignored) {
+ return UUID.randomUUID();
+ }
+ }
+
+ private static String getURLContent(String requestedUrl) {
+ String returnValue;
+
+ try {
+ URL url = new URL(requestedUrl);
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ returnValue = br.lines().collect(Collectors.joining());
+ br.close();
+ } catch (Exception e) {
+ returnValue = "";
+ }
+
+ return returnValue;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/anticope/rejects/utils/seeds/Seeds.java b/src/main/java/anticope/rejects/utils/seeds/Seeds.java
index 6e6ca616..4f561122 100644
--- a/src/main/java/anticope/rejects/utils/seeds/Seeds.java
+++ b/src/main/java/anticope/rejects/utils/seeds/Seeds.java
@@ -88,7 +88,7 @@ public Seeds fromTag(NbtCompound tag) {
return this;
}
- // https://minecraft.fandom.com/wiki/Seed_(level_generation)#Java_Edition
+ // https://minecraft.wiki/w/Seed_(level_generation)#Java_Edition
private static long toSeed(String inSeed) {
try {
return Long.parseLong(inSeed);
diff --git a/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java b/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java
index 2f68c8a1..3c45a092 100644
--- a/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java
+++ b/src/main/java/anticope/rejects/utils/server/LegacyServerPinger.java
@@ -18,7 +18,7 @@ public void ping(String ip) {
}
public void ping(String ip, int port) {
- server = new ServerInfo("", ip + ":" + port, false);
+ server = new ServerInfo("", ip + ":" + port, ServerInfo.ServerType.OTHER);
new Thread(() -> pingInCurrentThread(ip, port),
"Server Pinger #" + threadNumber.incrementAndGet()).start();
@@ -26,19 +26,18 @@ public void ping(String ip, int port) {
private void pingInCurrentThread(String ip, int port) {
MultiplayerServerListPinger pinger = new MultiplayerServerListPinger();
- MeteorRejectsAddon.LOG.info("Pinging " + ip + ":" + port + "...");
+ MeteorRejectsAddon.LOG.info("Pinging {}:{}...", ip, port);
try {
- pinger.add(server, () -> {
- });
- MeteorRejectsAddon.LOG.info("Ping successful: " + ip + ":" + port);
+ pinger.add(server, () -> {}, () -> {});
+ MeteorRejectsAddon.LOG.info("Ping successful: {}:{}", ip, port);
} catch (UnknownHostException e) {
- MeteorRejectsAddon.LOG.warn("Unknown host: " + ip + ":" + port);
+ MeteorRejectsAddon.LOG.warn("Unknown host: {}:{}", ip, port);
failed = true;
} catch (Exception e2) {
- MeteorRejectsAddon.LOG.warn("Ping failed: " + ip + ":" + port);
+ MeteorRejectsAddon.LOG.warn("Ping failed: {}:{}", ip, port);
failed = true;
}
diff --git a/src/main/java/anticope/rejects/utils/server/ServerListPinger.java b/src/main/java/anticope/rejects/utils/server/ServerListPinger.java
index a99152b4..b0eeb2f7 100644
--- a/src/main/java/anticope/rejects/utils/server/ServerListPinger.java
+++ b/src/main/java/anticope/rejects/utils/server/ServerListPinger.java
@@ -1,38 +1,31 @@
package anticope.rejects.utils.server;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import com.mojang.authlib.GameProfile;
import io.netty.bootstrap.Bootstrap;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
import io.netty.channel.*;
-import io.netty.channel.socket.nio.NioSocketChannel;
+import net.minecraft.client.network.Address;
+import net.minecraft.client.network.AllowedAddressResolver;
+import net.minecraft.client.network.LegacyServerPinger;
import net.minecraft.client.network.ServerAddress;
import net.minecraft.network.ClientConnection;
-import net.minecraft.network.NetworkState;
+import net.minecraft.network.DisconnectionInfo;
import net.minecraft.network.listener.ClientQueryPacketListener;
-import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket;
import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket;
-import net.minecraft.network.packet.s2c.query.QueryPongS2CPacket;
+import net.minecraft.network.packet.s2c.query.PingResultS2CPacket;
import net.minecraft.network.packet.s2c.query.QueryResponseS2CPacket;
import net.minecraft.server.ServerMetadata;
import net.minecraft.text.Text;
import net.minecraft.util.Util;
-import net.minecraft.util.math.MathHelper;
+import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
-import java.nio.charset.StandardCharsets;
import java.util.*;
public class ServerListPinger {
- private static final Splitter ZERO_SPLITTER = Splitter.on('\u0000').limit(6);
private static final Logger LOGGER = LogManager.getLogger();
private final List clientConnections = Collections.synchronizedList(Lists.newArrayList());
private final ArrayList disconnectListeners = new ArrayList<>();
@@ -66,21 +59,19 @@ private void notifyDisconnectListeners() {
public void add(final MServerInfo entry, final Runnable runnable) throws UnknownHostException {
- Timer timeoutTimer = new Timer();
ServerAddress serverAddress = ServerAddress.parse(entry.address);
- timeoutTimer.schedule(new TimerTask() {
- @Override
- public void run() {
- notifyDisconnectListeners();
- }
- }, 20000);
- final ClientConnection clientConnection = ClientConnection.connect(new InetSocketAddress(InetAddress.getByName(serverAddress.getAddress()), serverAddress.getPort()), false);
+ Optional address = AllowedAddressResolver.DEFAULT.resolve(serverAddress).map(Address::getInetSocketAddress);
+ if (address.isEmpty()) {
+ return;
+ }
+ final ClientConnection clientConnection = ClientConnection.connect(address.get(), false, (MultiValueDebugSampleLogImpl) null);
+
failedToConnect = false;
this.clientConnections.add(clientConnection);
entry.label = "multiplayer.status.pinging";
entry.ping = -1L;
entry.playerListSummary = null;
- clientConnection.setPacketListener(new ClientQueryPacketListener() {
+ ClientQueryPacketListener clientQueryPacketListener = new ClientQueryPacketListener() {
private boolean sentQuery;
private boolean received;
private long startTime;
@@ -88,54 +79,32 @@ public void run() {
public void onResponse(QueryResponseS2CPacket packet) {
if (this.received) {
clientConnection.disconnect(Text.translatable("multiplayer.status.unrequested"));
- } else {
- this.received = true;
- ServerMetadata serverMetadata = packet.metadata();
+ return;
+ }
+ this.received = true;
+ ServerMetadata serverMetadata = packet.metadata();
+ if (serverMetadata.description() != null) {
entry.label = serverMetadata.description().getString();
- serverMetadata.version().ifPresentOrElse((version) -> {
- entry.version = version.gameVersion();
- entry.protocolVersion = version.protocolVersion();
- }, () -> {
- entry.version = "multiplayer.status.old";
- entry.protocolVersion = 0;
- });
- serverMetadata.players().ifPresentOrElse((players) -> {
- entry.playerCountLabel = getPlayerCountLabel(players.online(), players.max());
- entry.playerCount = players.online();
- if (!players.sample().isEmpty()) {
- List list = new ArrayList(players.sample().size());
- Iterator var3 = players.sample().iterator();
-
- while (var3.hasNext()) {
- GameProfile gameProfile = (GameProfile) var3.next();
- list.add(Text.literal(gameProfile.getName()));
- }
-
- if (players.sample().size() < players.online()) {
- list.add(Text.translatable("multiplayer.status.and_more", players.online() - players.sample().size()));
- }
-
- entry.playerListSummary = list;
- } else {
- entry.playerListSummary = List.of();
- }
+ } else {
+ entry.label = "";
+ }
- }, () -> entry.playerCountLabel = "multiplayer.status.unknown");
- serverMetadata.favicon().ifPresent((favicon) -> {
- if (!Arrays.equals(favicon.iconBytes(), entry.getIcon())) {
- entry.setIcon(favicon.iconBytes());
- runnable.run();
- }
+ entry.version = serverMetadata.version().map(ServerMetadata.Version::gameVersion).orElse("multiplayer.status.old");
+ serverMetadata.players().ifPresentOrElse(players -> {
+ entry.playerCountLabel = ServerListPinger.getPlayerCountLabel(players.online(), players.max());
+ entry.playerCount = players.online();
+ entry.playercountMax = players.max();
+ }, () -> {
+ entry.playerCountLabel = "multiplayer.status.unknown";
+ });
- });
- this.startTime = Util.getMeasuringTimeMs();
- clientConnection.send(new QueryPingC2SPacket(this.startTime));
- this.sentQuery = true;
- notifyDisconnectListeners();
+ this.startTime = Util.getMeasuringTimeMs();
+ clientConnection.send(new QueryPingC2SPacket(this.startTime));
+ this.sentQuery = true;
+ notifyDisconnectListeners();
}
- }
- public void onPong(QueryPongS2CPacket packet) {
+ public void onPingResult(PingResultS2CPacket packet) {
long l = this.startTime;
long m = Util.getMeasuringTimeMs();
entry.ping = m - l;
@@ -154,14 +123,19 @@ public void onDisconnected(Text reason) {
notifyDisconnectListeners();
}
+ @Override
+ public void onDisconnected(DisconnectionInfo info) {
+
+ }
+
public boolean isConnectionOpen() {
return clientConnection.isOpen();
}
- });
+ };
try {
- clientConnection.send(new HandshakeC2SPacket(serverAddress.getAddress(), serverAddress.getPort(), NetworkState.STATUS));
- clientConnection.send(new QueryRequestC2SPacket());
+ clientConnection.connect(serverAddress.getAddress(), serverAddress.getPort(), clientQueryPacketListener);
+ clientConnection.send(QueryRequestC2SPacket.INSTANCE);
} catch (Throwable var8) {
LOGGER.error("Failed to ping server {}", serverAddress, var8);
}
@@ -170,79 +144,20 @@ public boolean isConnectionOpen() {
private void ping(final MServerInfo serverInfo) {
final ServerAddress serverAddress = ServerAddress.parse(serverInfo.address);
- (new Bootstrap()).group(ClientConnection.CLIENT_IO_GROUP.get()).handler(new ChannelInitializer<>() {
- protected void initChannel(Channel channel) {
+ new Bootstrap().group(ClientConnection.CLIENT_IO_GROUP.get()).handler(new ChannelInitializer<>() {
+ @Override
+ protected void initChannel(Channel ch) throws Exception {
try {
- channel.config().setOption(ChannelOption.TCP_NODELAY, true);
+ ch.config().setOption(ChannelOption.TCP_NODELAY, true);
} catch (ChannelException ignored) {
}
-
- channel.pipeline().addLast(new SimpleChannelInboundHandler() {
- public void channelActive(ChannelHandlerContext channelHandlerContext) throws Exception {
- super.channelActive(channelHandlerContext);
- ByteBuf byteBuf = Unpooled.buffer();
-
- try {
- byteBuf.writeByte(254);
- byteBuf.writeByte(1);
- byteBuf.writeByte(250);
- char[] cs = "MC|PingHost".toCharArray();
- byteBuf.writeShort(cs.length);
- char[] var4 = cs;
- int var5 = cs.length;
-
- int var6;
- char d;
- for (var6 = 0; var6 < var5; ++var6) {
- d = var4[var6];
- byteBuf.writeChar(d);
- }
-
- byteBuf.writeShort(7 + 2 * serverAddress.getAddress().length());
- byteBuf.writeByte(127);
- cs = serverAddress.getAddress().toCharArray();
- byteBuf.writeShort(cs.length);
- var4 = cs;
- var5 = cs.length;
-
- for (var6 = 0; var6 < var5; ++var6) {
- d = var4[var6];
- byteBuf.writeChar(d);
- }
-
- byteBuf.writeInt(serverAddress.getPort());
- channelHandlerContext.channel().writeAndFlush(byteBuf).addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
- } finally {
- byteBuf.release();
- }
- }
-
- protected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf) {
- short s = byteBuf.readUnsignedByte();
- if (s == 255) {
- String string = new String(byteBuf.readBytes(byteBuf.readShort() * 2).array(), StandardCharsets.UTF_16BE);
- String[] strings = Iterables.toArray(ServerListPinger.ZERO_SPLITTER.split(string), String.class);
- if ("§1".equals(strings[0])) {
- String string2 = strings[2];
- String string3 = strings[3];
- int j = MathHelper.parseInt(strings[4], -1);
- int k = MathHelper.parseInt(strings[5], -1);
- serverInfo.protocolVersion = -1;
- serverInfo.version = string2;
- serverInfo.label = string3;
- serverInfo.playerCountLabel = ServerListPinger.getPlayerCountLabel(j, k);
- }
- }
-
- channelHandlerContext.close();
- }
-
- public void exceptionCaught(ChannelHandlerContext channelHandlerContext, Throwable throwable) {
- channelHandlerContext.close();
- }
- });
+ ch.pipeline().addLast(new LegacyServerPinger(serverAddress, ((protocolVersion, version, label, currentPlayers, maxPlayers) -> {
+ serverInfo.version = version;
+ serverInfo.label = label;
+ serverInfo.playerCountLabel = ServerListPinger.getPlayerCountLabel(currentPlayers, maxPlayers);
+ })));
}
- }).channel(NioSocketChannel.class).connect(serverAddress.getAddress(), serverAddress.getPort());
+ });
}
public void tick() {
@@ -274,4 +189,4 @@ public void cancel() {
}
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 5b8ab2bb..9d16aea7 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -36,7 +36,7 @@
"github:sha": "${gh_hash}"
},
"depends": {
- "java": ">=16",
+ "java": ">=21",
"minecraft": "~${mc_version}",
"meteor-client": "*"
}
diff --git a/src/main/resources/meteor-rejects-meteor.mixins.json b/src/main/resources/meteor-rejects-meteor.mixins.json
index 4cb4a2fe..caa371f7 100644
--- a/src/main/resources/meteor-rejects-meteor.mixins.json
+++ b/src/main/resources/meteor-rejects-meteor.mixins.json
@@ -1,7 +1,7 @@
{
"required": true,
"package": "anticope.rejects.mixin.meteor",
- "compatibilityLevel": "JAVA_16",
+ "compatibilityLevel": "JAVA_21",
"client": [
"AccountMixin",
"AccountsMixin",
diff --git a/src/main/resources/meteor-rejects.accesswidener b/src/main/resources/meteor-rejects.accesswidener
index 9d83c2af..459332f2 100644
--- a/src/main/resources/meteor-rejects.accesswidener
+++ b/src/main/resources/meteor-rejects.accesswidener
@@ -1,3 +1,3 @@
-accessWidener v1 named
+accessWidener v2 named
accessible class net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractType
\ No newline at end of file
diff --git a/src/main/resources/meteor-rejects.mixins.json b/src/main/resources/meteor-rejects.mixins.json
index dfb50dbf..da932cb4 100644
--- a/src/main/resources/meteor-rejects.mixins.json
+++ b/src/main/resources/meteor-rejects.mixins.json
@@ -1,21 +1,26 @@
{
"required": true,
"package": "anticope.rejects.mixin",
- "compatibilityLevel": "JAVA_16",
+ "compatibilityLevel": "JAVA_21",
"client": [
+ "ClientCommonNetwokHandlerMixin",
"ClientPlayerInteractionManagerMixin",
"ClientPlayNetworkHandlerMixin",
"CommandSuggestorMixin",
+ "CountPlacementModifierAccessor",
"Deadmau5FeatureRendererMixin",
"EntityAccessor",
"GameRendererMixin",
"HandshakeC2SPacketAccessor",
+ "HeightContextMixin",
+ "HeightRangePlacementModifierAccessor",
"LivingEntityMixin",
"LivingEntityRendererMixin",
"MultiplayerScreenAccessor",
"MultiplayerScreenMixin",
"PlayerEntityMixin",
"PlayerMoveC2SPacketAccessor",
+ "RarityFilterPlacementModifierAccessor",
"ServerListAccessor",
"StructureVoidBlockMixin",
"TexturedRenderLayersMixin",