mirror of https://github.com/cabaletta/baritone
Merge branch '1.19.4' into just-unimined-update
This commit is contained in:
commit
5795baab1a
|
@ -28,7 +28,7 @@ jobs:
|
|||
run: chmod +x gradlew
|
||||
|
||||
- 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
|
||||
uses: actions/upload-artifact@v3
|
||||
|
|
|
@ -42,3 +42,5 @@ mapping
|
|||
|
||||
libs/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar
|
||||
libs/java-objc-bridge-1.1.jar
|
||||
|
||||
mapping
|
||||
|
|
|
@ -6,6 +6,7 @@ RUN apt update -y
|
|||
|
||||
RUN apt install \
|
||||
openjdk-17-jdk \
|
||||
git \
|
||||
--assume-yes
|
||||
|
||||
COPY . /code
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.13.2-yellow.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.14.4-yellow.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.15.2-yellow.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.16.5-brightgreen.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.16.5-yellow.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.17.1-yellow.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.18.2-brightgreen.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.18.2-yellow.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.19.2-brightgreen.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.19.4-brightgreen.svg" alt="Minecraft"/></a>
|
||||
<a href="#Baritone"><img src="https://img.shields.io/badge/MC-1.20.1-brightgreen.svg" alt="Minecraft"/></a>
|
||||
|
@ -60,7 +60,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s
|
|||
|
||||
| Forge | Fabric |
|
||||
|---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
|
||||
| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.18/baritone-api-forge-1.2.18.jar) | |
|
||||
| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.19/baritone-api-forge-1.2.19.jar) | |
|
||||
| [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-forge-1.6.5.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.5/baritone-api-fabric-1.6.5.jar) |
|
||||
| [1.17.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-forge-1.7.3.jar) | [1.17.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.7.3/baritone-api-fabric-1.7.3.jar) |
|
||||
| [1.18.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-forge-1.8.5.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.5/baritone-api-fabric-1.8.5.jar) |
|
||||
|
@ -69,7 +69,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s
|
|||
| [1.19.4 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-forge-1.9.3.jar) | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.3/baritone-api-fabric-1.9.3.jar) |
|
||||
| [1.20.1 Forge](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-forge-1.10.1.jar) | [1.20.1 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.10.1/baritone-api-fabric-1.10.1.jar) |
|
||||
|
||||
**Message for 2b2t players looking for 1.19/1.20 Baritone** Download it from right above ^. But also please check back in a few days for Baritone Elytra ([vid 1](https://youtu.be/4bGGPo8yiHo) [vid 2](https://www.youtube.com/watch?v=pUN9nmINe3I)), which will be ported to 1.19/1.20 soon! It will work on 2b2t with its anticheat, that was the whole point of Baritone Elytra (it's fully vanilla compatible). Also join [**the discord**](http://discord.gg/s6fRBAUpmr). Thanks!
|
||||
**Message for 2b2t players looking for 1.19/1.20 Baritone** If you like, please try the beta for Baritone Elytra for 2b2t, find it in #announcements of [the Baritone discord](http://discord.gg/s6fRBAUpmr). It supports 1.19.4 and 1.20.1, Forge or Fabric. If you have to see it to believe it, watch [this YouTube video](https://youtu.be/NnSlQi-68eQ).
|
||||
|
||||
**How to immediately get started:** Type `#goto 1000 500` in chat to go to x=1000 z=500. Type `#mine diamond_ore` to mine diamond ore. Type `#stop` to stop. For more, read [the usage page](USAGE.md) and/or watch this [tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa). Also try `#elytra` for Elytra flying in the Nether using fireworks.
|
||||
|
||||
|
|
17
build.gradle
17
build.gradle
|
@ -21,12 +21,19 @@ allprojects {
|
|||
apply plugin: "maven-publish"
|
||||
|
||||
archivesBaseName = rootProject.archives_base_name
|
||||
def vers = 'git describe --always --dirty'.execute().text.trim()
|
||||
if (vers.isEmpty()) {
|
||||
|
||||
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")) {
|
||||
println "using version number: " + rootProject.mod_version
|
||||
version = rootProject.mod_version
|
||||
} else {
|
||||
version = rootProject.mod_version + "-" + vers
|
||||
version = vers.substring(1)
|
||||
println "Detected version " + version
|
||||
}
|
||||
group = rootProject.maven_group
|
||||
|
||||
|
@ -70,7 +77,7 @@ allprojects {
|
|||
// The following line declares the yarn mappings you may select this one as well.
|
||||
// mappings "net.fabricmc:yarn:1.17.1+build.32:v2"
|
||||
//launchImplementation('dev.babbaj:nether-pathfinder:1.3.0')
|
||||
implementation 'dev.babbaj:nether-pathfinder:1.3.0'
|
||||
implementation 'dev.babbaj:nether-pathfinder:1.4.1'
|
||||
}
|
||||
|
||||
unimined.minecraft(sourceSets.main, true) {
|
||||
|
@ -141,4 +148,4 @@ javadoc {
|
|||
options.encoding "UTF-8" // allow emoji in comments :^)
|
||||
source = sourceSets.api.allJava
|
||||
classpath += sourceSets.api.compileClasspath
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,6 +125,9 @@ public class ProguardTask extends BaritoneGradleTask {
|
|||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
path = findJavaByGradleCurrentRuntime();
|
||||
if (path != null) return path;
|
||||
|
||||
try {
|
||||
path = findJavaByJavaHome();
|
||||
if (path != null) return path;
|
||||
|
@ -133,10 +136,6 @@ public class ProguardTask extends BaritoneGradleTask {
|
|||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
path = findJavaByGradleCurrentRuntime();
|
||||
if (path != null) return path;
|
||||
|
||||
throw new Exception("Unable to find java to determine ProGuard libraryjars. Please specify forkOptions.executable in javaCompile," +
|
||||
" JAVA_HOME environment variable, or make sure to run Gradle with the correct JDK (a v1.8 only)");
|
||||
}
|
||||
|
|
|
@ -101,4 +101,4 @@ publishing {
|
|||
repositories {
|
||||
// Add repositories to publish to here.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -743,7 +743,7 @@ public final class Settings {
|
|||
/**
|
||||
* Automatically elytra fly without having to force the client-sided rotations.
|
||||
*/
|
||||
public final Setting<Boolean> elytraFreeLook = new Setting<>(false);
|
||||
public final Setting<Boolean> elytraFreeLook = new Setting<>(true);
|
||||
|
||||
/**
|
||||
* Forces the client-sided yaw rotation to an average of the last {@link #smoothLookTicks} of server-sided rotations.
|
||||
|
@ -753,7 +753,7 @@ public final class Settings {
|
|||
/**
|
||||
* Same as {@link #smoothLook} but for elytra flying.
|
||||
*/
|
||||
public final Setting<Boolean> elytraSmoothLook = new Setting<>(true);
|
||||
public final Setting<Boolean> elytraSmoothLook = new Setting<>(false);
|
||||
|
||||
/**
|
||||
* The number of ticks to average across for {@link #smoothLook};
|
||||
|
@ -1426,7 +1426,7 @@ public final class Settings {
|
|||
* Whether nether-pathfinder should generate terrain based on {@link #elytraNetherSeed}.
|
||||
* If false all chunks that haven't been loaded are assumed to be air.
|
||||
*/
|
||||
public final Setting<Boolean> elytraPredictTerrain = new Setting<>(true);
|
||||
public final Setting<Boolean> elytraPredictTerrain = new Setting<>(false);
|
||||
|
||||
/**
|
||||
* Automatically swap the current elytra with a new one when the durability gets too low
|
||||
|
@ -1468,6 +1468,11 @@ public final class Settings {
|
|||
*/
|
||||
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
|
||||
*/
|
||||
|
|
|
@ -82,7 +82,6 @@ public final class LookBehavior extends Behavior implements ILookBehavior {
|
|||
|
||||
@Override
|
||||
public void onPlayerUpdate(PlayerUpdateEvent event) {
|
||||
System.out.println(event.getState() + " " + ctx.player().getXRot() + " " + ctx.player().getYRot() + " " + ctx.player().xRotO + " " + ctx.player().yRotO);
|
||||
|
||||
if (this.target == null) {
|
||||
return;
|
||||
|
|
|
@ -196,9 +196,7 @@ public final class CachedWorld implements ICachedWorld, Helper {
|
|||
int distZ = ((region.getZ() << 9) + 256) - pruneCenter.getZ();
|
||||
double dist = Math.sqrt(distX * distX + distZ * distZ);
|
||||
if (dist > 1024) {
|
||||
if (!Baritone.settings().censorCoordinates.value) {
|
||||
logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram");
|
||||
}
|
||||
logDebug("Deleting cached region from ram");
|
||||
cachedRegions.remove(getRegionID(region.getX(), region.getZ()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ package baritone.cache;
|
|||
import baritone.api.cache.ICachedWorld;
|
||||
import baritone.api.cache.IWorldScanner;
|
||||
import baritone.api.utils.BetterBlockPos;
|
||||
import baritone.api.utils.BlockOptionalMeta;
|
||||
import baritone.api.utils.BlockOptionalMetaLookup;
|
||||
import baritone.api.utils.IPlayerContext;
|
||||
import baritone.utils.accessor.IPalettedContainer;
|
||||
|
@ -45,6 +46,9 @@ import java.util.stream.Stream;
|
|||
|
||||
public enum FasterWorldScanner implements IWorldScanner {
|
||||
INSTANCE;
|
||||
|
||||
private static final BlockState[] PALETTE_REGISTRY_SENTINEL = new BlockState[0];
|
||||
|
||||
@Override
|
||||
public List<BlockPos> scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) {
|
||||
assert ctx.world() != null;
|
||||
|
@ -151,7 +155,7 @@ public enum FasterWorldScanner implements IWorldScanner {
|
|||
long chunkX = (long) pos.x << 4;
|
||||
long chunkZ = (long) pos.z << 4;
|
||||
|
||||
int playerSectionY = ctx.playerFeet().y >> 4;
|
||||
int playerSectionY = (ctx.playerFeet().y - ctx.world().getMinBuildHeight()) >> 4;
|
||||
|
||||
return collectChunkSections(lookup, chunkProvider.getChunk(pos.x, pos.z, false), chunkX, chunkZ, playerSectionY).stream();
|
||||
}
|
||||
|
@ -219,13 +223,18 @@ public enum FasterWorldScanner implements IWorldScanner {
|
|||
|
||||
private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, Palette<BlockState> palette) {
|
||||
boolean commonBlockFound = false;
|
||||
IdMapper<BlockState> paletteMap = getPalette(palette);
|
||||
int size = paletteMap.size();
|
||||
BlockState[] paletteMap = getPalette(palette);
|
||||
|
||||
if (paletteMap == PALETTE_REGISTRY_SENTINEL) {
|
||||
return getIncludedFilterIndicesFromRegistry(lookup);
|
||||
}
|
||||
|
||||
int size = paletteMap.length;
|
||||
|
||||
boolean[] isInFilter = new boolean[size];
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
BlockState state = paletteMap.byId(i);
|
||||
BlockState state = paletteMap[i];
|
||||
if (lookup.has(state)) {
|
||||
isInFilter[i] = true;
|
||||
commonBlockFound = true;
|
||||
|
@ -240,21 +249,34 @@ public enum FasterWorldScanner implements IWorldScanner {
|
|||
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
|
||||
*/
|
||||
private static IdMapper<BlockState> getPalette(Palette<BlockState> palette) {
|
||||
private static BlockState[] getPalette(Palette<BlockState> palette) {
|
||||
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 {
|
||||
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
|
||||
palette.write(buf);
|
||||
int size = buf.readVarInt();
|
||||
IdMapper<BlockState> states = new IdMapper<>();
|
||||
BlockState[] states = new BlockState[size];
|
||||
for (int i = 0; i < size; i++) {
|
||||
BlockState state = Block.BLOCK_STATE_REGISTRY.byId(buf.readVarInt());
|
||||
assert state != null;
|
||||
states.addMapping(state, i);
|
||||
states[i] = state;
|
||||
}
|
||||
return states;
|
||||
}
|
||||
|
|
|
@ -1063,6 +1063,9 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
|
|||
if (desired.getBlock() instanceof AirBlock && Baritone.settings().buildIgnoreBlocks.value.contains(current.getBlock())) {
|
||||
return true;
|
||||
}
|
||||
if (!(current.getBlock() instanceof AirBlock) && Baritone.settings().buildIgnoreExisting.value && !itemVerify) {
|
||||
return true;
|
||||
}
|
||||
if (Baritone.settings().buildSkipBlocks.value.contains(desired.getBlock()) && !itemVerify) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -69,6 +69,16 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro
|
|||
private ElytraBehavior behavior;
|
||||
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) {
|
||||
super(baritone);
|
||||
baritone.getGameEventHandler().registerEventListener(this);
|
||||
|
@ -276,16 +286,6 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro
|
|||
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() {
|
||||
ElytraBehavior behavior = this.behavior;
|
||||
if (behavior != null) {
|
||||
|
@ -405,8 +405,6 @@ public class ElytraProcess extends BaritoneProcessHelper implements IBaritonePro
|
|||
|
||||
@Override
|
||||
public void onRenderPass(RenderEvent event) {
|
||||
System.out.println(event.getPartialTicks() + " " + ctx.player().getXRot() + " " + ctx.player().getYRot() + " " + ctx.player().xRotO + " " + ctx.player().yRotO);
|
||||
|
||||
if (this.behavior != null) this.behavior.onRenderPass(event);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import baritone.api.behavior.look.ITickableAimProcessor;
|
|||
import baritone.api.event.events.*;
|
||||
import baritone.api.pathing.goals.GoalBlock;
|
||||
import baritone.api.utils.*;
|
||||
import baritone.api.utils.input.Input;
|
||||
import baritone.process.ElytraProcess;
|
||||
import baritone.utils.BlockStateInterface;
|
||||
import baritone.utils.IRenderer;
|
||||
|
@ -42,6 +43,7 @@ import net.minecraft.world.entity.projectile.FireworkRocketEntity;
|
|||
import net.minecraft.world.inventory.ClickType;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.ChunkPos;
|
||||
import net.minecraft.world.level.ClipContext;
|
||||
import net.minecraft.world.level.chunk.ChunkSource;
|
||||
import net.minecraft.world.level.chunk.LevelChunk;
|
||||
|
@ -100,7 +102,7 @@ public final class ElytraBehavior implements Helper {
|
|||
|
||||
private BlockStateInterface bsi;
|
||||
private final BlockStateOctreeInterface boi;
|
||||
public final BlockPos destination;
|
||||
public final BetterBlockPos destination;
|
||||
private final boolean appendDestination;
|
||||
|
||||
private final ExecutorService solverExecutor;
|
||||
|
@ -121,7 +123,7 @@ public final class ElytraBehavior implements Helper {
|
|||
this.blockedLines = new CopyOnWriteArrayList<>();
|
||||
this.pathManager = this.new PathManager();
|
||||
this.process = process;
|
||||
this.destination = destination;
|
||||
this.destination = new BetterBlockPos(destination);
|
||||
this.appendDestination = appendDestination;
|
||||
this.solverExecutor = Executors.newSingleThreadExecutor();
|
||||
this.nextTickBoostCounter = new int[2];
|
||||
|
@ -172,9 +174,9 @@ public final class ElytraBehavior implements Helper {
|
|||
.thenRun(() -> {
|
||||
final double distance = this.path.get(0).distanceTo(this.path.get(this.path.size() - 1));
|
||||
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 {
|
||||
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) -> {
|
||||
|
@ -190,16 +192,16 @@ public final class ElytraBehavior implements Helper {
|
|||
});
|
||||
}
|
||||
|
||||
public CompletableFuture<Void> pathRecalcSegment(final int upToIncl) {
|
||||
public CompletableFuture<Void> pathRecalcSegment(final OptionalInt upToIncl) {
|
||||
if (this.recalculating) {
|
||||
throw new IllegalStateException("already recalculating");
|
||||
}
|
||||
|
||||
this.recalculating = true;
|
||||
final List<BetterBlockPos> after = this.path.subList(upToIncl + 1, this.path.size());
|
||||
final List<BetterBlockPos> after = upToIncl.isPresent() ? this.path.subList(upToIncl.getAsInt() + 1, this.path.size()) : Collections.emptyList();
|
||||
final boolean complete = this.completePath;
|
||||
|
||||
return this.path0(ctx.playerFeet(), this.path.get(upToIncl), segment -> segment.append(after.stream(), complete))
|
||||
return this.path0(ctx.playerFeet(), upToIncl.isPresent() ? this.path.get(upToIncl.getAsInt()) : ElytraBehavior.this.destination, segment -> segment.append(after.stream(), complete || (segment.isFinished() && !upToIncl.isPresent())))
|
||||
.whenComplete((result, ex) -> {
|
||||
this.recalculating = false;
|
||||
if (ex != null) {
|
||||
|
@ -229,9 +231,9 @@ public final class ElytraBehavior implements Helper {
|
|||
final double distance = this.path.get(0).distanceTo(this.path.get(recompute));
|
||||
|
||||
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 {
|
||||
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) -> {
|
||||
|
@ -241,7 +243,7 @@ public final class ElytraBehavior implements Helper {
|
|||
if (cause instanceof PathCalculationException) {
|
||||
logDirect("Failed to compute next segment");
|
||||
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;
|
||||
}
|
||||
} else {
|
||||
|
@ -302,7 +304,7 @@ public final class ElytraBehavior implements Helper {
|
|||
|
||||
int rangeStartIncl = playerNear;
|
||||
int rangeEndExcl = playerNear;
|
||||
while (rangeEndExcl < path.size() && ctx.world().isLoaded(path.get(rangeEndExcl))) {
|
||||
while (rangeEndExcl < path.size() && context.hasChunk(new ChunkPos(path.get(rangeEndExcl)))) {
|
||||
rangeEndExcl++;
|
||||
}
|
||||
// rangeEndExcl now represents an index either not in the path, or just outside render distance
|
||||
|
@ -317,9 +319,9 @@ public final class ElytraBehavior implements Helper {
|
|||
}
|
||||
|
||||
if (ElytraBehavior.this.process.state != ElytraProcess.State.LANDING && this.ticksNearUnchanged > 100) {
|
||||
this.pathRecalcSegment(rangeEndExcl - 1)
|
||||
this.pathRecalcSegment(OptionalInt.of(rangeEndExcl - 1))
|
||||
.thenRun(() -> {
|
||||
logDirect("Recalculating segment, no progress in last 100 ticks");
|
||||
logVerbose("Recalculating segment, no progress in last 100 ticks");
|
||||
});
|
||||
this.ticksNearUnchanged = 0;
|
||||
return;
|
||||
|
@ -332,14 +334,21 @@ public final class ElytraBehavior implements Helper {
|
|||
}
|
||||
if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) {
|
||||
// obstacle. where do we return to pathing?
|
||||
// find the next valid segment
|
||||
// if the end of render distance is closer to goal, then that's fine, otherwise we'd be "digging our hole deeper" and making an already bad backtrack worse
|
||||
OptionalInt rejoinMainPathAt;
|
||||
if (this.path.get(rangeEndExcl - 1).distanceSq(ElytraBehavior.this.destination) < ctx.playerFeet().distanceSq(ElytraBehavior.this.destination)) {
|
||||
rejoinMainPathAt = OptionalInt.of(rangeEndExcl - 1); // rejoin after current render distance
|
||||
} else {
|
||||
rejoinMainPathAt = OptionalInt.empty(); // large backtrack detected. ignore render distance, rejoin later on
|
||||
}
|
||||
|
||||
final BetterBlockPos blockage = this.path.get(i);
|
||||
final double distance = ctx.playerFeet().distanceTo(this.path.get(rangeEndExcl - 1));
|
||||
final double distance = ctx.playerFeet().distanceTo(this.path.get(rejoinMainPathAt.orElse(path.size() - 1)));
|
||||
|
||||
final long start = System.nanoTime();
|
||||
this.pathRecalcSegment(rangeEndExcl - 1)
|
||||
this.pathRecalcSegment(rejoinMainPathAt)
|
||||
.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.y),
|
||||
SettingsUtil.maybeCensor(blockage.z),
|
||||
|
@ -351,7 +360,7 @@ public final class ElytraBehavior implements Helper {
|
|||
}
|
||||
}
|
||||
if (!canSeeAny && rangeStartIncl < rangeEndExcl - 2 && process.state != ElytraProcess.State.GET_TO_JUMP) {
|
||||
this.pathRecalcSegment(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"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -572,10 +581,10 @@ public final class ElytraBehavior implements Helper {
|
|||
trySwapElytra();
|
||||
|
||||
if (ctx.player().horizontalCollision) {
|
||||
logDirect("hbonk");
|
||||
logVerbose("hbonk");
|
||||
}
|
||||
if (ctx.player().verticalCollision) {
|
||||
logDirect("vbonk");
|
||||
logVerbose("vbonk");
|
||||
}
|
||||
|
||||
final SolverContext solverContext = this.new SolverContext(false);
|
||||
|
@ -594,15 +603,20 @@ public final class ElytraBehavior implements Helper {
|
|||
this.deployedFireworkLastTick = false;
|
||||
}
|
||||
|
||||
final boolean inLava = ctx.player().isInLava();
|
||||
if (inLava) {
|
||||
baritone.getInputOverrideHandler().setInputForceState(Input.JUMP, true);
|
||||
}
|
||||
|
||||
if (solution == null) {
|
||||
logDirect("no solution");
|
||||
logVerbose("no solution");
|
||||
return;
|
||||
}
|
||||
|
||||
baritone.getLookBehavior().updateTarget(solution.rotation, false);
|
||||
|
||||
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;
|
||||
} else {
|
||||
this.aimPos = new BetterBlockPos(solution.goingTo.x, solution.goingTo.y, solution.goingTo.z);
|
||||
|
@ -612,7 +626,7 @@ public final class ElytraBehavior implements Helper {
|
|||
solution.context.start,
|
||||
solution.goingTo,
|
||||
solution.context.boost.isBoosted(),
|
||||
solution.forceUseFirework
|
||||
solution.forceUseFirework || inLava
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -744,7 +758,7 @@ public final class ElytraBehavior implements Helper {
|
|||
logDirect("no fireworks");
|
||||
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);
|
||||
this.minimumBoostTicks = 10 * (1 + getFireworkBoost(ctx.player().getItemInHand(InteractionHand.MAIN_HAND)).orElse(0));
|
||||
this.remainingFireworkTicks = 10;
|
||||
|
@ -994,7 +1008,7 @@ public final class ElytraBehavior implements Helper {
|
|||
// if start == dest then the cpp raytracer dies
|
||||
clear = start.equals(dest) || this.context.raytrace(start, dest);
|
||||
} else {
|
||||
clear = ctx.world().clip(new ClipContext(start, dest, ClipContext.Block.COLLIDER, ClipContext.Fluid.ANY, ctx.player())).getType() == HitResult.Type.MISS;
|
||||
clear = ctx.world().clip(new ClipContext(start, dest, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, ctx.player())).getType() == HitResult.Type.MISS;
|
||||
}
|
||||
|
||||
if (Baritone.settings().elytraRenderRaytraces.value) {
|
||||
|
@ -1303,4 +1317,10 @@ public final class ElytraBehavior implements Helper {
|
|||
queueWindowClick(ctx.player().inventoryMenu.containerId, slotId, 0, ClickType.PICKUP);
|
||||
}
|
||||
}
|
||||
|
||||
void logVerbose(String message) {
|
||||
if (Baritone.settings().elytraChatSpam.value) {
|
||||
logDebug(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,10 @@ public final class NetherPathfinderContext {
|
|||
this.executor = Executors.newSingleThreadExecutor();
|
||||
}
|
||||
|
||||
public boolean hasChunk(ChunkPos pos) {
|
||||
return NetherPathfinder.hasChunkFromJava(this.context, pos.x, pos.z);
|
||||
}
|
||||
|
||||
public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks, BlockStateOctreeInterface boi) {
|
||||
this.executor.execute(() -> {
|
||||
synchronized (this.cullingLock) {
|
||||
|
|
|
@ -132,7 +132,7 @@ public class BlockStateInterface {
|
|||
prevCached = region;
|
||||
cached = region;
|
||||
}
|
||||
BlockState type = cached.getBlock(x & 511, y, z & 511);
|
||||
BlockState type = cached.getBlock(x & 511, y + world.dimensionType().minY(), z & 511);
|
||||
if (type == null) {
|
||||
return AIR;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue