mirror of https://github.com/cabaletta/baritone
commit
3e7eb87a36
|
@ -28,7 +28,7 @@ jobs:
|
||||||
run: chmod +x gradlew
|
run: chmod +x gradlew
|
||||||
|
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)"
|
run: ./gradlew build -Pmod_version="$(git describe --always --tags --first-parent | cut -c2-)"
|
||||||
|
|
||||||
- name: Archive Artifacts
|
- name: Archive Artifacts
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
|
|
|
@ -6,6 +6,7 @@ RUN apt update -y
|
||||||
|
|
||||||
RUN apt install \
|
RUN apt install \
|
||||||
openjdk-17-jdk \
|
openjdk-17-jdk \
|
||||||
|
git \
|
||||||
--assume-yes
|
--assume-yes
|
||||||
|
|
||||||
COPY . /code
|
COPY . /code
|
||||||
|
|
37
build.gradle
37
build.gradle
|
@ -21,13 +21,19 @@ allprojects {
|
||||||
apply plugin: "maven-publish"
|
apply plugin: "maven-publish"
|
||||||
|
|
||||||
archivesBaseName = rootProject.archives_base_name
|
archivesBaseName = rootProject.archives_base_name
|
||||||
def vers = 'git describe --always --tags --dirty'.execute().text.trim()
|
|
||||||
|
def vers = ""
|
||||||
|
try {
|
||||||
|
vers = 'git describe --always --tags --first-parent --dirty'.execute().text.trim()
|
||||||
|
} catch (Exception e) {
|
||||||
|
println "Version detection failed: " + e
|
||||||
|
}
|
||||||
if (!vers.startsWith("v")) {
|
if (!vers.startsWith("v")) {
|
||||||
println "git doesn't appear to be installed!"
|
|
||||||
println "using version number: " + rootProject.mod_version
|
println "using version number: " + rootProject.mod_version
|
||||||
version = rootProject.mod_version
|
version = rootProject.mod_version
|
||||||
} else {
|
} else {
|
||||||
version = vers.substring(1)
|
version = vers.substring(1)
|
||||||
|
println "Detected version " + version
|
||||||
}
|
}
|
||||||
group = rootProject.maven_group
|
group = rootProject.maven_group
|
||||||
|
|
||||||
|
@ -66,18 +72,24 @@ allprojects {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft "net.minecraft:minecraft:${rootProject.minecraft_version}"
|
|
||||||
// The following line declares the mojmap mappings, you may use other mappings as well
|
|
||||||
mappings "net.fabricmc:intermediary:${rootProject.minecraft_version}:v2"
|
|
||||||
mappings "net.minecraft:minecraft:${rootProject.minecraft_version}:client-mappings"
|
|
||||||
mappings "org.parchmentmc.data:parchment-1.19.2:2022.11.27@zip"
|
|
||||||
|
|
||||||
implementation "org.spongepowered:mixin:0.8.5"
|
implementation "org.spongepowered:mixin:0.8.5"
|
||||||
implementation "org.ow2.asm:asm:9.3"
|
implementation "org.ow2.asm:asm:9.3"
|
||||||
// The following line declares the yarn mappings you may select this one as well.
|
// The following line declares the yarn mappings you may select this one as well.
|
||||||
// mappings "net.fabricmc:yarn:1.17.1+build.32:v2"
|
// mappings "net.fabricmc:yarn:1.17.1+build.32:v2"
|
||||||
//launchImplementation('dev.babbaj:nether-pathfinder:1.3.0')
|
//launchImplementation('dev.babbaj:nether-pathfinder:1.3.0')
|
||||||
implementation 'dev.babbaj:nether-pathfinder:1.4.1'
|
implementation "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}"
|
||||||
|
|
||||||
|
implementation 'com.google.code.findbugs:jsr305:3.0.2'
|
||||||
|
}
|
||||||
|
|
||||||
|
unimined.minecraft(sourceSets.main, true) {
|
||||||
|
version rootProject.minecraft_version
|
||||||
|
|
||||||
|
mappings {
|
||||||
|
intermediary()
|
||||||
|
mojmap()
|
||||||
|
parchment("1.20.2", "2023.10.22")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
tasks.withType(JavaCompile).configureEach {
|
||||||
|
@ -90,8 +102,9 @@ allprojects {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
minecraft {
|
unimined.minecraft {
|
||||||
runs.off = true
|
runs.off = true
|
||||||
|
defaultRemapJar = false
|
||||||
}
|
}
|
||||||
|
|
||||||
archivesBaseName = archivesBaseName + "-common"
|
archivesBaseName = archivesBaseName + "-common"
|
||||||
|
@ -131,10 +144,6 @@ jar {
|
||||||
from sourceSets.main.output, sourceSets.launch.output, sourceSets.api.output
|
from sourceSets.main.output, sourceSets.launch.output, sourceSets.api.output
|
||||||
}
|
}
|
||||||
|
|
||||||
remapJar {
|
|
||||||
target = "mojmap"
|
|
||||||
}
|
|
||||||
|
|
||||||
javadoc {
|
javadoc {
|
||||||
options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error
|
options.addStringOption('Xwerror', '-quiet') // makes the build fail on travis when there is a javadoc error
|
||||||
options.linkSource true
|
options.linkSource true
|
||||||
|
|
|
@ -29,12 +29,16 @@ repositories {
|
||||||
name = 'FabricMaven'
|
name = 'FabricMaven'
|
||||||
url = 'https://maven.fabricmc.net/'
|
url = 'https://maven.fabricmc.net/'
|
||||||
}
|
}
|
||||||
|
maven {
|
||||||
|
name = 'NeoForgedMaven'
|
||||||
|
url = 'https://maven.neoforged.net/'
|
||||||
|
}
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0'
|
implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0'
|
||||||
implementation group: 'commons-io', name: 'commons-io', version: '2.6'
|
implementation group: 'commons-io', name: 'commons-io', version: '2.7'
|
||||||
|
|
||||||
implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.4.10'
|
implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '1.1.0'
|
||||||
}
|
}
|
|
@ -20,14 +20,14 @@ package baritone.gradle.task;
|
||||||
import baritone.gradle.util.Determinizer;
|
import baritone.gradle.util.Determinizer;
|
||||||
import org.gradle.api.plugins.JavaPluginConvention;
|
import org.gradle.api.plugins.JavaPluginConvention;
|
||||||
import org.gradle.api.tasks.Input;
|
import org.gradle.api.tasks.Input;
|
||||||
|
import org.gradle.api.tasks.SourceSetContainer;
|
||||||
import org.gradle.api.tasks.TaskAction;
|
import org.gradle.api.tasks.TaskAction;
|
||||||
import org.gradle.api.tasks.TaskCollection;
|
import org.gradle.api.tasks.TaskCollection;
|
||||||
import org.gradle.api.tasks.compile.ForkOptions;
|
import org.gradle.api.tasks.compile.ForkOptions;
|
||||||
import org.gradle.api.tasks.compile.JavaCompile;
|
import org.gradle.api.tasks.compile.JavaCompile;
|
||||||
import org.gradle.internal.jvm.Jvm;
|
import org.gradle.internal.jvm.Jvm;
|
||||||
import xyz.wagyourtail.unimined.api.Constants;
|
import xyz.wagyourtail.unimined.api.UniminedExtension;
|
||||||
import xyz.wagyourtail.unimined.api.minecraft.EnvType;
|
import xyz.wagyourtail.unimined.api.minecraft.MinecraftConfig;
|
||||||
import xyz.wagyourtail.unimined.api.minecraft.MinecraftProvider;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
@ -35,7 +35,6 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
|
@ -63,8 +62,6 @@ public class ProguardTask extends BaritoneGradleTask {
|
||||||
|
|
||||||
private List<String> requiredLibraries;
|
private List<String> requiredLibraries;
|
||||||
|
|
||||||
private File pathfinder;
|
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
protected void exec() throws Exception {
|
protected void exec() throws Exception {
|
||||||
super.doFirst();
|
super.doFirst();
|
||||||
|
@ -74,21 +71,23 @@ public class ProguardTask extends BaritoneGradleTask {
|
||||||
downloadProguard();
|
downloadProguard();
|
||||||
extractProguard();
|
extractProguard();
|
||||||
generateConfigs();
|
generateConfigs();
|
||||||
pathfinder = acquireDependencies().filter(file -> file.getName().contains("nether-pathfinder")).findAny().get();
|
|
||||||
processArtifact();
|
processArtifact();
|
||||||
proguardApi();
|
proguardApi();
|
||||||
proguardStandalone();
|
proguardStandalone();
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
MinecraftProvider<?, ?> provider = this.getProject().getExtensions().getByType(MinecraftProvider.class);
|
UniminedExtension ext = getProject().getExtensions().getByType(UniminedExtension.class);
|
||||||
|
SourceSetContainer sourceSets = getProject().getExtensions().getByType(SourceSetContainer.class);
|
||||||
|
|
||||||
private File getMcJar() {
|
private File getMcJar() {
|
||||||
return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdNamespace()).toFile();
|
MinecraftConfig mcc = ext.getMinecrafts().get(sourceSets.getByName("main"));
|
||||||
|
return mcc.getMinecraft(mcc.getMcPatcher().getProdNamespace(), mcc.getMcPatcher().getProdNamespace()).toFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isMcJar(File f) {
|
private boolean isMcJar(File f) {
|
||||||
return this.getProject().getConfigurations().getByName(Constants.MINECRAFT_COMBINED_PROVIDER).getFiles().contains(f);
|
MinecraftConfig mcc = ext.getMinecrafts().get(sourceSets.getByName("main"));
|
||||||
|
return mcc.isMinecraftJar(f.toPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processArtifact() throws Exception {
|
private void processArtifact() throws Exception {
|
||||||
|
@ -96,7 +95,7 @@ public class ProguardTask extends BaritoneGradleTask {
|
||||||
Files.delete(this.artifactUnoptimizedPath);
|
Files.delete(this.artifactUnoptimizedPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), Arrays.asList(pathfinder), false);
|
Determinizer.determinize(this.artifactPath.toString(), this.artifactUnoptimizedPath.toString(), List.of(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void downloadProguard() throws Exception {
|
private void downloadProguard() throws Exception {
|
||||||
|
@ -252,12 +251,12 @@ public class ProguardTask extends BaritoneGradleTask {
|
||||||
|
|
||||||
private void proguardApi() throws Exception {
|
private void proguardApi() throws Exception {
|
||||||
runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG));
|
runProguard(getTemporaryFile(compType + PROGUARD_API_CONFIG));
|
||||||
Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), Arrays.asList(pathfinder), false);
|
Determinizer.determinize(this.proguardOut.toString(), this.artifactApiPath.toString(), List.of(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void proguardStandalone() throws Exception {
|
private void proguardStandalone() throws Exception {
|
||||||
runProguard(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG));
|
runProguard(getTemporaryFile(compType + PROGUARD_STANDALONE_CONFIG));
|
||||||
Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), Arrays.asList(pathfinder), false);
|
Determinizer.determinize(this.proguardOut.toString(), this.artifactStandalonePath.toString(), List.of(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class Pair<A, B> {
|
private static final class Pair<A, B> {
|
||||||
|
|
|
@ -19,15 +19,14 @@ import baritone.gradle.task.CreateDistTask
|
||||||
import baritone.gradle.task.ProguardTask
|
import baritone.gradle.task.ProguardTask
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "com.github.johnrengelman.shadow" version "7.0.0"
|
id "com.github.johnrengelman.shadow" version "8.0.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
archivesBaseName = archivesBaseName + "-fabric"
|
archivesBaseName = archivesBaseName + "-fabric"
|
||||||
|
|
||||||
minecraft {
|
unimined.minecraft {
|
||||||
fabric()
|
fabric {
|
||||||
runs.client = {
|
loader project.fabric_version
|
||||||
jvmArgs.add("-XstartOnFirstThread")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,8 +38,6 @@ configurations {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
fabric "net.fabricmc:fabric-loader:${project.fabric_version}"
|
|
||||||
|
|
||||||
// because of multiple sourcesets `common project(":")` doesn't work
|
// because of multiple sourcesets `common project(":")` doesn't work
|
||||||
for (sourceSet in rootProject.sourceSets) {
|
for (sourceSet in rootProject.sourceSets) {
|
||||||
if (sourceSet == rootProject.sourceSets.test) continue
|
if (sourceSet == rootProject.sourceSets.test) continue
|
||||||
|
@ -48,6 +45,7 @@ dependencies {
|
||||||
common sourceSet.output
|
common sourceSet.output
|
||||||
shadowCommon sourceSet.output
|
shadowCommon sourceSet.output
|
||||||
}
|
}
|
||||||
|
include "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}"
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
|
@ -60,17 +58,17 @@ processResources {
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
configurations = [project.configurations.shadowCommon]
|
configurations = [project.configurations.shadowCommon]
|
||||||
classifier "dev-shadow"
|
archiveClassifier.set "dev-shadow"
|
||||||
}
|
}
|
||||||
|
|
||||||
remapJar {
|
remapJar {
|
||||||
inputFile.set shadowJar.archiveFile
|
inputFile.set shadowJar.archiveFile
|
||||||
dependsOn shadowJar
|
dependsOn shadowJar
|
||||||
classifier null
|
archiveClassifier.set null
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
classifier "dev"
|
archiveClassifier.set "dev"
|
||||||
}
|
}
|
||||||
|
|
||||||
components.java {
|
components.java {
|
||||||
|
@ -103,4 +101,4 @@ publishing {
|
||||||
repositories {
|
repositories {
|
||||||
// Add repositories to publish to here.
|
// Add repositories to publish to here.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "baritone",
|
"id": "baritone",
|
||||||
|
@ -26,6 +25,6 @@
|
||||||
|
|
||||||
"depends": {
|
"depends": {
|
||||||
"fabricloader": ">=0.14.22",
|
"fabricloader": ">=0.14.22",
|
||||||
"minecraft": "1.20.2"
|
"minecraft": ["1.20.3", "1.20.4"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,15 +19,19 @@ import baritone.gradle.task.CreateDistTask
|
||||||
import baritone.gradle.task.ProguardTask
|
import baritone.gradle.task.ProguardTask
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "com.github.johnrengelman.shadow" version "7.0.0"
|
id "com.github.johnrengelman.shadow" version "8.0.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
archivesBaseName = archivesBaseName + "-forge"
|
archivesBaseName = archivesBaseName + "-forge"
|
||||||
|
|
||||||
minecraft {
|
unimined.minecraft {
|
||||||
|
mappings {
|
||||||
|
devFallbackNamespace "intermediary"
|
||||||
|
}
|
||||||
|
|
||||||
forge {
|
forge {
|
||||||
devFallbackNamespace = "intermediary"
|
loader project.forge_version
|
||||||
mixinConfig = ["mixins.baritone.json"]
|
mixinConfig ["mixins.baritone.json"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,8 +49,6 @@ configurations {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
forge "net.minecraftforge:forge:${rootProject.forge_version}"
|
|
||||||
|
|
||||||
// because of multiple sourcesets `common project(":")` doesn't work
|
// because of multiple sourcesets `common project(":")` doesn't work
|
||||||
for (sourceSet in rootProject.sourceSets) {
|
for (sourceSet in rootProject.sourceSets) {
|
||||||
if (sourceSet == rootProject.sourceSets.test) continue
|
if (sourceSet == rootProject.sourceSets.test) continue
|
||||||
|
@ -54,6 +56,7 @@ dependencies {
|
||||||
common sourceSet.output
|
common sourceSet.output
|
||||||
shadowCommon sourceSet.output
|
shadowCommon sourceSet.output
|
||||||
}
|
}
|
||||||
|
shadowCommon "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}"
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
|
@ -66,17 +69,17 @@ processResources {
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
configurations = [project.configurations.shadowCommon]
|
configurations = [project.configurations.shadowCommon]
|
||||||
classifier "dev-shadow"
|
archiveClassifier.set "dev-shadow"
|
||||||
}
|
}
|
||||||
|
|
||||||
remapJar {
|
remapJar {
|
||||||
inputFile.set shadowJar.archiveFile
|
inputFile.set shadowJar.archiveFile
|
||||||
dependsOn shadowJar
|
dependsOn shadowJar
|
||||||
classifier null
|
archiveClassifier.set null
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
classifier "dev"
|
archiveClassifier.set "dev"
|
||||||
|
|
||||||
manifest {
|
manifest {
|
||||||
attributes(
|
attributes(
|
||||||
|
|
|
@ -35,6 +35,6 @@ A Minecraft pathfinder bot.
|
||||||
modId="minecraft"
|
modId="minecraft"
|
||||||
mandatory=true
|
mandatory=true
|
||||||
# This version range declares a minimum of the current minecraft version up to but not including the next major version
|
# This version range declares a minimum of the current minecraft version up to but not including the next major version
|
||||||
versionRange="[1.20.2]"
|
versionRange="[1.20.3, 1.20.4]"
|
||||||
ordering="NONE"
|
ordering="NONE"
|
||||||
side="BOTH"
|
side="BOTH"
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
org.gradle.jvmargs=-Xmx4G
|
org.gradle.jvmargs=-Xmx4G
|
||||||
|
|
||||||
available_loaders=fabric,forge,tweaker
|
available_loaders=fabric,forge,neoforge,tweaker
|
||||||
|
|
||||||
mod_version=1.10.2
|
mod_version=1.10.2
|
||||||
maven_group=baritone
|
maven_group=baritone
|
||||||
archives_base_name=baritone
|
archives_base_name=baritone
|
||||||
|
|
||||||
minecraft_version=1.20.2
|
minecraft_version=1.20.4
|
||||||
forge_version=1.20.2-48.0.1
|
|
||||||
|
forge_version=49.0.3
|
||||||
|
neoforge_version=0-beta
|
||||||
|
|
||||||
fabric_version=0.14.22
|
fabric_version=0.14.22
|
||||||
|
|
||||||
|
nether_pathfinder_version=1.4.1
|
|
@ -1,5 +1,5 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Baritone.
|
||||||
|
*
|
||||||
|
* Baritone is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Baritone is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Baritone. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import baritone.gradle.task.CreateDistTask
|
||||||
|
import baritone.gradle.task.ProguardTask
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id "com.github.johnrengelman.shadow" version "8.0.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
archivesBaseName = archivesBaseName + "-neoforge"
|
||||||
|
|
||||||
|
unimined.minecraft {
|
||||||
|
mappings {
|
||||||
|
devFallbackNamespace "intermediary"
|
||||||
|
}
|
||||||
|
|
||||||
|
neoForged {
|
||||||
|
loader project.neoforge_version
|
||||||
|
mixinConfig ["mixins.baritone.json"]
|
||||||
|
}
|
||||||
|
|
||||||
|
minecraftRemapper.config {
|
||||||
|
// neoforge adds 1 conflict, where 2 interfaces have a method with the same name on yarn/mojmap,
|
||||||
|
// but the method has different names in the intermediary mappings.
|
||||||
|
// this is a conflict because they have a class that extends both interfaces.
|
||||||
|
// this shouldn't be a problem as long as named mappings don't make the name of those 2 methods different.
|
||||||
|
ignoreConflicts(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//loom {
|
||||||
|
// forge {
|
||||||
|
// mixinConfig 'mixins.baritone.json'
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
common
|
||||||
|
shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
|
||||||
|
compileClasspath.extendsFrom common
|
||||||
|
runtimeClasspath.extendsFrom common
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// because of multiple sourcesets `common project(":")` doesn't work
|
||||||
|
for (sourceSet in rootProject.sourceSets) {
|
||||||
|
if (sourceSet == rootProject.sourceSets.test) continue
|
||||||
|
if (sourceSet == rootProject.sourceSets.schematica_api) continue
|
||||||
|
common sourceSet.output
|
||||||
|
shadowCommon sourceSet.output
|
||||||
|
}
|
||||||
|
shadowCommon "dev.babbaj:nether-pathfinder:${nether_pathfinder_version}"
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
inputs.property "version", project.version
|
||||||
|
|
||||||
|
filesMatching("META-INF/mods.toml") {
|
||||||
|
expand "version": project.version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
configurations = [project.configurations.shadowCommon]
|
||||||
|
archiveClassifier.set "dev-shadow"
|
||||||
|
}
|
||||||
|
|
||||||
|
remapJar {
|
||||||
|
inputFile.set shadowJar.archiveFile
|
||||||
|
dependsOn shadowJar
|
||||||
|
archiveClassifier.set null
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
archiveClassifier.set "dev"
|
||||||
|
|
||||||
|
manifest {
|
||||||
|
attributes(
|
||||||
|
'MixinConfigs': 'mixins.baritone.json',
|
||||||
|
"MixinConnector": "baritone.launch.BaritoneMixinConnector",
|
||||||
|
|
||||||
|
'Implementation-Title': 'Baritone',
|
||||||
|
'Implementation-Version': version,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
components.java {
|
||||||
|
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
|
||||||
|
skip()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task proguard(type: ProguardTask) {
|
||||||
|
url 'https://github.com/Guardsquare/proguard/releases/download/v7.2.1/proguard-7.2.1.zip'
|
||||||
|
extract 'proguard-7.2.1/lib/proguard.jar'
|
||||||
|
compType "neoforge"
|
||||||
|
}
|
||||||
|
|
||||||
|
task createDist(type: CreateDistTask, dependsOn: proguard) {
|
||||||
|
compType "neoforge"
|
||||||
|
}
|
||||||
|
|
||||||
|
build.finalizedBy(createDist)
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
mavenFabric(MavenPublication) {
|
||||||
|
artifactId = rootProject.archives_base_name + "-" + project.name
|
||||||
|
from components.java
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
|
||||||
|
repositories {
|
||||||
|
// Add repositories to publish to here.
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
#
|
||||||
|
# This file is part of Baritone.
|
||||||
|
#
|
||||||
|
# Baritone is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Baritone is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with Baritone. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
loom.platform=forge
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Baritone.
|
||||||
|
*
|
||||||
|
* Baritone is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Baritone is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Baritone. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package baritone.launch;
|
||||||
|
|
||||||
|
import net.neoforged.fml.common.Mod;
|
||||||
|
|
||||||
|
@Mod("baritoe")
|
||||||
|
public class BaritoneForgeModXD {
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
# This is an example mods.toml file. It contains the data relating to the loading mods.
|
||||||
|
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
|
||||||
|
# The overall format is standard TOML format, v0.5.0.
|
||||||
|
# Note that there are a couple of TOML lists in this file.
|
||||||
|
# Find more information on toml format here: https://github.com/toml-lang/toml
|
||||||
|
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
|
||||||
|
modLoader="javafml" #mandatory
|
||||||
|
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
|
||||||
|
loaderVersion="[1,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions.
|
||||||
|
license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE"
|
||||||
|
# A URL to refer people to when problems occur with this mod
|
||||||
|
issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional
|
||||||
|
# A list of mods - how many allowed here is determined by the individual mod loader
|
||||||
|
[[mods]] #mandatory
|
||||||
|
# The modid of the mod
|
||||||
|
modId="baritoe" #mandatory
|
||||||
|
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
|
||||||
|
version="${version}" #mandatory
|
||||||
|
# A display name for the mod
|
||||||
|
displayName="Baritone" #mandatory
|
||||||
|
# A URL for the "homepage" for this mod, displayed in the mod UI
|
||||||
|
displayURL="https://github.com/cabaletta/baritone" #optional
|
||||||
|
# A file name (in the root of the mod JAR) containing a logo for display
|
||||||
|
#logoFile="examplemod.png" #optional
|
||||||
|
# A text field displayed in the mod UI
|
||||||
|
credits="Hat Gamers" #optional
|
||||||
|
# A text field displayed in the mod UI
|
||||||
|
authors="leijurv, Brady" #optional
|
||||||
|
# The description text for the mod (multi line!) (#mandatory)
|
||||||
|
description='''
|
||||||
|
A Minecraft pathfinder bot.
|
||||||
|
'''
|
||||||
|
|
||||||
|
[[dependencies.baritoe]]
|
||||||
|
modId="minecraft"
|
||||||
|
mandatory=true
|
||||||
|
# This version range declares a minimum of the current minecraft version up to but not including the next major version
|
||||||
|
versionRange="[1.20.3, 1.20.4]"
|
||||||
|
ordering="NONE"
|
||||||
|
side="BOTH"
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"pack": {
|
||||||
|
"description": "null",
|
||||||
|
"pack_format": 8
|
||||||
|
}
|
||||||
|
}
|
|
@ -1468,6 +1468,11 @@ public final class Settings {
|
||||||
*/
|
*/
|
||||||
public final Setting<Boolean> elytraTermsAccepted = new Setting<>(false);
|
public final Setting<Boolean> elytraTermsAccepted = new Setting<>(false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verbose chat logging in elytra mode
|
||||||
|
*/
|
||||||
|
public final Setting<Boolean> elytraChatSpam = new Setting<>(false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A map of lowercase setting field names to their respective setting
|
* A map of lowercase setting field names to their respective setting
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -171,9 +171,8 @@ public class MixinMinecraft {
|
||||||
),
|
),
|
||||||
slice = @Slice(
|
slice = @Slice(
|
||||||
from = @At(
|
from = @At(
|
||||||
value = "FIELD",
|
value = "INVOKE",
|
||||||
opcode = Opcodes.GETFIELD,
|
target = "Lnet/minecraft/client/gui/components/DebugScreenOverlay;showDebugScreen()Z"
|
||||||
target = "Lnet/minecraft/client/Options;renderDebug:Z"
|
|
||||||
),
|
),
|
||||||
to = @At(
|
to = @At(
|
||||||
value = "CONSTANT",
|
value = "CONSTANT",
|
||||||
|
|
|
@ -20,6 +20,7 @@ package baritone.cache;
|
||||||
import baritone.api.cache.ICachedWorld;
|
import baritone.api.cache.ICachedWorld;
|
||||||
import baritone.api.cache.IWorldScanner;
|
import baritone.api.cache.IWorldScanner;
|
||||||
import baritone.api.utils.BetterBlockPos;
|
import baritone.api.utils.BetterBlockPos;
|
||||||
|
import baritone.api.utils.BlockOptionalMeta;
|
||||||
import baritone.api.utils.BlockOptionalMetaLookup;
|
import baritone.api.utils.BlockOptionalMetaLookup;
|
||||||
import baritone.api.utils.IPlayerContext;
|
import baritone.api.utils.IPlayerContext;
|
||||||
import baritone.utils.accessor.IPalettedContainer;
|
import baritone.utils.accessor.IPalettedContainer;
|
||||||
|
@ -31,7 +32,13 @@ import net.minecraft.util.BitStorage;
|
||||||
import net.minecraft.world.level.ChunkPos;
|
import net.minecraft.world.level.ChunkPos;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.chunk.*;
|
import net.minecraft.world.level.chunk.GlobalPalette;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkSource;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunkSection;
|
||||||
|
import net.minecraft.world.level.chunk.Palette;
|
||||||
|
import net.minecraft.world.level.chunk.PalettedContainer;
|
||||||
|
import net.minecraft.world.level.chunk.SingleValuePalette;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -41,6 +48,8 @@ import java.util.stream.Stream;
|
||||||
public enum FasterWorldScanner implements IWorldScanner {
|
public enum FasterWorldScanner implements IWorldScanner {
|
||||||
INSTANCE;
|
INSTANCE;
|
||||||
|
|
||||||
|
private static final BlockState[] PALETTE_REGISTRY_SENTINEL = new BlockState[0];
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BlockPos> scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) {
|
public List<BlockPos> scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) {
|
||||||
assert ctx.world() != null;
|
assert ctx.world() != null;
|
||||||
|
@ -183,7 +192,28 @@ public enum FasterWorldScanner implements IWorldScanner {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IPalettedContainer<BlockState>) sectionContainer).getPalette());
|
Palette<BlockState> palette = ((IPalettedContainer<BlockState>) sectionContainer).getPalette();
|
||||||
|
|
||||||
|
if (palette instanceof SingleValuePalette) {
|
||||||
|
// single value palette doesn't have any data
|
||||||
|
if (lookup.has(palette.valueFor(0))) {
|
||||||
|
// TODO this is 4k hits, maybe don't return all of them?
|
||||||
|
for (int x = 0; x < 16; ++x) {
|
||||||
|
for (int y = 0; y < 16; ++y) {
|
||||||
|
for (int z = 0; z < 16; ++z) {
|
||||||
|
blocks.add(new BlockPos(
|
||||||
|
(int) chunkX + x,
|
||||||
|
sectionY + y,
|
||||||
|
(int) chunkZ + z
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean[] isInFilter = getIncludedFilterIndices(lookup, palette);
|
||||||
if (isInFilter.length == 0) {
|
if (isInFilter.length == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -212,13 +242,18 @@ public enum FasterWorldScanner implements IWorldScanner {
|
||||||
|
|
||||||
private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, Palette<BlockState> palette) {
|
private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, Palette<BlockState> palette) {
|
||||||
boolean commonBlockFound = false;
|
boolean commonBlockFound = false;
|
||||||
IdMapper<BlockState> paletteMap = getPalette(palette);
|
BlockState[] paletteMap = getPalette(palette);
|
||||||
int size = paletteMap.size();
|
|
||||||
|
if (paletteMap == PALETTE_REGISTRY_SENTINEL) {
|
||||||
|
return getIncludedFilterIndicesFromRegistry(lookup);
|
||||||
|
}
|
||||||
|
|
||||||
|
int size = paletteMap.length;
|
||||||
|
|
||||||
boolean[] isInFilter = new boolean[size];
|
boolean[] isInFilter = new boolean[size];
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
BlockState state = paletteMap.byId(i);
|
BlockState state = paletteMap[i];
|
||||||
if (lookup.has(state)) {
|
if (lookup.has(state)) {
|
||||||
isInFilter[i] = true;
|
isInFilter[i] = true;
|
||||||
commonBlockFound = true;
|
commonBlockFound = true;
|
||||||
|
@ -233,21 +268,34 @@ public enum FasterWorldScanner implements IWorldScanner {
|
||||||
return isInFilter;
|
return isInFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean[] getIncludedFilterIndicesFromRegistry(BlockOptionalMetaLookup lookup) {
|
||||||
|
boolean[] isInFilter = new boolean[Block.BLOCK_STATE_REGISTRY.size()];
|
||||||
|
|
||||||
|
for (BlockOptionalMeta bom : lookup.blocks()) {
|
||||||
|
for (BlockState state : bom.getAllBlockStates()) {
|
||||||
|
isInFilter[Block.BLOCK_STATE_REGISTRY.getId(state)] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isInFilter;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cheats to get the actual map of id -> blockstate from the various palette implementations
|
* cheats to get the actual map of id -> blockstate from the various palette implementations
|
||||||
*/
|
*/
|
||||||
private static IdMapper<BlockState> getPalette(Palette<BlockState> palette) {
|
private static BlockState[] getPalette(Palette<BlockState> palette) {
|
||||||
if (palette instanceof GlobalPalette) {
|
if (palette instanceof GlobalPalette) {
|
||||||
return Block.BLOCK_STATE_REGISTRY;
|
// copying the entire registry is not nice so we treat it as a special case
|
||||||
|
return PALETTE_REGISTRY_SENTINEL;
|
||||||
} else {
|
} else {
|
||||||
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
|
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
|
||||||
palette.write(buf);
|
palette.write(buf);
|
||||||
int size = buf.readVarInt();
|
int size = buf.readVarInt();
|
||||||
IdMapper<BlockState> states = new IdMapper<>();
|
BlockState[] states = new BlockState[size];
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
BlockState state = Block.BLOCK_STATE_REGISTRY.byId(buf.readVarInt());
|
BlockState state = Block.BLOCK_STATE_REGISTRY.byId(buf.readVarInt());
|
||||||
assert state != null;
|
assert state != null;
|
||||||
states.addMapping(state, i);
|
states[i] = state;
|
||||||
}
|
}
|
||||||
return states;
|
return states;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ public class SelCommand extends Command {
|
||||||
float lineWidth = Baritone.settings().selectionLineWidth.value;
|
float lineWidth = Baritone.settings().selectionLineWidth.value;
|
||||||
boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value;
|
boolean ignoreDepth = Baritone.settings().renderSelectionIgnoreDepth.value;
|
||||||
IRenderer.startLines(color, opacity, lineWidth, ignoreDepth);
|
IRenderer.startLines(color, opacity, lineWidth, ignoreDepth);
|
||||||
IRenderer.emitAABB(event.getModelViewStack(), new AABB(pos1, pos1.offset(1, 1, 1)));
|
IRenderer.emitAABB(event.getModelViewStack(), new AABB(pos1));
|
||||||
IRenderer.endLines(ignoreDepth);
|
IRenderer.endLines(ignoreDepth);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -50,6 +50,7 @@ import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.Vec3i;
|
import net.minecraft.core.Vec3i;
|
||||||
|
import net.minecraft.nbt.NbtAccounter;
|
||||||
import net.minecraft.nbt.NbtIo;
|
import net.minecraft.nbt.NbtIo;
|
||||||
import net.minecraft.util.Tuple;
|
import net.minecraft.util.Tuple;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
|
@ -222,7 +223,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
|
||||||
if (LitematicaHelper.hasLoadedSchematic()) {
|
if (LitematicaHelper.hasLoadedSchematic()) {
|
||||||
String name = LitematicaHelper.getName(i);
|
String name = LitematicaHelper.getName(i);
|
||||||
try {
|
try {
|
||||||
LitematicaSchematic schematic1 = new LitematicaSchematic(NbtIo.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath())), false);
|
LitematicaSchematic schematic1 = new LitematicaSchematic(NbtIo.readCompressed(Files.newInputStream(LitematicaHelper.getSchematicFile(i).toPath()), NbtAccounter.unlimitedHeap()), false);
|
||||||
Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i);
|
Vec3i correctedOrigin = LitematicaHelper.getCorrectedOrigin(schematic1, i);
|
||||||
ISchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i);
|
ISchematic schematic2 = LitematicaHelper.blackMagicFuckery(schematic1, i);
|
||||||
schematic2 = applyMapArtAndSelection(origin, (IStaticSchematic) schematic2);
|
schematic2 = applyMapArtAndSelection(origin, (IStaticSchematic) schematic2);
|
||||||
|
@ -1063,6 +1064,9 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
|
||||||
if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) {
|
if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (!(current.getBlock() instanceof AirBlock) && Baritone.settings().buildIgnoreExisting.value && !itemVerify) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) {
|
if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,16 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro
|
||||||
private ElytraBehavior behavior;
|
private ElytraBehavior behavior;
|
||||||
private boolean predictingTerrain;
|
private boolean predictingTerrain;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLostControl() {
|
||||||
|
this.state = State.START_FLYING; // TODO: null state?
|
||||||
|
this.goingToLandingSpot = false;
|
||||||
|
this.landingSpot = null;
|
||||||
|
this.reachedGoal = false;
|
||||||
|
this.goal = null;
|
||||||
|
destroyBehaviorAsync();
|
||||||
|
}
|
||||||
|
|
||||||
private ElytraProcess(Baritone baritone) {
|
private ElytraProcess(Baritone baritone) {
|
||||||
super(baritone);
|
super(baritone);
|
||||||
baritone.getGameEventHandler().registerEventListener(this);
|
baritone.getGameEventHandler().registerEventListener(this);
|
||||||
|
@ -276,16 +286,6 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro
|
||||||
this.state = State.FLYING;
|
this.state = State.FLYING;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLostControl() {
|
|
||||||
this.goal = null;
|
|
||||||
this.goingToLandingSpot = false;
|
|
||||||
this.landingSpot = null;
|
|
||||||
this.reachedGoal = false;
|
|
||||||
this.state = State.START_FLYING; // TODO: null state?
|
|
||||||
destroyBehaviorAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void destroyBehaviorAsync() {
|
private void destroyBehaviorAsync() {
|
||||||
ElytraBehavior behavior = this.behavior;
|
ElytraBehavior behavior = this.behavior;
|
||||||
if (behavior != null) {
|
if (behavior != null) {
|
||||||
|
|
|
@ -176,9 +176,9 @@ public final class ElytraBehavior implements Helper {
|
||||||
.thenRun(() -> {
|
.thenRun(() -> {
|
||||||
final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1));
|
final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1));
|
||||||
if (this.completePath) {
|
if (this.completePath) {
|
||||||
logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
logVerbose(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
||||||
} else {
|
} else {
|
||||||
logDirect(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
logVerbose(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.whenComplete((result, ex) -> {
|
.whenComplete((result, ex) -> {
|
||||||
|
@ -233,9 +233,9 @@ public final class ElytraBehavior implements Helper {
|
||||||
final double distance = this.path.get(0).distanceTo(this.path.get(recompute));
|
final double distance = this.path.get(0).distanceTo(this.path.get(recompute));
|
||||||
|
|
||||||
if (this.completePath) {
|
if (this.completePath) {
|
||||||
logDirect(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
logVerbose(String.format("Computed path (%.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
||||||
} else {
|
} else {
|
||||||
logDirect(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
logVerbose(String.format("Computed segment (Next %.1f blocks in %.4f seconds)", distance, (System.nanoTime() - start) / 1e9d));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.whenComplete((result, ex) -> {
|
.whenComplete((result, ex) -> {
|
||||||
|
@ -245,7 +245,7 @@ public final class ElytraBehavior implements Helper {
|
||||||
if (cause instanceof PathCalculationException) {
|
if (cause instanceof PathCalculationException) {
|
||||||
logDirect("Failed to compute next segment");
|
logDirect("Failed to compute next segment");
|
||||||
if (ctx.player().distanceToSqr(pathStart.getCenter()) < 16 * 16) {
|
if (ctx.player().distanceToSqr(pathStart.getCenter()) < 16 * 16) {
|
||||||
logDirect("Player is near the segment start, therefore repeating this calculation is pointless. Marking as complete");
|
logVerbose("Player is near the segment start, therefore repeating this calculation is pointless. Marking as complete");
|
||||||
completePath = true;
|
completePath = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -323,7 +323,7 @@ public final class ElytraBehavior implements Helper {
|
||||||
if (ElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) {
|
if (ElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) {
|
||||||
this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1))
|
this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1))
|
||||||
.thenRun(() -> {
|
.thenRun(() -> {
|
||||||
logDirect("Recalculating segment, no progress in last 100 ticks");
|
logVerbose("Recalculating segment, no progress in last 100 ticks");
|
||||||
});
|
});
|
||||||
this.ticksNearUnchanged = 0;
|
this.ticksNearUnchanged = 0;
|
||||||
return;
|
return;
|
||||||
|
@ -350,7 +350,7 @@ public final class ElytraBehavior implements Helper {
|
||||||
final long start = System.nanoTime();
|
final long start = System.nanoTime();
|
||||||
this.pathRecalcSegment(rejoinMainPathAt)
|
this.pathRecalcSegment(rejoinMainPathAt)
|
||||||
.thenRun(() -> {
|
.thenRun(() -> {
|
||||||
logDirect(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)",
|
logVerbose(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)",
|
||||||
SettingsUtil.maybeCensor(blockage.x),
|
SettingsUtil.maybeCensor(blockage.x),
|
||||||
SettingsUtil.maybeCensor(blockage.y),
|
SettingsUtil.maybeCensor(blockage.y),
|
||||||
SettingsUtil.maybeCensor(blockage.z),
|
SettingsUtil.maybeCensor(blockage.z),
|
||||||
|
@ -362,7 +362,7 @@ public final class ElytraBehavior implements Helper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!canSeeAny && rangeStartIncl < rangeEndExcl - 2 && process.state != ElytraProcess.State.GET_TO_JUMP) {
|
if (!canSeeAny && rangeStartIncl < rangeEndExcl - 2 && process.state != ElytraProcess.State.GET_TO_JUMP) {
|
||||||
this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)).thenRun(() -> logDirect("Recalculated segment since no path points were visible"));
|
this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1)).thenRun(() -> logVerbose("Recalculated segment since no path points were visible"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -583,10 +583,10 @@ public final class ElytraBehavior implements Helper {
|
||||||
trySwapElytra();
|
trySwapElytra();
|
||||||
|
|
||||||
if (ctx.player().horizontalCollision) {
|
if (ctx.player().horizontalCollision) {
|
||||||
logDirect("hbonk");
|
logVerbose("hbonk");
|
||||||
}
|
}
|
||||||
if (ctx.player().verticalCollision) {
|
if (ctx.player().verticalCollision) {
|
||||||
logDirect("vbonk");
|
logVerbose("vbonk");
|
||||||
}
|
}
|
||||||
|
|
||||||
final SolverContext solverContext = this.new SolverContext(false);
|
final SolverContext solverContext = this.new SolverContext(false);
|
||||||
|
@ -611,14 +611,14 @@ public final class ElytraBehavior implements Helper {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (solution == null) {
|
if (solution == null) {
|
||||||
logDirect("no solution");
|
logVerbose("no solution");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
baritone.getLookBehavior().updateTarget(solution.rotation, false);
|
baritone.getLookBehavior().updateTarget(solution.rotation, false);
|
||||||
|
|
||||||
if (!solution.solvedPitch) {
|
if (!solution.solvedPitch) {
|
||||||
logDirect("no pitch solution, probably gonna crash in a few ticks LOL!!!");
|
logVerbose("no pitch solution, probably gonna crash in a few ticks LOL!!!");
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
this.aimPos = new BetterBlockPos(solution.goingTo.x, solution.goingTo.y, solution.goingTo.z);
|
this.aimPos = new BetterBlockPos(solution.goingTo.x, solution.goingTo.y, solution.goingTo.z);
|
||||||
|
@ -760,7 +760,7 @@ public final class ElytraBehavior implements Helper {
|
||||||
logDirect("no fireworks");
|
logDirect("no fireworks");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logDirect("attempting to use firework" + (forceUseFirework ? " (forced)" : ""));
|
logVerbose("attempting to use firework" + (forceUseFirework ? " (forced)" : ""));
|
||||||
ctx.playerController().processRightClick(ctx.player(), ctx.world(), InteractionHand.MAIN_HAND);
|
ctx.playerController().processRightClick(ctx.player(), ctx.world(), InteractionHand.MAIN_HAND);
|
||||||
this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getItemInHand(InteractionHand.MAIN_HAND)).orElse(0));
|
this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getItemInHand(InteractionHand.MAIN_HAND)).orElse(0));
|
||||||
this.remainingFireworkTicks = 10;
|
this.remainingFireworkTicks = 10;
|
||||||
|
@ -1319,4 +1319,10 @@ public final class ElytraBehavior implements Helper {
|
||||||
queueWindowClick(ctx.player().inventoryMenu.containerId, slotId, 0, ClickType.PICKUP);
|
queueWindowClick(ctx.player().inventoryMenu.containerId, slotId, 0, ClickType.PICKUP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void logVerbose(String message) {
|
||||||
|
if (Baritone.settings().elytraChatSpam.value) {
|
||||||
|
logDebug(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class Selection implements ISelection {
|
||||||
max.z - min.z + 1
|
max.z - min.z + 1
|
||||||
);
|
);
|
||||||
|
|
||||||
this.aabb = new AABB(this.min, this.max.offset(1, 1, 1));
|
this.aabb = new AABB(this.min);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -38,13 +38,13 @@ public class SelectionRenderer implements IRenderer, AbstractGameEventListener {
|
||||||
IRenderer.glColor(settings.colorSelectionPos1.value, opacity);
|
IRenderer.glColor(settings.colorSelectionPos1.value, opacity);
|
||||||
|
|
||||||
for (ISelection selection : selections) {
|
for (ISelection selection : selections) {
|
||||||
IRenderer.emitAABB(stack, new AABB(selection.pos1(), selection.pos1().offset(1, 1, 1)));
|
IRenderer.emitAABB(stack, new AABB(selection.pos1()));
|
||||||
}
|
}
|
||||||
|
|
||||||
IRenderer.glColor(settings.colorSelectionPos2.value, opacity);
|
IRenderer.glColor(settings.colorSelectionPos2.value, opacity);
|
||||||
|
|
||||||
for (ISelection selection : selections) {
|
for (ISelection selection : selections) {
|
||||||
IRenderer.emitAABB(stack, new AABB(selection.pos2(), selection.pos2().offset(1, 1, 1)));
|
IRenderer.emitAABB(stack, new AABB(selection.pos2()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import baritone.api.schematic.format.ISchematicFormat;
|
||||||
import baritone.utils.schematic.format.defaults.LitematicaSchematic;
|
import baritone.utils.schematic.format.defaults.LitematicaSchematic;
|
||||||
import baritone.utils.schematic.format.defaults.MCEditSchematic;
|
import baritone.utils.schematic.format.defaults.MCEditSchematic;
|
||||||
import baritone.utils.schematic.format.defaults.SpongeSchematic;
|
import baritone.utils.schematic.format.defaults.SpongeSchematic;
|
||||||
|
import net.minecraft.nbt.NbtAccounter;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -44,7 +45,7 @@ public enum DefaultSchematicFormats implements ISchematicFormat {
|
||||||
MCEDIT("schematic") {
|
MCEDIT("schematic") {
|
||||||
@Override
|
@Override
|
||||||
public IStaticSchematic parse(InputStream input) throws IOException {
|
public IStaticSchematic parse(InputStream input) throws IOException {
|
||||||
return new MCEditSchematic(NbtIo.readCompressed(input));
|
return new MCEditSchematic(NbtIo.readCompressed(input, NbtAccounter.unlimitedHeap()));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -56,7 +57,7 @@ public enum DefaultSchematicFormats implements ISchematicFormat {
|
||||||
SPONGE("schem") {
|
SPONGE("schem") {
|
||||||
@Override
|
@Override
|
||||||
public IStaticSchematic parse(InputStream input) throws IOException {
|
public IStaticSchematic parse(InputStream input) throws IOException {
|
||||||
CompoundTag nbt = NbtIo.readCompressed(input);
|
CompoundTag nbt = NbtIo.readCompressed(input, NbtAccounter.unlimitedHeap());
|
||||||
int version = nbt.getInt("Version");
|
int version = nbt.getInt("Version");
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -74,7 +75,7 @@ public enum DefaultSchematicFormats implements ISchematicFormat {
|
||||||
LITEMATICA("litematic") {
|
LITEMATICA("litematic") {
|
||||||
@Override
|
@Override
|
||||||
public IStaticSchematic parse(InputStream input) throws IOException {
|
public IStaticSchematic parse(InputStream input) throws IOException {
|
||||||
CompoundTag nbt = NbtIo.readCompressed(input);
|
CompoundTag nbt = NbtIo.readCompressed(input, NbtAccounter.unlimitedHeap());
|
||||||
int version = nbt.getInt("Version");
|
int version = nbt.getInt("Version");
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case 4: //1.12
|
case 4: //1.12
|
||||||
|
|
|
@ -20,10 +20,10 @@ import baritone.gradle.task.ProguardTask
|
||||||
//import baritone.gradle.task.TweakerJsonAssembler
|
//import baritone.gradle.task.TweakerJsonAssembler
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "com.github.johnrengelman.shadow" version "7.0.0"
|
id "com.github.johnrengelman.shadow" version "8.0.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
minecraft {
|
unimined.minecraft {
|
||||||
runs.client = {
|
runs.client = {
|
||||||
mainClass = "net.minecraft.launchwrapper.Launch"
|
mainClass = "net.minecraft.launchwrapper.Launch"
|
||||||
args.addAll(["--tweakClass", "baritone.launch.BaritoneTweaker"])
|
args.addAll(["--tweakClass", "baritone.launch.BaritoneTweaker"])
|
||||||
|
@ -66,18 +66,18 @@ dependencies {
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
configurations = [project.configurations.shadowCommon]
|
configurations = [project.configurations.shadowCommon]
|
||||||
classifier "dev-shadow"
|
archiveClassifier.set "dev-shadow"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
remapJar {
|
remapJar {
|
||||||
inputFile.set shadowJar.archiveFile
|
inputFile.set shadowJar.archiveFile
|
||||||
dependsOn shadowJar
|
dependsOn shadowJar
|
||||||
classifier null
|
archiveClassifier.set null
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
classifier "dev"
|
archiveClassifier.set "dev"
|
||||||
|
|
||||||
preserveFileTimestamps = false
|
preserveFileTimestamps = false
|
||||||
reproducibleFileOrder = true
|
reproducibleFileOrder = true
|
||||||
|
|
Loading…
Reference in New Issue