From 1736f2ffc7c92eff5cd117ee7a9c0cb78207dce1 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Fri, 23 Dec 2022 16:34:49 -0700
Subject: [PATCH 001/405] replace the world scanner with a 500x faster one
---
.../baritone/launch/mixins/MixinBitArray.java | 10 +
.../mixins/MixinBlockStateContainer.java | 10 +
src/main/java/baritone/BaritoneProvider.java | 3 +-
.../baritone/cache/FasterWorldScanner.java | 270 ++++++++++++++++++
.../command/defaults/MineCommand.java | 3 +-
.../command/defaults/PathCommand.java | 3 +-
.../command/defaults/RepackCommand.java | 3 +-
.../java/baritone/process/FarmProcess.java | 3 +-
.../java/baritone/process/MineProcess.java | 3 +-
.../baritone/utils/accessor/IBitArray.java | 4 +
.../utils/accessor/IBlockStateContainer.java | 6 +
11 files changed, 312 insertions(+), 6 deletions(-)
create mode 100644 src/main/java/baritone/cache/FasterWorldScanner.java
diff --git a/src/launch/java/baritone/launch/mixins/MixinBitArray.java b/src/launch/java/baritone/launch/mixins/MixinBitArray.java
index bece3e3bf..bf7d9e535 100644
--- a/src/launch/java/baritone/launch/mixins/MixinBitArray.java
+++ b/src/launch/java/baritone/launch/mixins/MixinBitArray.java
@@ -64,4 +64,14 @@ public abstract class MixinBitArray implements IBitArray {
return out;
}
+
+ @Override
+ public long getMaxEntryValue() {
+ return maxEntryValue;
+ }
+
+ @Override
+ public int getBitsPerEntry() {
+ return bitsPerEntry;
+ }
}
diff --git a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java b/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java
index f1cc28b9f..566c3cf8b 100644
--- a/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java
+++ b/src/launch/java/baritone/launch/mixins/MixinBlockStateContainer.java
@@ -35,6 +35,16 @@ public abstract class MixinBlockStateContainer implements IBlockStateContainer {
@Shadow
protected IBlockStatePalette palette;
+ @Override
+ public IBlockStatePalette getPalette() {
+ return palette;
+ }
+
+ @Override
+ public BitArray getStorage() {
+ return storage;
+ }
+
@Override
public IBlockState getAtPalette(int index) {
return palette.getBlockState(index);
diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java
index d5457cf85..c49c02e10 100644
--- a/src/main/java/baritone/BaritoneProvider.java
+++ b/src/main/java/baritone/BaritoneProvider.java
@@ -22,6 +22,7 @@ import baritone.api.IBaritoneProvider;
import baritone.api.cache.IWorldScanner;
import baritone.api.command.ICommandSystem;
import baritone.api.schematic.ISchematicSystem;
+import baritone.cache.FasterWorldScanner;
import baritone.cache.WorldScanner;
import baritone.command.CommandSystem;
import baritone.command.ExampleBaritoneControl;
@@ -59,7 +60,7 @@ public final class BaritoneProvider implements IBaritoneProvider {
@Override
public IWorldScanner getWorldScanner() {
- return WorldScanner.INSTANCE;
+ return FasterWorldScanner.INSTANCE;
}
@Override
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
new file mode 100644
index 000000000..f1829f9f0
--- /dev/null
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -0,0 +1,270 @@
+/*
+ * 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 .
+ */
+
+package baritone.cache;
+
+import baritone.api.cache.ICachedWorld;
+import baritone.api.cache.IWorldScanner;
+import baritone.api.utils.BetterBlockPos;
+import baritone.api.utils.BlockOptionalMetaLookup;
+import baritone.api.utils.IPlayerContext;
+import baritone.utils.accessor.IBitArray;
+import baritone.utils.accessor.IBlockStateContainer;
+import io.netty.buffer.Unpooled;
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import net.minecraft.block.Block;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.util.BitArray;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.ChunkPos;
+import net.minecraft.world.chunk.*;
+import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.BiConsumer;
+import java.util.function.IntConsumer;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public enum FasterWorldScanner implements IWorldScanner {
+ INSTANCE;
+ @Override
+ public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) {
+ return new WorldScannerContext(filter, ctx).scanAroundPlayerRange(maxSearchRadius);
+ }
+
+ @Override
+ public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) {
+ return new WorldScannerContext(filter, ctx).scanAroundPlayerUntilCount(max);
+ }
+
+ @Override
+ public int repack(IPlayerContext ctx) {
+ return this.repack(ctx, 40);
+ }
+
+ @Override
+ public int repack(IPlayerContext ctx, int range) {
+ IChunkProvider chunkProvider = ctx.world().getChunkProvider();
+ ICachedWorld cachedWorld = ctx.worldData().getCachedWorld();
+
+ BetterBlockPos playerPos = ctx.playerFeet();
+
+ int playerChunkX = playerPos.getX() >> 4;
+ int playerChunkZ = playerPos.getZ() >> 4;
+
+ int minX = playerChunkX - range;
+ int minZ = playerChunkZ - range;
+ int maxX = playerChunkX + range;
+ int maxZ = playerChunkZ + range;
+
+ int queued = 0;
+ for (int x = minX; x <= maxX; x++) {
+ for (int z = minZ; z <= maxZ; z++) {
+ Chunk chunk = chunkProvider.getLoadedChunk(x, z);
+
+ if (chunk != null && !chunk.isEmpty()) {
+ queued++;
+ cachedWorld.queueForPacking(chunk);
+ }
+ }
+ }
+
+ return queued;
+ }
+
+ // for porting, see {@link https://github.com/JsMacros/JsMacros/blob/backport-1.12.2/common/src/main/java/xyz/wagyourtail/jsmacros/client/api/classes/worldscanner/WorldScanner.java}
+ public static class WorldScannerContext {
+ private final BlockOptionalMetaLookup filter;
+ private final IPlayerContext ctx;
+ private final Map cachedFilter = new ConcurrentHashMap<>();
+
+ public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) {
+ this.filter = filter;
+ this.ctx = ctx;
+ }
+
+ public List getChunkRange(int centerX, int centerZ, int chunkrange) {
+ List chunks = new ArrayList<>();
+ for (int x = centerX - chunkrange; x <= centerX + chunkrange; x++) {
+ for (int z = centerZ - chunkrange; z <= centerZ + chunkrange; z++) {
+ chunks.add(new ChunkPos(x, z));
+ }
+ }
+ return chunks;
+ }
+
+ public List scanAroundPlayerRange(int range) {
+ return scanAroundPlayer(range, -1);
+ }
+
+ public List scanAroundPlayerUntilCount(int count) {
+ return scanAroundPlayer(32, count);
+ }
+
+ public List scanAroundPlayer(int range, int maxCount) {
+ assert ctx.player() != null;
+ return scanChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, range, maxCount);
+ }
+
+ public List scanChunkRange(int centerX, int centerZ, int chunkRange, int maxBlocks) {
+ assert ctx.world() != null;
+ if (chunkRange < 0) {
+ throw new IllegalArgumentException("chunkRange must be >= 0");
+ }
+ return scanChunksInternal(getChunkRange(centerX, centerZ, chunkRange), maxBlocks);
+ }
+
+ private List scanChunksInternal(List chunkPositions, int maxBlocks) {
+ assert ctx.world() != null;
+ return chunkPositions.parallelStream().flatMap(this::scanChunkInternal).limit(maxBlocks <= 0 ? Long.MAX_VALUE : maxBlocks).collect(Collectors.toList());
+ }
+ private Stream scanChunkInternal(ChunkPos pos) {
+ IChunkProvider chunkProvider = ctx.world().getChunkProvider();
+ // if chunk is not loaded, return empty stream
+ if (!chunkProvider.isChunkGeneratedAt(pos.x, pos.z)) {
+ return Stream.empty();
+ }
+
+ long chunkX = (long) pos.x << 4;
+ long chunkZ = (long) pos.z << 4;
+
+ List blocks = new ArrayList<>();
+
+ streamChunkSections(chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> {
+ int yOffset = section.getYLocation();
+ BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage();
+ forEach(array, isInFilter, place -> blocks.add(new BlockPos(
+ chunkX + ((place & 255) & 15),
+ yOffset + (place >> 8),
+ chunkZ + ((place & 255) >> 4)
+ )));
+ });
+ return blocks.stream();
+ }
+
+ private void streamChunkSections(Chunk chunk, BiConsumer consumer) {
+ for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) {
+ if (section == null || section.isEmpty()) {
+ continue;
+ }
+
+ BlockStateContainer sectionContainer = section.getData();
+ //this won't work if the PaletteStorage is of the type EmptyPaletteStorage
+ if (((IBlockStateContainer) sectionContainer).getStorage() == null) {
+ continue;
+ }
+
+ boolean[] isInFilter = getIncludedFilterIndices(((IBlockStateContainer) sectionContainer).getPalette());
+ if (isInFilter.length == 0) {
+ continue;
+ }
+ consumer.accept(section, isInFilter);
+ }
+ }
+
+ private boolean getFilterResult(IBlockState state) {
+ Boolean v;
+ return (v = cachedFilter.get(state)) == null ? addCachedState(state) : v;
+ }
+
+ private boolean addCachedState(IBlockState state) {
+ boolean isInFilter = false;
+
+ if (filter != null) {
+ isInFilter = filter.has(state);
+ }
+
+ cachedFilter.put(state, isInFilter);
+ return isInFilter;
+ }
+
+ private boolean[] getIncludedFilterIndices(IBlockStatePalette palette) {
+ boolean commonBlockFound = false;
+ Int2ObjectOpenHashMap paletteMap = getPalette(palette);
+ int size = paletteMap.size();
+
+ boolean[] isInFilter = new boolean[size];
+
+ for (int i = 0; i < size; i++) {
+ IBlockState state = paletteMap.get(i);
+ if (getFilterResult(state)) {
+ isInFilter[i] = true;
+ commonBlockFound = true;
+ } else {
+ isInFilter[i] = false;
+ }
+ }
+
+ if (!commonBlockFound) {
+ return new boolean[0];
+ }
+ return isInFilter;
+ }
+
+ private static void forEach(BitArray array, boolean[] isInFilter, IntConsumer action) {
+ int counter = 0;
+ long[] storage = array.getBackingLongArray();
+ int arraySize = array.size();
+ int elementBits = ((IBitArray) array).getBitsPerEntry();
+ long maxValue = ((IBitArray) array).getMaxEntryValue();
+ int storageLength = storage.length;
+
+ if (storageLength != 0) {
+ int lastStorageIdx = 0;
+ long row = storage[0];
+ long nextRow = storageLength > 1 ? storage[1] : 0L;
+
+ for (int idx = 0; idx < arraySize; idx++) {
+ int n = idx * elementBits;
+ int storageIdx = n >> 6;
+ int p = (idx + 1) * elementBits - 1 >> 6;
+ int q = n ^ storageIdx << 6;
+ if (storageIdx != lastStorageIdx) {
+ row = nextRow;
+ nextRow = storageIdx + 1 < storageLength ? storage[storageIdx + 1] : 0L;
+ lastStorageIdx = storageIdx;
+ }
+ if (storageIdx == p) {
+ if (isInFilter[(int) (row >>> q & maxValue)]) {
+ action.accept(counter);
+ } else {
+ if (isInFilter[(int) ((row >>> q | nextRow << (64 - q)) & maxValue)]) {
+ action.accept(counter);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private static Int2ObjectOpenHashMap getPalette(IBlockStatePalette palette) {
+ PacketBuffer buf = new PacketBuffer(Unpooled.buffer());
+ palette.write(buf);
+ int size = buf.readVarInt();
+ Int2ObjectOpenHashMap paletteMap = new Int2ObjectOpenHashMap<>(size);
+ for (int i = 0; i < size; i++) {
+ paletteMap.put(i, Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt()));
+ }
+ return paletteMap;
+ }
+ }
+}
diff --git a/src/main/java/baritone/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java
index 63712fe3e..1ab5c3321 100644
--- a/src/main/java/baritone/command/defaults/MineCommand.java
+++ b/src/main/java/baritone/command/defaults/MineCommand.java
@@ -17,6 +17,7 @@
package baritone.command.defaults;
+import baritone.api.BaritoneAPI;
import baritone.api.IBaritone;
import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
@@ -45,7 +46,7 @@ public class MineCommand extends Command {
while (args.hasAny()) {
boms.add(args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE));
}
- WorldScanner.INSTANCE.repack(ctx);
+ BaritoneAPI.getProvider().getWorldScanner().repack(ctx);
logDirect(String.format("Mining %s", boms.toString()));
baritone.getMineProcess().mine(quantity, boms.toArray(new BlockOptionalMeta[0]));
}
diff --git a/src/main/java/baritone/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java
index 182a1e5bc..24f47d625 100644
--- a/src/main/java/baritone/command/defaults/PathCommand.java
+++ b/src/main/java/baritone/command/defaults/PathCommand.java
@@ -17,6 +17,7 @@
package baritone.command.defaults;
+import baritone.api.BaritoneAPI;
import baritone.api.IBaritone;
import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
@@ -38,7 +39,7 @@ public class PathCommand extends Command {
public void execute(String label, IArgConsumer args) throws CommandException {
ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess();
args.requireMax(0);
- WorldScanner.INSTANCE.repack(ctx);
+ BaritoneAPI.getProvider().getWorldScanner().repack(ctx);
customGoalProcess.path();
logDirect("Now pathing");
}
diff --git a/src/main/java/baritone/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java
index cafbea524..cd054b10b 100644
--- a/src/main/java/baritone/command/defaults/RepackCommand.java
+++ b/src/main/java/baritone/command/defaults/RepackCommand.java
@@ -17,6 +17,7 @@
package baritone.command.defaults;
+import baritone.api.BaritoneAPI;
import baritone.api.IBaritone;
import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
@@ -36,7 +37,7 @@ public class RepackCommand extends Command {
@Override
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
- logDirect(String.format("Queued %d chunks for repacking", WorldScanner.INSTANCE.repack(ctx)));
+ logDirect(String.format("Queued %d chunks for repacking", BaritoneAPI.getProvider().getWorldScanner().repack(ctx)));
}
@Override
diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java
index 0ef85f07d..73c575d22 100644
--- a/src/main/java/baritone/process/FarmProcess.java
+++ b/src/main/java/baritone/process/FarmProcess.java
@@ -18,6 +18,7 @@
package baritone.process;
import baritone.Baritone;
+import baritone.api.BaritoneAPI;
import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalBlock;
import baritone.api.pathing.goals.GoalComposite;
@@ -189,7 +190,7 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
}
if (Baritone.settings().mineGoalUpdateInterval.value != 0 && tickCount++ % Baritone.settings().mineGoalUpdateInterval.value == 0) {
- Baritone.getExecutor().execute(() -> locations = WorldScanner.INSTANCE.scanChunkRadius(ctx, scan, 256, 10, 10));
+ Baritone.getExecutor().execute(() -> locations = BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius(ctx, scan, 256, 10, 10));
}
if (locations == null) {
return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE);
diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java
index 1ec47cd92..a10a569aa 100644
--- a/src/main/java/baritone/process/MineProcess.java
+++ b/src/main/java/baritone/process/MineProcess.java
@@ -18,6 +18,7 @@
package baritone.process;
import baritone.Baritone;
+import baritone.api.BaritoneAPI;
import baritone.api.pathing.goals.*;
import baritone.api.process.IMineProcess;
import baritone.api.process.PathingCommand;
@@ -355,7 +356,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro
locs = prune(ctx, locs, filter, max, blacklist, dropped);
if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) {
- locs.addAll(WorldScanner.INSTANCE.scanChunkRadius(
+ locs.addAll(BaritoneAPI.getProvider().getWorldScanner().scanChunkRadius(
ctx.getBaritone().getPlayerContext(),
filter,
max,
diff --git a/src/main/java/baritone/utils/accessor/IBitArray.java b/src/main/java/baritone/utils/accessor/IBitArray.java
index baea5c1da..08f54584c 100644
--- a/src/main/java/baritone/utils/accessor/IBitArray.java
+++ b/src/main/java/baritone/utils/accessor/IBitArray.java
@@ -3,4 +3,8 @@ package baritone.utils.accessor;
public interface IBitArray {
int[] toArray();
+
+ long getMaxEntryValue();
+
+ int getBitsPerEntry();
}
diff --git a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java b/src/main/java/baritone/utils/accessor/IBlockStateContainer.java
index 39572fc5d..bd280aeb1 100644
--- a/src/main/java/baritone/utils/accessor/IBlockStateContainer.java
+++ b/src/main/java/baritone/utils/accessor/IBlockStateContainer.java
@@ -1,9 +1,15 @@
package baritone.utils.accessor;
import net.minecraft.block.state.IBlockState;
+import net.minecraft.util.BitArray;
+import net.minecraft.world.chunk.IBlockStatePalette;
public interface IBlockStateContainer {
+ IBlockStatePalette getPalette();
+
+ BitArray getStorage();
+
IBlockState getAtPalette(int index);
int[] storageArray();
From 0b6088cd2df5ee5a099ec7a63fa00ad0378d0c6a Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Fri, 23 Dec 2022 16:58:10 -0700
Subject: [PATCH 002/405] fix getting the block from the pallete, and change
the chunk scan order to spiral out
---
.../baritone/cache/FasterWorldScanner.java | 62 ++++++++++---------
1 file changed, 33 insertions(+), 29 deletions(-)
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index f1829f9f0..189374dd6 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -102,12 +102,27 @@ public enum FasterWorldScanner implements IWorldScanner {
this.ctx = ctx;
}
- public List getChunkRange(int centerX, int centerZ, int chunkrange) {
+ public List getChunkRange(int centerX, int centerZ, int chunkRadius) {
List chunks = new ArrayList<>();
- for (int x = centerX - chunkrange; x <= centerX + chunkrange; x++) {
- for (int z = centerZ - chunkrange; z <= centerZ + chunkrange; z++) {
+ // spiral out
+ int x = centerX;
+ int z = centerZ;
+ int dx = 0;
+ int dz = -1;
+ int t = Math.max(chunkRadius, 1);
+ int maxI = t * t;
+ for (int i = 0; i < maxI; i++) {
+ if ((-chunkRadius / 2 <= x) && (x <= chunkRadius / 2) && (-chunkRadius / 2 <= z) && (z <= chunkRadius / 2)) {
chunks.add(new ChunkPos(x, z));
}
+ // idk how this works, copilot did it
+ if ((x == z) || ((x < 0) && (x == -z)) || ((x > 0) && (x == 1 - z))) {
+ t = dx;
+ dx = -dz;
+ dz = t;
+ }
+ x += dx;
+ z += dz;
}
return chunks;
}
@@ -221,36 +236,25 @@ public enum FasterWorldScanner implements IWorldScanner {
}
private static void forEach(BitArray array, boolean[] isInFilter, IntConsumer action) {
- int counter = 0;
- long[] storage = array.getBackingLongArray();
+ long[] longArray = array.getBackingLongArray();
int arraySize = array.size();
- int elementBits = ((IBitArray) array).getBitsPerEntry();
- long maxValue = ((IBitArray) array).getMaxEntryValue();
- int storageLength = storage.length;
+ int bitsPerEntry = ((IBitArray) array).getBitsPerEntry();
+ long maxEntryValue = ((IBitArray) array).getMaxEntryValue();
- if (storageLength != 0) {
- int lastStorageIdx = 0;
- long row = storage[0];
- long nextRow = storageLength > 1 ? storage[1] : 0L;
+ for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) {
+ final int i = idx * bitsPerEntry;
+ final int j = i >> 6;
+ final int l = i & 63;
+ final int k = kl >> 6;
+ final long jl = longArray[j] >>> l;
- for (int idx = 0; idx < arraySize; idx++) {
- int n = idx * elementBits;
- int storageIdx = n >> 6;
- int p = (idx + 1) * elementBits - 1 >> 6;
- int q = n ^ storageIdx << 6;
- if (storageIdx != lastStorageIdx) {
- row = nextRow;
- nextRow = storageIdx + 1 < storageLength ? storage[storageIdx + 1] : 0L;
- lastStorageIdx = storageIdx;
+ if (j == k) {
+ if (isInFilter[(int) (jl & maxEntryValue)]) {
+ action.accept(idx);
}
- if (storageIdx == p) {
- if (isInFilter[(int) (row >>> q & maxValue)]) {
- action.accept(counter);
- } else {
- if (isInFilter[(int) ((row >>> q | nextRow << (64 - q)) & maxValue)]) {
- action.accept(counter);
- }
- }
+ } else {
+ if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) {
+ action.accept(idx);
}
}
}
From 12b596e53696212515087f458167775d45d12a85 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Fri, 23 Dec 2022 17:10:37 -0700
Subject: [PATCH 003/405] fix spiral
---
.../baritone/cache/FasterWorldScanner.java | 24 +++++++------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index 189374dd6..ce4a8cd48 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -105,24 +105,16 @@ public enum FasterWorldScanner implements IWorldScanner {
public List getChunkRange(int centerX, int centerZ, int chunkRadius) {
List chunks = new ArrayList<>();
// spiral out
- int x = centerX;
- int z = centerZ;
- int dx = 0;
- int dz = -1;
- int t = Math.max(chunkRadius, 1);
- int maxI = t * t;
- for (int i = 0; i < maxI; i++) {
- if ((-chunkRadius / 2 <= x) && (x <= chunkRadius / 2) && (-chunkRadius / 2 <= z) && (z <= chunkRadius / 2)) {
- chunks.add(new ChunkPos(x, z));
+ chunks.add(new ChunkPos(centerX, centerZ));
+ for (int i = 1; i < chunkRadius; i++) {
+ for (int x = centerX - i; x <= centerX + i; x++) {
+ chunks.add(new ChunkPos(x, centerZ - i));
+ chunks.add(new ChunkPos(x, centerZ + i));
}
- // idk how this works, copilot did it
- if ((x == z) || ((x < 0) && (x == -z)) || ((x > 0) && (x == 1 - z))) {
- t = dx;
- dx = -dz;
- dz = t;
+ for (int z = centerZ - i + 1; z <= centerZ + i - 1; z++) {
+ chunks.add(new ChunkPos(centerX - i, z));
+ chunks.add(new ChunkPos(centerX + i, z));
}
- x += dx;
- z += dz;
}
return chunks;
}
From 0ae59755e3ade3f576d4e83ae9b4b5abef542b75 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Fri, 23 Dec 2022 17:25:23 -0700
Subject: [PATCH 004/405] make limit not happen if it shouldn't
---
.../baritone/cache/FasterWorldScanner.java | 44 ++++++++++++++-----
1 file changed, 33 insertions(+), 11 deletions(-)
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index ce4a8cd48..535e925e1 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -30,6 +30,7 @@ import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.BitArray;
+import net.minecraft.util.ObjectIntIdentityMap;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.chunk.*;
@@ -142,8 +143,20 @@ public enum FasterWorldScanner implements IWorldScanner {
private List scanChunksInternal(List chunkPositions, int maxBlocks) {
assert ctx.world() != null;
- return chunkPositions.parallelStream().flatMap(this::scanChunkInternal).limit(maxBlocks <= 0 ? Long.MAX_VALUE : maxBlocks).collect(Collectors.toList());
+ try {
+ Stream posStream = chunkPositions.parallelStream().flatMap(this::scanChunkInternal);
+ if (maxBlocks >= 0) {
+ // WARNING: this can be expensive if maxBlocks is large...
+ // see limit's javadoc
+ posStream = posStream.limit(maxBlocks);
+ }
+ return posStream.collect(Collectors.toList());
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
}
+
private Stream scanChunkInternal(ChunkPos pos) {
IChunkProvider chunkProvider = ctx.world().getChunkProvider();
// if chunk is not loaded, return empty stream
@@ -206,13 +219,13 @@ public enum FasterWorldScanner implements IWorldScanner {
private boolean[] getIncludedFilterIndices(IBlockStatePalette palette) {
boolean commonBlockFound = false;
- Int2ObjectOpenHashMap paletteMap = getPalette(palette);
+ ObjectIntIdentityMap paletteMap = getPalette(palette);
int size = paletteMap.size();
boolean[] isInFilter = new boolean[size];
for (int i = 0; i < size; i++) {
- IBlockState state = paletteMap.get(i);
+ IBlockState state = paletteMap.getByValue(i);
if (getFilterResult(state)) {
isInFilter[i] = true;
commonBlockFound = true;
@@ -252,15 +265,24 @@ public enum FasterWorldScanner implements IWorldScanner {
}
}
- private static Int2ObjectOpenHashMap getPalette(IBlockStatePalette palette) {
- PacketBuffer buf = new PacketBuffer(Unpooled.buffer());
- palette.write(buf);
- int size = buf.readVarInt();
- Int2ObjectOpenHashMap paletteMap = new Int2ObjectOpenHashMap<>(size);
- for (int i = 0; i < size; i++) {
- paletteMap.put(i, Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt()));
+ /**
+ * cheats to get the actual map of id -> blockstate from the various palette implementations
+ */
+ private static ObjectIntIdentityMap getPalette(IBlockStatePalette palette) {
+ if (palette instanceof BlockStatePaletteRegistry) {
+ return Block.BLOCK_STATE_IDS;
+ } else {
+ PacketBuffer buf = new PacketBuffer(Unpooled.buffer());
+ palette.write(buf);
+ int size = buf.readVarInt();
+ ObjectIntIdentityMap states = new ObjectIntIdentityMap<>();
+ for (int i = 0; i < size; i++) {
+ IBlockState state = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt());
+ assert state != null;
+ states.put(state, i);
+ }
+ return states;
}
- return paletteMap;
}
}
}
From 96f432d2d550ca92a8e96c66981696a62bb628b1 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Fri, 23 Dec 2022 17:26:46 -0700
Subject: [PATCH 005/405] add comment
---
src/main/java/baritone/cache/FasterWorldScanner.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index 535e925e1..6c110decb 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -93,6 +93,7 @@ public enum FasterWorldScanner implements IWorldScanner {
}
// for porting, see {@link https://github.com/JsMacros/JsMacros/blob/backport-1.12.2/common/src/main/java/xyz/wagyourtail/jsmacros/client/api/classes/worldscanner/WorldScanner.java}
+ // tho I did change some things...
public static class WorldScannerContext {
private final BlockOptionalMetaLookup filter;
private final IPlayerContext ctx;
From ecdec87e7a7a8107eefe20a7797decf4ad1e7972 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Sat, 24 Dec 2022 11:43:54 -0700
Subject: [PATCH 006/405] fix using wrong functions in scan
---
src/main/java/baritone/cache/FasterWorldScanner.java | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index 6c110decb..ace429de9 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -25,7 +25,6 @@ import baritone.api.utils.IPlayerContext;
import baritone.utils.accessor.IBitArray;
import baritone.utils.accessor.IBlockStateContainer;
import io.netty.buffer.Unpooled;
-import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.network.PacketBuffer;
@@ -49,12 +48,12 @@ public enum FasterWorldScanner implements IWorldScanner {
INSTANCE;
@Override
public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) {
- return new WorldScannerContext(filter, ctx).scanAroundPlayerRange(maxSearchRadius);
+ return new WorldScannerContext(filter, ctx).scanAroundPlayer(maxSearchRadius, max);
}
@Override
public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) {
- return new WorldScannerContext(filter, ctx).scanAroundPlayerUntilCount(max);
+ return new WorldScannerContext(filter, ctx).scanChunkInternal(pos).collect(Collectors.toList());
}
@Override
From ce1fb49252e897f0b223e1bbdc18bb096ac56678 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Sat, 24 Dec 2022 11:52:48 -0700
Subject: [PATCH 007/405] spiral always pick closest chunk first now
---
.../baritone/cache/FasterWorldScanner.java | 42 ++++++++++---------
1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index ace429de9..efb80245a 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -91,34 +91,38 @@ public enum FasterWorldScanner implements IWorldScanner {
return queued;
}
- // for porting, see {@link https://github.com/JsMacros/JsMacros/blob/backport-1.12.2/common/src/main/java/xyz/wagyourtail/jsmacros/client/api/classes/worldscanner/WorldScanner.java}
- // tho I did change some things...
+ // ordered in a way that the closest blocks are generally first
+ public List getChunkRange(int centerX, int centerZ, int chunkRadius) {
+ List chunks = new ArrayList<>();
+ // spiral out
+ chunks.add(new ChunkPos(centerX, centerZ));
+ for (int i = 1; i < chunkRadius; i++) {
+ for (int j = 0; j <= i; j++) {
+ chunks.add(new ChunkPos(centerX - j, centerZ - i));
+ chunks.add(new ChunkPos(centerX + j, centerZ - i));
+ chunks.add(new ChunkPos(centerX - j, centerZ + i));
+ chunks.add(new ChunkPos(centerX + j, centerZ + i));
+ if (j != 0 && j != i) {
+ chunks.add(new ChunkPos(centerX - i, centerZ - j));
+ chunks.add(new ChunkPos(centerX + i, centerZ - j));
+ chunks.add(new ChunkPos(centerX - i, centerZ + j));
+ chunks.add(new ChunkPos(centerX + i, centerZ + j));
+ }
+ }
+ }
+ return chunks;
+ }
+
public static class WorldScannerContext {
private final BlockOptionalMetaLookup filter;
private final IPlayerContext ctx;
- private final Map cachedFilter = new ConcurrentHashMap<>();
public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) {
this.filter = filter;
this.ctx = ctx;
}
- public List getChunkRange(int centerX, int centerZ, int chunkRadius) {
- List chunks = new ArrayList<>();
- // spiral out
- chunks.add(new ChunkPos(centerX, centerZ));
- for (int i = 1; i < chunkRadius; i++) {
- for (int x = centerX - i; x <= centerX + i; x++) {
- chunks.add(new ChunkPos(x, centerZ - i));
- chunks.add(new ChunkPos(x, centerZ + i));
- }
- for (int z = centerZ - i + 1; z <= centerZ + i - 1; z++) {
- chunks.add(new ChunkPos(centerX - i, z));
- chunks.add(new ChunkPos(centerX + i, z));
- }
- }
- return chunks;
- }
+
public List scanAroundPlayerRange(int range) {
return scanAroundPlayer(range, -1);
From 6260c6d3d7edd984a8b2b900770d4d11c60d4dbd Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Sat, 24 Dec 2022 12:11:26 -0700
Subject: [PATCH 008/405] apply suggestions
---
.../baritone/api/utils/BlockOptionalMeta.java | 4 +
.../api/utils/BlockOptionalMetaLookup.java | 25 +-
.../baritone/cache/FasterWorldScanner.java | 279 ++++++++----------
3 files changed, 132 insertions(+), 176 deletions(-)
diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
index a9a34a4aa..e86341816 100644
--- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java
+++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
@@ -315,4 +315,8 @@ public final class BlockOptionalMeta {
return null;
}
+
+ public Set getAllBlockStates() {
+ return blockstates;
+ }
}
diff --git a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java
index 041c6162c..8fb52fb52 100644
--- a/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java
+++ b/src/api/java/baritone/api/utils/BlockOptionalMetaLookup.java
@@ -22,15 +22,22 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.stream.Stream;
public class BlockOptionalMetaLookup {
-
+ private final Set blockSet = new HashSet<>();
+ private final Set blockStateSet = new HashSet<>();
private final BlockOptionalMeta[] boms;
public BlockOptionalMetaLookup(BlockOptionalMeta... boms) {
this.boms = boms;
+ for (BlockOptionalMeta bom : boms) {
+ blockSet.add(bom.getBlock());
+ blockStateSet.addAll(bom.getAllBlockStates());
+ }
}
public BlockOptionalMetaLookup(Block... blocks) {
@@ -52,23 +59,11 @@ public class BlockOptionalMetaLookup {
}
public boolean has(Block block) {
- for (BlockOptionalMeta bom : boms) {
- if (bom.getBlock() == block) {
- return true;
- }
- }
-
- return false;
+ return blockSet.contains(block);
}
public boolean has(IBlockState state) {
- for (BlockOptionalMeta bom : boms) {
- if (bom.matches(state)) {
- return true;
- }
- }
-
- return false;
+ return blockStateSet.contains(state);
}
public boolean has(ItemStack stack) {
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index efb80245a..7a46f04ff 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -37,8 +37,6 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer;
import java.util.function.IntConsumer;
import java.util.stream.Collectors;
@@ -48,12 +46,16 @@ public enum FasterWorldScanner implements IWorldScanner {
INSTANCE;
@Override
public List scanChunkRadius(IPlayerContext ctx, BlockOptionalMetaLookup filter, int max, int yLevelThreshold, int maxSearchRadius) {
- return new WorldScannerContext(filter, ctx).scanAroundPlayer(maxSearchRadius, max);
+ assert ctx.world() != null;
+ if (maxSearchRadius < 0) {
+ throw new IllegalArgumentException("chunkRange must be >= 0");
+ }
+ return scanChunksInternal(ctx, filter, getChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, maxSearchRadius), max);
}
@Override
public List scanChunk(IPlayerContext ctx, BlockOptionalMetaLookup filter, ChunkPos pos, int max, int yLevelThreshold) {
- return new WorldScannerContext(filter, ctx).scanChunkInternal(pos).collect(Collectors.toList());
+ return scanChunkInternal(ctx, filter, pos).limit(max).collect(Collectors.toList());
}
@Override
@@ -92,15 +94,17 @@ public enum FasterWorldScanner implements IWorldScanner {
}
// ordered in a way that the closest blocks are generally first
- public List getChunkRange(int centerX, int centerZ, int chunkRadius) {
+ public static List getChunkRange(int centerX, int centerZ, int chunkRadius) {
List chunks = new ArrayList<>();
// spiral out
chunks.add(new ChunkPos(centerX, centerZ));
for (int i = 1; i < chunkRadius; i++) {
for (int j = 0; j <= i; j++) {
chunks.add(new ChunkPos(centerX - j, centerZ - i));
- chunks.add(new ChunkPos(centerX + j, centerZ - i));
- chunks.add(new ChunkPos(centerX - j, centerZ + i));
+ if (j != 0) {
+ chunks.add(new ChunkPos(centerX + j, centerZ - i));
+ chunks.add(new ChunkPos(centerX - j, centerZ + i));
+ }
chunks.add(new ChunkPos(centerX + j, centerZ + i));
if (j != 0 && j != i) {
chunks.add(new ChunkPos(centerX - i, centerZ - j));
@@ -113,180 +117,133 @@ public enum FasterWorldScanner implements IWorldScanner {
return chunks;
}
- public static class WorldScannerContext {
- private final BlockOptionalMetaLookup filter;
- private final IPlayerContext ctx;
-
- public WorldScannerContext(BlockOptionalMetaLookup filter, IPlayerContext ctx) {
- this.filter = filter;
- this.ctx = ctx;
- }
-
-
-
- public List scanAroundPlayerRange(int range) {
- return scanAroundPlayer(range, -1);
- }
-
- public List scanAroundPlayerUntilCount(int count) {
- return scanAroundPlayer(32, count);
- }
-
- public List scanAroundPlayer(int range, int maxCount) {
- assert ctx.player() != null;
- return scanChunkRange(ctx.playerFeet().x >> 4, ctx.playerFeet().z >> 4, range, maxCount);
- }
-
- public List scanChunkRange(int centerX, int centerZ, int chunkRange, int maxBlocks) {
- assert ctx.world() != null;
- if (chunkRange < 0) {
- throw new IllegalArgumentException("chunkRange must be >= 0");
- }
- return scanChunksInternal(getChunkRange(centerX, centerZ, chunkRange), maxBlocks);
- }
-
- private List scanChunksInternal(List chunkPositions, int maxBlocks) {
- assert ctx.world() != null;
- try {
- Stream posStream = chunkPositions.parallelStream().flatMap(this::scanChunkInternal);
+ private List scanChunksInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, List chunkPositions, int maxBlocks) {
+ assert ctx.world() != null;
+ try {
+ Stream posStream = chunkPositions.parallelStream().flatMap(p -> scanChunkInternal(ctx, lookup, p));
if (maxBlocks >= 0) {
// WARNING: this can be expensive if maxBlocks is large...
// see limit's javadoc
posStream = posStream.limit(maxBlocks);
}
return posStream.collect(Collectors.toList());
- } catch (Exception e) {
- e.printStackTrace();
- throw e;
- }
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ private Stream scanChunkInternal(IPlayerContext ctx, BlockOptionalMetaLookup lookup, ChunkPos pos) {
+ IChunkProvider chunkProvider = ctx.world().getChunkProvider();
+ // if chunk is not loaded, return empty stream
+ if (!chunkProvider.isChunkGeneratedAt(pos.x, pos.z)) {
+ return Stream.empty();
}
- private Stream scanChunkInternal(ChunkPos pos) {
- IChunkProvider chunkProvider = ctx.world().getChunkProvider();
- // if chunk is not loaded, return empty stream
- if (!chunkProvider.isChunkGeneratedAt(pos.x, pos.z)) {
- return Stream.empty();
+ long chunkX = (long) pos.x << 4;
+ long chunkZ = (long) pos.z << 4;
+
+ List blocks = new ArrayList<>();
+
+ collectChunkSections(lookup, chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> {
+ int yOffset = section.getYLocation();
+ BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage();
+ collectBlockLocations(array, isInFilter, place -> blocks.add(new BlockPos(
+ chunkX + ((place & 255) & 15),
+ yOffset + (place >> 8),
+ chunkZ + ((place & 255) >> 4)
+ )));
+ });
+ return blocks.stream();
+ }
+
+
+
+ private void collectChunkSections(BlockOptionalMetaLookup lookup, Chunk chunk, BiConsumer consumer) {
+ for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) {
+ if (section == null || section.isEmpty()) {
+ continue;
}
- long chunkX = (long) pos.x << 4;
- long chunkZ = (long) pos.z << 4;
-
- List blocks = new ArrayList<>();
-
- streamChunkSections(chunkProvider.getLoadedChunk(pos.x, pos.z), (section, isInFilter) -> {
- int yOffset = section.getYLocation();
- BitArray array = (BitArray) ((IBlockStateContainer) section.getData()).getStorage();
- forEach(array, isInFilter, place -> blocks.add(new BlockPos(
- chunkX + ((place & 255) & 15),
- yOffset + (place >> 8),
- chunkZ + ((place & 255) >> 4)
- )));
- });
- return blocks.stream();
- }
-
- private void streamChunkSections(Chunk chunk, BiConsumer consumer) {
- for (ExtendedBlockStorage section : chunk.getBlockStorageArray()) {
- if (section == null || section.isEmpty()) {
- continue;
- }
-
- BlockStateContainer sectionContainer = section.getData();
- //this won't work if the PaletteStorage is of the type EmptyPaletteStorage
- if (((IBlockStateContainer) sectionContainer).getStorage() == null) {
- continue;
- }
-
- boolean[] isInFilter = getIncludedFilterIndices(((IBlockStateContainer) sectionContainer).getPalette());
- if (isInFilter.length == 0) {
- continue;
- }
- consumer.accept(section, isInFilter);
- }
- }
-
- private boolean getFilterResult(IBlockState state) {
- Boolean v;
- return (v = cachedFilter.get(state)) == null ? addCachedState(state) : v;
- }
-
- private boolean addCachedState(IBlockState state) {
- boolean isInFilter = false;
-
- if (filter != null) {
- isInFilter = filter.has(state);
+ BlockStateContainer sectionContainer = section.getData();
+ //this won't work if the PaletteStorage is of the type EmptyPaletteStorage
+ if (((IBlockStateContainer) sectionContainer).getStorage() == null) {
+ continue;
}
- cachedFilter.put(state, isInFilter);
- return isInFilter;
- }
-
- private boolean[] getIncludedFilterIndices(IBlockStatePalette palette) {
- boolean commonBlockFound = false;
- ObjectIntIdentityMap paletteMap = getPalette(palette);
- int size = paletteMap.size();
-
- boolean[] isInFilter = new boolean[size];
-
- for (int i = 0; i < size; i++) {
- IBlockState state = paletteMap.getByValue(i);
- if (getFilterResult(state)) {
- isInFilter[i] = true;
- commonBlockFound = true;
- } else {
- isInFilter[i] = false;
- }
+ boolean[] isInFilter = getIncludedFilterIndices(lookup, ((IBlockStateContainer) sectionContainer).getPalette());
+ if (isInFilter.length == 0) {
+ continue;
}
-
- if (!commonBlockFound) {
- return new boolean[0];
- }
- return isInFilter;
+ consumer.accept(section, isInFilter);
}
+ }
- private static void forEach(BitArray array, boolean[] isInFilter, IntConsumer action) {
- long[] longArray = array.getBackingLongArray();
- int arraySize = array.size();
- int bitsPerEntry = ((IBitArray) array).getBitsPerEntry();
- long maxEntryValue = ((IBitArray) array).getMaxEntryValue();
+ private boolean[] getIncludedFilterIndices(BlockOptionalMetaLookup lookup, IBlockStatePalette palette) {
+ boolean commonBlockFound = false;
+ ObjectIntIdentityMap paletteMap = getPalette(palette);
+ int size = paletteMap.size();
- for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) {
- final int i = idx * bitsPerEntry;
- final int j = i >> 6;
- final int l = i & 63;
- final int k = kl >> 6;
- final long jl = longArray[j] >>> l;
+ boolean[] isInFilter = new boolean[size];
- if (j == k) {
- if (isInFilter[(int) (jl & maxEntryValue)]) {
- action.accept(idx);
- }
- } else {
- if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) {
- action.accept(idx);
- }
- }
- }
- }
-
- /**
- * cheats to get the actual map of id -> blockstate from the various palette implementations
- */
- private static ObjectIntIdentityMap getPalette(IBlockStatePalette palette) {
- if (palette instanceof BlockStatePaletteRegistry) {
- return Block.BLOCK_STATE_IDS;
+ for (int i = 0; i < size; i++) {
+ IBlockState state = paletteMap.getByValue(i);
+ if (lookup.has(state)) {
+ isInFilter[i] = true;
+ commonBlockFound = true;
} else {
- PacketBuffer buf = new PacketBuffer(Unpooled.buffer());
- palette.write(buf);
- int size = buf.readVarInt();
- ObjectIntIdentityMap states = new ObjectIntIdentityMap<>();
- for (int i = 0; i < size; i++) {
- IBlockState state = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt());
- assert state != null;
- states.put(state, i);
+ isInFilter[i] = false;
+ }
+ }
+
+ if (!commonBlockFound) {
+ return new boolean[0];
+ }
+ return isInFilter;
+ }
+
+ private static void collectBlockLocations(BitArray array, boolean[] isInFilter, IntConsumer action) {
+ long[] longArray = array.getBackingLongArray();
+ int arraySize = array.size();
+ int bitsPerEntry = ((IBitArray) array).getBitsPerEntry();
+ long maxEntryValue = ((IBitArray) array).getMaxEntryValue();
+
+ for (int idx = 0, kl = bitsPerEntry - 1; idx < arraySize; idx++, kl += bitsPerEntry) {
+ final int i = idx * bitsPerEntry;
+ final int j = i >> 6;
+ final int l = i & 63;
+ final int k = kl >> 6;
+ final long jl = longArray[j] >>> l;
+
+ if (j == k) {
+ if (isInFilter[(int) (jl & maxEntryValue)]) {
+ action.accept(idx);
+ }
+ } else {
+ if (isInFilter[(int) ((jl | longArray[k] << (64 - l)) & maxEntryValue)]) {
+ action.accept(idx);
}
- return states;
}
}
}
+
+ /**
+ * cheats to get the actual map of id -> blockstate from the various palette implementations
+ */
+ private static ObjectIntIdentityMap getPalette(IBlockStatePalette palette) {
+ if (palette instanceof BlockStatePaletteRegistry) {
+ return Block.BLOCK_STATE_IDS;
+ } else {
+ PacketBuffer buf = new PacketBuffer(Unpooled.buffer());
+ palette.write(buf);
+ int size = buf.readVarInt();
+ ObjectIntIdentityMap states = new ObjectIntIdentityMap<>();
+ for (int i = 0; i < size; i++) {
+ IBlockState state = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt());
+ assert state != null;
+ states.put(state, i);
+ }
+ return states;
+ }
+ }
}
From c04eb066cb84e8a4362f913c301fc03da346718c Mon Sep 17 00:00:00 2001
From: William Gray
Date: Wed, 28 Dec 2022 01:06:10 +0000
Subject: [PATCH 009/405] Update
src/main/java/baritone/cache/FasterWorldScanner.java
Co-authored-by: ZacSharp <68165024+ZacSharp@users.noreply.github.com>
---
src/main/java/baritone/cache/FasterWorldScanner.java | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/main/java/baritone/cache/FasterWorldScanner.java b/src/main/java/baritone/cache/FasterWorldScanner.java
index 7a46f04ff..4dd480f25 100644
--- a/src/main/java/baritone/cache/FasterWorldScanner.java
+++ b/src/main/java/baritone/cache/FasterWorldScanner.java
@@ -106,11 +106,13 @@ public enum FasterWorldScanner implements IWorldScanner {
chunks.add(new ChunkPos(centerX - j, centerZ + i));
}
chunks.add(new ChunkPos(centerX + j, centerZ + i));
- if (j != 0 && j != i) {
+ if (j != i) {
chunks.add(new ChunkPos(centerX - i, centerZ - j));
chunks.add(new ChunkPos(centerX + i, centerZ - j));
- chunks.add(new ChunkPos(centerX - i, centerZ + j));
- chunks.add(new ChunkPos(centerX + i, centerZ + j));
+ if (j != 0) {
+ chunks.add(new ChunkPos(centerX - i, centerZ + j));
+ chunks.add(new ChunkPos(centerX + i, centerZ + j));
+ }
}
}
}
From 98a748afb3340ad979a09a62623ddefcdb2d7887 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Tue, 27 Dec 2022 22:42:38 -0700
Subject: [PATCH 010/405] fix stream limit. immutable's in BOML
---
.../baritone/api/utils/BlockOptionalMeta.java | 8 ++++--
.../api/utils/BlockOptionalMetaLookup.java | 28 ++++++++++++-------
.../baritone/cache/FasterWorldScanner.java | 6 +++-
3 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
index e86341816..e0f491fba 100644
--- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java
+++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
@@ -41,8 +41,8 @@ public final class BlockOptionalMeta {
private final int meta;
private final boolean noMeta;
private final Set blockstates;
- private final ImmutableSet stateHashes;
- private final ImmutableSet stackHashes;
+ private final Set stateHashes;
+ private final Set stackHashes;
private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$");
private static final Map
@@ -64,6 +65,8 @@ If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/bar
If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**.
+If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**.
+
This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/),
the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths).
From b622adf3000fe4deba204f052c0ac7c530361f23 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sat, 18 Feb 2023 15:13:15 -0800
Subject: [PATCH 021/405] ugh why was this changed since 1.18
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5a59867d1..d0fd1dc83 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/bar
If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**.
-If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**.
+If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-fabric-api-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-forge-api-1.9.1.jar)**.
This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/),
the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths).
From 814c17522a1a3dc4db0f465a4c4e3c0603e74527 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sat, 18 Feb 2023 15:20:50 -0800
Subject: [PATCH 022/405] changed it back to the old way by manually renaming
the release files
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index d0fd1dc83..5a59867d1 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/bar
If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**.
-If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-fabric-api-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-forge-api-1.9.1.jar)**.
+If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**.
This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/),
the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths).
From 1e7e504650222dc24e82379f1e81fbbb3c793e3e Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sat, 18 Feb 2023 15:37:37 -0800
Subject: [PATCH 023/405] v1.6.4
---
build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.gradle b/build.gradle
index 798b5b354..cfce46351 100755
--- a/build.gradle
+++ b/build.gradle
@@ -16,7 +16,7 @@
*/
group 'baritone'
-version '1.6.3'
+version '1.6.4'
buildscript {
repositories {
From 6e5fec576fe837f4af83d09b7dccfc974233c5b6 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sat, 18 Feb 2023 15:38:40 -0800
Subject: [PATCH 024/405] v1.7.3
---
gradle.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle.properties b/gradle.properties
index 6e8b1ff4a..370de3110 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,6 +1,6 @@
org.gradle.jvmargs=-Xmx2048M
-mod_version=1.7.2
+mod_version=1.7.3
maven_group=baritone
archives_base_name=baritone
From 24e047c12e807fc4ee6528f4698c560b70e5a641 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sat, 18 Feb 2023 15:41:19 -0800
Subject: [PATCH 025/405] v1.8.4
---
gradle.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle.properties b/gradle.properties
index 77cfe8cf6..4a9d6249d 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,6 +1,6 @@
org.gradle.jvmargs=-Xmx2048M
-mod_version=1.8.3
+mod_version=1.8.4
maven_group=baritone
archives_base_name=baritone
From 174bdd230742486dd858be2032255f59724a0e6e Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sat, 18 Feb 2023 16:42:05 -0800
Subject: [PATCH 026/405] overhaul readme
---
README.md | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
index 5a59867d1..0a511013b 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
-
+
@@ -49,23 +49,23 @@
A Minecraft pathfinder bot.
-[**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr)
-
Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do.
-[Tutorial playlist](https://www.youtube.com/playlist?list=PLnwnJ1qsS7CoQl9Si-RTluuzCo_4Oulpa)
+[**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr)
-The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The second easiest way (for 1.12.2 only) is to
-install the v1.2.* `api-forge` jar from [releases](https://github.com/cabaletta/baritone/releases). **For 1.12.2 Forge, just click
-[here](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar)**. Otherwise, see [Installation & setup](SETUP.md). Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it.
+**Quick download links:**
-For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**.
+| Forge | Fabric |
+|---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
+| [1.12.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.2.17/baritone-api-forge-1.2.17.jar) | |
+| [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-forge-1.6.4.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-fabric-1.6.4.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.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) |
+| [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) |
-If you need Forge or Fabric 1.17.1, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.7.2) and get the `api-forge` or `api-fabric` jar. **For 1.17.1 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.7.2/baritone-api-fabric-1.7.2.jar)**.
+**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)
-If you need Forge or Fabric 1.18.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.8.3) and get the `api-forge` or `api-fabric` jar. **For 1.18.2 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-fabric-1.8.3.jar)**. **For 1.18.2 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.8.3/baritone-api-forge-1.8.3.jar)**.
-
-If you need Forge or Fabric 1.19.3, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.9.1) and get the `api-forge` or `api-fabric` jar. **For 1.19.3 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar)**. **For 1.19.3 Forge, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar)**.
+For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it.
This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/),
the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths).
From 9efc5122538b63db9cf57e1a83048a4882169c0b Mon Sep 17 00:00:00 2001
From: ZacSharp <68165024+ZacSharp@users.noreply.github.com>
Date: Sun, 19 Feb 2023 19:17:11 +0100
Subject: [PATCH 027/405] Make tab completion usable
Now behaves almost identical to vanilla tab completion
---
.../mixins/MixinCommandSuggestionHelper.java | 29 ++++++++++++++-----
1 file changed, 22 insertions(+), 7 deletions(-)
diff --git a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java
index 00497ab6b..5603246d4 100644
--- a/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java
+++ b/src/launch/java/baritone/launch/mixins/MixinCommandSuggestionHelper.java
@@ -19,6 +19,7 @@ package baritone.launch.mixins;
import baritone.api.BaritoneAPI;
import baritone.api.event.events.TabCompleteEvent;
+import com.mojang.brigadier.ParseResults;
import com.mojang.brigadier.context.StringRange;
import com.mojang.brigadier.suggestion.Suggestion;
import com.mojang.brigadier.suggestion.Suggestions;
@@ -51,9 +52,18 @@ public class MixinCommandSuggestionHelper {
@Final
private List exceptionList;
+ @Shadow
+ private ParseResults parseResults;
+
@Shadow
private CompletableFuture suggestionsFuture;
+ @Shadow
+ private CommandSuggestionHelper.Suggestions suggestions;
+
+ @Shadow
+ boolean isApplyingSuggestion;
+
@Inject(
method = "init",
at = @At("HEAD"),
@@ -74,27 +84,32 @@ public class MixinCommandSuggestionHelper {
if (event.completions != null) {
ci.cancel();
+ this.parseResults = null; // stop coloring
+
+ if (this.isApplyingSuggestion) { // Supress suggestions update when cycling suggestions.
+ return;
+ }
+
+ this.inputField.setSuggestion(null); // clear old suggestions
+ this.suggestions = null;
// TODO: Support populating the command usage
this.exceptionList.clear();
if (event.completions.length == 0) {
this.suggestionsFuture = Suggestions.empty();
} else {
- int offset = this.inputField.getText().endsWith(" ")
- ? this.inputField.getCursorPosition()
- : this.inputField.getText().lastIndexOf(" ") + 1; // If there is no space this is still 0 haha yes
+ StringRange range = StringRange.between(prefix.lastIndexOf(" ") + 1, prefix.length()); // if there is no space this starts at 0
List suggestionList = Stream.of(event.completions)
- .map(s -> new Suggestion(StringRange.between(offset, offset + s.length()), s))
+ .map(s -> new Suggestion(range, s))
.collect(Collectors.toList());
- Suggestions suggestions = new Suggestions(
- StringRange.between(offset, offset + suggestionList.stream().mapToInt(s -> s.getText().length()).max().orElse(0)),
- suggestionList);
+ Suggestions suggestions = new Suggestions(range, suggestionList);
this.suggestionsFuture = new CompletableFuture<>();
this.suggestionsFuture.complete(suggestions);
}
+ ((CommandSuggestionHelper) (Object) this).updateSuggestions(true); // actually populate the suggestions list from the suggestions future
}
}
}
From f1ead19b6e0ea41e7a2343d56b4dcab417140725 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Tue, 28 Feb 2023 23:44:33 -0800
Subject: [PATCH 028/405] option to only move inventory when stationary
---
src/api/java/baritone/api/Settings.java | 10 +++
src/main/java/baritone/Baritone.java | 6 ++
.../baritone/behavior/InventoryBehavior.java | 38 ++++++--
.../java/baritone/process/BuilderProcess.java | 5 +-
.../process/InventoryPauserProcess.java | 90 +++++++++++++++++++
5 files changed, 141 insertions(+), 8 deletions(-)
create mode 100644 src/main/java/baritone/process/InventoryPauserProcess.java
diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java
index 9e3e6a385..38661d8be 100644
--- a/src/api/java/baritone/api/Settings.java
+++ b/src/api/java/baritone/api/Settings.java
@@ -69,6 +69,16 @@ public final class Settings {
*/
public final Setting allowInventory = new Setting<>(false);
+ /**
+ * Wait this many ticks between InventoryBehavior moving inventory items
+ */
+ public final Setting ticksBetweenInventoryMoves = new Setting<>(1);
+
+ /**
+ * Come to a halt before doing any inventory moves. Intended for anticheat such as 2b2t
+ */
+ public final Setting inventoryMoveOnlyIfStationary = new Setting<>(false);
+
/**
* Disable baritone's auto-tool at runtime, but still assume that another mod will provide auto tool functionality
*
diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java
index 71c2c455a..61db54211 100755
--- a/src/main/java/baritone/Baritone.java
+++ b/src/main/java/baritone/Baritone.java
@@ -80,6 +80,7 @@ public class Baritone implements IBaritone {
private ExploreProcess exploreProcess;
private BackfillProcess backfillProcess;
private FarmProcess farmProcess;
+ private InventoryPauserProcess inventoryPauserProcess;
private PathingControlManager pathingControlManager;
private SelectionManager selectionManager;
@@ -115,6 +116,7 @@ public class Baritone implements IBaritone {
this.pathingControlManager.registerProcess(exploreProcess = new ExploreProcess(this));
this.pathingControlManager.registerProcess(backfillProcess = new BackfillProcess(this));
this.pathingControlManager.registerProcess(farmProcess = new FarmProcess(this));
+ this.pathingControlManager.registerProcess(inventoryPauserProcess = new InventoryPauserProcess(this));
}
this.worldProvider = new WorldProvider();
@@ -183,6 +185,10 @@ public class Baritone implements IBaritone {
return this.farmProcess;
}
+ public InventoryPauserProcess getInventoryPauserProcess() {
+ return this.inventoryPauserProcess;
+ }
+
@Override
public PathingBehavior getPathingBehavior() {
return this.pathingBehavior;
diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java
index 3dce5c0b5..93dc200cc 100644
--- a/src/main/java/baritone/behavior/InventoryBehavior.java
+++ b/src/main/java/baritone/behavior/InventoryBehavior.java
@@ -19,6 +19,7 @@ package baritone.behavior;
import baritone.Baritone;
import baritone.api.event.events.TickEvent;
+import baritone.api.utils.Helper;
import baritone.utils.ToolSet;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
@@ -34,7 +35,10 @@ import java.util.OptionalInt;
import java.util.Random;
import java.util.function.Predicate;
-public final class InventoryBehavior extends Behavior {
+public final class InventoryBehavior extends Behavior implements Helper {
+
+ int ticksSinceLastInventoryMove;
+ int[] lastTickRequestedMove; // not everything asks every tick, so remember the request while coming to a halt
public InventoryBehavior(Baritone baritone) {
super(baritone);
@@ -52,20 +56,28 @@ public final class InventoryBehavior extends Behavior {
// we have a crafting table or a chest or something open
return;
}
+ ticksSinceLastInventoryMove++;
if (firstValidThrowaway() >= 9) { // aka there are none on the hotbar, but there are some in main inventory
- swapWithHotBar(firstValidThrowaway(), 8);
+ requestSwapWithHotBar(firstValidThrowaway(), 8);
}
int pick = bestToolAgainst(Blocks.STONE, ItemPickaxe.class);
if (pick >= 9) {
- swapWithHotBar(pick, 0);
+ requestSwapWithHotBar(pick, 0);
+ }
+ if (lastTickRequestedMove != null) {
+ logDebug("Remembering to move " + lastTickRequestedMove[0] + " " + lastTickRequestedMove[1] + " from a previous tick");
+ requestSwapWithHotBar(lastTickRequestedMove[0], lastTickRequestedMove[1]);
}
}
- public void attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) {
+ public boolean attemptToPutOnHotbar(int inMainInvy, Predicate disallowedHotbar) {
OptionalInt destination = getTempHotbarSlot(disallowedHotbar);
if (destination.isPresent()) {
- swapWithHotBar(inMainInvy, destination.getAsInt());
+ if (!requestSwapWithHotBar(inMainInvy, destination.getAsInt())) {
+ return false;
+ }
}
+ return true;
}
public OptionalInt getTempHotbarSlot(Predicate disallowedHotbar) {
@@ -89,8 +101,20 @@ public final class InventoryBehavior extends Behavior {
return OptionalInt.of(candidates.get(new Random().nextInt(candidates.size())));
}
- private void swapWithHotBar(int inInventory, int inHotbar) {
+ private boolean requestSwapWithHotBar(int inInventory, int inHotbar) {
+ lastTickRequestedMove = new int[]{inInventory, inHotbar};
+ if (ticksSinceLastInventoryMove < Baritone.settings().ticksBetweenInventoryMoves.value) {
+ logDebug("Inventory move requested but delaying " + ticksSinceLastInventoryMove + " " + Baritone.settings().ticksBetweenInventoryMoves.value);
+ return false;
+ }
+ if (Baritone.settings().inventoryMoveOnlyIfStationary.value && !baritone.getInventoryPauserProcess().stationaryForInventoryMove()) {
+ logDebug("Inventory move requested but delaying until stationary");
+ return false;
+ }
ctx.playerController().windowClick(ctx.player().inventoryContainer.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player());
+ ticksSinceLastInventoryMove = 0;
+ lastTickRequestedMove = null;
+ return true;
}
private int firstValidThrowaway() { // TODO offhand idk
@@ -192,8 +216,8 @@ public final class InventoryBehavior extends Behavior {
if (allowInventory) {
for (int i = 9; i < 36; i++) {
if (desired.test(inv.get(i))) {
- swapWithHotBar(i, 7);
if (select) {
+ requestSwapWithHotBar(i, 7);
p.inventory.currentItem = 7;
}
return true;
diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java
index 85be6516a..c7868a4a0 100644
--- a/src/main/java/baritone/process/BuilderProcess.java
+++ b/src/main/java/baritone/process/BuilderProcess.java
@@ -562,7 +562,10 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
for (int i = 9; i < 36; i++) {
for (IBlockState desired : noValidHotbarOption) {
if (valid(approxPlaceable.get(i), desired, true)) {
- baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains);
+ if (!baritone.getInventoryBehavior().attemptToPutOnHotbar(i, usefulSlots::contains)) {
+ // awaiting inventory move, so pause
+ return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE);
+ }
break outer;
}
}
diff --git a/src/main/java/baritone/process/InventoryPauserProcess.java b/src/main/java/baritone/process/InventoryPauserProcess.java
new file mode 100644
index 000000000..ab210532b
--- /dev/null
+++ b/src/main/java/baritone/process/InventoryPauserProcess.java
@@ -0,0 +1,90 @@
+/*
+ * 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 .
+ */
+
+package baritone.process;
+
+import baritone.Baritone;
+import baritone.api.process.PathingCommand;
+import baritone.api.process.PathingCommandType;
+import baritone.utils.BaritoneProcessHelper;
+
+public class InventoryPauserProcess extends BaritoneProcessHelper {
+
+ boolean pauseRequestedLastTick;
+ boolean safeToCancelLastTick;
+ int ticksOfStationary;
+
+ public InventoryPauserProcess(Baritone baritone) {
+ super(baritone);
+ }
+
+ @Override
+ public boolean isActive() {
+ if (mc.player == null || mc.world == null) {
+ return false;
+ }
+ return true;
+ }
+
+ private double motion() {
+ return Math.sqrt(mc.player.motionX * mc.player.motionX + mc.player.motionZ * mc.player.motionZ);
+ }
+
+ private boolean stationaryNow() {
+ return motion() < 0.00001;
+ }
+
+ public boolean stationaryForInventoryMove() {
+ pauseRequestedLastTick = true;
+ return safeToCancelLastTick && ticksOfStationary > 1;
+ }
+
+ @Override
+ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) {
+ //logDebug(pauseRequestedLastTick + " " + safeToCancelLastTick + " " + ticksOfStationary);
+ safeToCancelLastTick = isSafeToCancel;
+ if (pauseRequestedLastTick) {
+ pauseRequestedLastTick = false;
+ if (stationaryNow()) {
+ ticksOfStationary++;
+ }
+ return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE);
+ }
+ ticksOfStationary = 0;
+ return new PathingCommand(null, PathingCommandType.DEFER);
+ }
+
+ @Override
+ public void onLostControl() {
+
+ }
+
+ @Override
+ public String displayName0() {
+ return "inventory pauser";
+ }
+
+ @Override
+ public double priority() {
+ return 5.1; // slightly higher than backfill
+ }
+
+ @Override
+ public boolean isTemporary() {
+ return true;
+ }
+}
From c9d7a5bea61ae28aeeb5e01e7520217fd487b371 Mon Sep 17 00:00:00 2001
From: leijurv
Date: Tue, 28 Feb 2023 23:56:34 -0800
Subject: [PATCH 029/405] kami blue to lambda
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 0a511013b..0aec1468d 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@
-
+
From 790a4f6769f462dd1fb92d64b2f5855f10c86dce Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Wed, 1 Mar 2023 00:25:30 -0800
Subject: [PATCH 030/405] command to load settings from a specific file
---
src/api/java/baritone/api/BaritoneAPI.java | 2 +-
.../java/baritone/api/utils/SettingsUtil.java | 22 +++++++++++--------
.../baritone/command/defaults/SetCommand.java | 18 +++++++++++++--
3 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/src/api/java/baritone/api/BaritoneAPI.java b/src/api/java/baritone/api/BaritoneAPI.java
index 53937bd80..935bf9e4f 100644
--- a/src/api/java/baritone/api/BaritoneAPI.java
+++ b/src/api/java/baritone/api/BaritoneAPI.java
@@ -35,7 +35,7 @@ public final class BaritoneAPI {
static {
settings = new Settings();
- SettingsUtil.readAndApply(settings);
+ SettingsUtil.readAndApply(settings, SettingsUtil.SETTINGS_DEFAULT_NAME);
ServiceLoader baritoneLoader = ServiceLoader.load(IBaritoneProvider.class);
Iterator instances = baritoneLoader.iterator();
diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java
index f47f515a8..50e2363a6 100644
--- a/src/api/java/baritone/api/utils/SettingsUtil.java
+++ b/src/api/java/baritone/api/utils/SettingsUtil.java
@@ -48,7 +48,7 @@ import static net.minecraft.client.Minecraft.getMinecraft;
public class SettingsUtil {
- private static final Path SETTINGS_PATH = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt");
+ public static final String SETTINGS_DEFAULT_NAME = "settings.txt";
private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?.+)"); // key and value split by the first space
private static final String[] JAVA_ONLY_SETTINGS = {"logger", "notifier", "toaster"};
@@ -68,12 +68,12 @@ public class SettingsUtil {
}
}
- public static void readAndApply(Settings settings) {
+ public static void readAndApply(Settings settings, String settingsName) {
try {
- forEachLine(SETTINGS_PATH, line -> {
+ forEachLine(settingsByName(settingsName), line -> {
Matcher matcher = SETTING_PATTERN.matcher(line);
if (!matcher.matches()) {
- System.out.println("Invalid syntax in setting file: " + line);
+ Helper.HELPER.logDirect("Invalid syntax in setting file: " + line);
return;
}
@@ -82,29 +82,33 @@ public class SettingsUtil {
try {
parseAndApply(settings, settingName, settingValue);
} catch (Exception ex) {
- System.out.println("Unable to parse line " + line);
+ Helper.HELPER.logDirect("Unable to parse line " + line);
ex.printStackTrace();
}
});
} catch (NoSuchFileException ignored) {
- System.out.println("Baritone settings file not found, resetting.");
+ Helper.HELPER.logDirect("Baritone settings file not found, resetting.");
} catch (Exception ex) {
- System.out.println("Exception while reading Baritone settings, some settings may be reset to default values!");
+ Helper.HELPER.logDirect("Exception while reading Baritone settings, some settings may be reset to default values!");
ex.printStackTrace();
}
}
public static synchronized void save(Settings settings) {
- try (BufferedWriter out = Files.newBufferedWriter(SETTINGS_PATH)) {
+ try (BufferedWriter out = Files.newBufferedWriter(settingsByName(SETTINGS_DEFAULT_NAME))) {
for (Settings.Setting setting : modifiedSettings(settings)) {
out.write(settingToString(setting) + "\n");
}
} catch (Exception ex) {
- System.out.println("Exception thrown while saving Baritone settings!");
+ Helper.HELPER.logDirect("Exception thrown while saving Baritone settings!");
ex.printStackTrace();
}
}
+ private static Path settingsByName(String name) {
+ return getMinecraft().gameDir.toPath().resolve("baritone").resolve(name);
+ }
+
public static List modifiedSettings(Settings settings) {
List modified = new ArrayList<>();
for (Settings.Setting setting : settings.allSettings) {
diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java
index fd9bb0457..255dd6b28 100644
--- a/src/main/java/baritone/command/defaults/SetCommand.java
+++ b/src/main/java/baritone/command/defaults/SetCommand.java
@@ -57,6 +57,18 @@ public class SetCommand extends Command {
logDirect("Settings saved");
return;
}
+ if (Arrays.asList("load", "ld").contains(arg)) {
+ String file = SETTINGS_DEFAULT_NAME;
+ if (args.hasAny()) {
+ file = args.getString();
+ }
+ // reset to defaults
+ SettingsUtil.modifiedSettings(Baritone.settings()).forEach(Settings.Setting::reset);
+ // then load from disk
+ SettingsUtil.readAndApply(Baritone.settings(), file);
+ logDirect("Settings reloaded from " + file);
+ return;
+ }
boolean viewModified = Arrays.asList("m", "mod", "modified").contains(arg);
boolean viewAll = Arrays.asList("all", "l", "list").contains(arg);
boolean paginate = viewModified || viewAll;
@@ -228,7 +240,7 @@ public class SetCommand extends Command {
return new TabCompleteHelper()
.addSettings()
.sortAlphabetically()
- .prepend("list", "modified", "reset", "toggle", "save")
+ .prepend("list", "modified", "reset", "toggle", "save", "load")
.filterPrefix(arg)
.stream();
}
@@ -255,7 +267,9 @@ public class SetCommand extends Command {
"> set reset all - Reset ALL SETTINGS to their defaults",
"> set reset - Reset a setting to its default",
"> set toggle - Toggle a boolean setting",
- "> set save - Save all settings (this is automatic tho)"
+ "> set save - Save all settings (this is automatic tho)",
+ "> set load - Load settings from settings.txt",
+ "> set load [filename] - Load settings from another file in your minecraft/baritone"
);
}
}
From 6698505dd83b239f67d5ca459196d011c852ed49 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Mon, 13 Mar 2023 15:31:18 -0700
Subject: [PATCH 031/405] make wp c not throw npe on invalid tag name
---
.../java/baritone/command/defaults/WaypointsCommand.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java
index cf420e90a..3016745e1 100644
--- a/src/main/java/baritone/command/defaults/WaypointsCommand.java
+++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java
@@ -149,7 +149,11 @@ public class WaypointsCommand extends Command {
logDirect(component);
} else if (action == Action.CLEAR) {
args.requireMax(1);
- IWaypoint.Tag tag = IWaypoint.Tag.getByName(args.getString());
+ String name = args.getString();
+ IWaypoint.Tag tag = IWaypoint.Tag.getByName(name);
+ if (tag == null) {
+ throw new CommandInvalidStateException("Invalid tag, \"" + name + "\"");
+ }
IWaypoint[] waypoints = ForWaypoints.getWaypointsByTag(this.baritone, tag);
for (IWaypoint waypoint : waypoints) {
ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint);
From 3200d976d732a9920a5c650f450265e95ecc3ef0 Mon Sep 17 00:00:00 2001
From: leijurv
Date: Tue, 14 Mar 2023 18:35:15 -0700
Subject: [PATCH 032/405] 1.19.4
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 0aec1468d..3cf5402e9 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s
| [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.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) |
| [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) |
+| | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.2/baritone-api-fabric-1.9.2.jar) |
**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)
From ff1732011ed8cc9642a3d92bfe62e31d10a51708 Mon Sep 17 00:00:00 2001
From: leijurv
Date: Mon, 20 Mar 2023 22:07:51 -0700
Subject: [PATCH 033/405] vid is outdated and doesn't get to the point fast
enough, so let's move it lower down
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 3cf5402e9..7a35e1199 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,7 @@
A Minecraft pathfinder bot.
-Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#0730 on Baritone which I recommend. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do.
+Baritone is the pathfinding system used in [Impact](https://impactclient.net/) since 4.4. [Here's](https://www.youtube.com/watch?v=StquF69-_wI) a (very old!) video I made showing off what it can do.
[**Baritone Discord Server**](http://discord.gg/s6fRBAUpmr)
@@ -66,7 +66,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s
**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)
-For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it.
+For other versions of Minecraft or more complicated situations or for development, see [Installation & setup](SETUP.md). Also consider just installing [Impact](https://impactclient.net/), which comes with Baritone and is easier to install than wrangling with version JSONs and zips. For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. There's a [showcase video](https://youtu.be/CZkLXWo4Fg4) made by @Adovin#6313 on Baritone which I recommend.
This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/),
the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 onwards. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths).
From 0cf89e0b2a6edfe589eaf804d6562368d0a0fcd2 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sun, 2 Apr 2023 15:20:26 -0700
Subject: [PATCH 034/405] Revert "fix items and #click"
This reverts commit 4168401aa1ce2d2423602ea21e1527d54846d8fd.
---
gradle.properties | 4 +-
.../baritone/api/utils/BlockOptionalMeta.java | 86 +++++--------------
src/main/java/baritone/utils/GuiClick.java | 9 +-
tweaker/build.gradle | 2 +-
4 files changed, 28 insertions(+), 73 deletions(-)
diff --git a/gradle.properties b/gradle.properties
index 7b0d1f440..208dbb3e7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,6 +4,6 @@ mod_version=1.9.1
maven_group=baritone
archives_base_name=baritone
-minecraft_version=1.19.3
-forge_version=1.19.3-44.0.1
+minecraft_version=1.19.2
+forge_version=1.19.2-43.0.0
fabric_version=0.14.11
diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
index b144240d0..2ba6f3ed1 100644
--- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java
+++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
@@ -19,30 +19,26 @@ package baritone.api.utils;
import baritone.api.utils.accessor.IItemStack;
import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
import io.netty.util.concurrent.ThreadPerTaskExecutor;
-import net.minecraft.client.Minecraft;
+import net.minecraft.SharedConstants;
import net.minecraft.core.BlockPos;
-import net.minecraft.resources.ResourceKey;
+import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
-import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
-import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.server.packs.*;
+import net.minecraft.server.packs.metadata.pack.PackMetadataSection;
+import net.minecraft.server.packs.repository.PackRepository;
import net.minecraft.server.packs.repository.ServerPacksSource;
import net.minecraft.server.packs.resources.MultiPackResourceManager;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
import net.minecraft.util.RandomSource;
import net.minecraft.util.Unit;
-import net.minecraft.world.flag.FeatureFlagSet;
+import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
-import net.minecraft.world.level.CustomSpawner;
-import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
-import net.minecraft.world.level.dimension.LevelStem;
-import net.minecraft.world.level.storage.LevelStorageSource;
-import net.minecraft.world.level.storage.ServerLevelData;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.LootTables;
@@ -50,14 +46,13 @@ import net.minecraft.world.level.storage.loot.PredicateManager;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.Vec3;
-import sun.misc.Unsafe;
+import org.apache.logging.log4j.core.jmx.Server;
import javax.annotation.Nonnull;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Executor;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -69,7 +64,7 @@ public final class BlockOptionalMeta {
private final ImmutableSet stateHashes;
private final ImmutableSet stackHashes;
private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$");
- private static LootTables lootTables;
+ private static LootTables manager;
private static PredicateManager predicate = new PredicateManager();
private static Map> drops = new HashMap<>();
@@ -173,11 +168,11 @@ public final class BlockOptionalMeta {
}
public static LootTables getManager() {
- if (lootTables == null) {
+ if (manager == null) {
MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack()));
ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA);
- lootTables = new LootTables(predicate);
- resourceManager.registerReloadListener(lootTables);
+ manager = new LootTables(predicate);
+ resourceManager.registerReloadListener(manager);
try {
resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get();
} catch (Exception exception) {
@@ -185,7 +180,7 @@ public final class BlockOptionalMeta {
}
}
- return lootTables;
+ return manager;
}
public static PredicateManager getPredicateManager() {
@@ -199,55 +194,20 @@ public final class BlockOptionalMeta {
return Collections.emptyList();
} else {
List items = new ArrayList<>();
- try {
- getManager().get(lootTableLocation).getRandomItems(
- new LootContext.Builder(ServerLevelStub.fastCreate())
- .withRandom(RandomSource.create())
- .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO))
- .withParameter(LootContextParams.TOOL, ItemStack.EMPTY)
- .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null)
- .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState())
- .create(LootContextParamSets.BLOCK),
+
+ // the other overload for generate doesnt work in forge because forge adds code that requires a non null world
+ getManager().get(lootTableLocation).getRandomItems(
+ new LootContext.Builder((ServerLevel null)
+ .withRandom(RandomSource.create())
+ .withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO))
+ .withParameter(LootContextParams.TOOL, ItemStack.EMPTY)
+ .withOptionalParameter(LootContextParams.BLOCK_ENTITY, null)
+ .withParameter(LootContextParams.BLOCK_STATE, block.defaultBlockState())
+ .create(LootContextParamSets.BLOCK),
stack -> items.add(stack.getItem())
- );
- } catch (Exception e) {
- e.printStackTrace();
- }
+ );
return items;
}
});
}
-
- private static class ServerLevelStub extends ServerLevel {
- private static Minecraft client = Minecraft.getInstance();
- private static Unsafe unsafe = getUnsafe();
- public ServerLevelStub(MinecraftServer $$0, Executor $$1, LevelStorageSource.LevelStorageAccess $$2, ServerLevelData $$3, ResourceKey $$4, LevelStem $$5, ChunkProgressListener $$6, boolean $$7, long $$8, List $$9, boolean $$10) {
- super($$0, $$1, $$2, $$3, $$4, $$5, $$6, $$7, $$8, $$9, $$10);
- }
-
- @Override
- public FeatureFlagSet enabledFeatures() {
- assert client.level != null;
- return client.level.enabledFeatures();
- }
-
- public static ServerLevelStub fastCreate() {
- try {
- return (ServerLevelStub) unsafe.allocateInstance(ServerLevelStub.class);
- } catch (InstantiationException e) {
- throw new RuntimeException(e);
- }
- }
-
- public static Unsafe getUnsafe() {
- try {
- Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
- theUnsafe.setAccessible(true);
- return (Unsafe) theUnsafe.get(null);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- }
}
diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java
index b3b2dc500..876d5fb42 100644
--- a/src/main/java/baritone/utils/GuiClick.java
+++ b/src/main/java/baritone/utils/GuiClick.java
@@ -80,7 +80,6 @@ public class GuiClick extends Screen implements Helper {
HitResult result = player.level.clip(new ClipContext(near.add(viewerPos), far.add(viewerPos), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player));
if (result != null && result.getType() == HitResult.Type.BLOCK) {
currentMouseOver = ((BlockHitResult) result).getBlockPos();
- System.out.println("currentMouseOver = " + currentMouseOver);
}
}
}
@@ -159,13 +158,9 @@ public class GuiClick extends Screen implements Helper {
y = y * 2 - 1;
Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F);
- projectionViewMatrix.transform(pos);
+ projectionViewMatrix.transformProject(pos);
- if (pos.w() == 0) {
- return null;
- }
-
- pos.mul(1/pos.w());
+ pos.normalize();
return new Vec3(pos.x(), pos.y(), pos.z());
}
}
diff --git a/tweaker/build.gradle b/tweaker/build.gradle
index ce623af6c..1b6304189 100644
--- a/tweaker/build.gradle
+++ b/tweaker/build.gradle
@@ -17,7 +17,7 @@
import baritone.gradle.task.CreateDistTask
import baritone.gradle.task.ProguardTask
-//import baritone.gradle.task.TweakerJsonAssembler
+import baritone.gradle.task.TweakerJsonAssembler
plugins {
id "com.github.johnrengelman.shadow" version "7.0.0"
From e4d725d9aae4683b439d44edd1d404dc5e034407 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Sun, 2 Apr 2023 15:24:50 -0700
Subject: [PATCH 035/405] Revert "loottables broke & #click not working"
This reverts commit 3e082b21d584e6c05544ee0505cd40c79d4eb6fd.
---
fabric/src/main/resources/fabric.mod.json | 2 +-
forge/src/main/resources/META-INF/mods.toml | 2 +-
gradle.properties | 4 ++--
settings.gradle | 1 -
.../api/command/datatypes/BlockById.java | 9 ++++---
.../command/datatypes/EntityClassById.java | 9 ++++---
.../api/event/events/RenderEvent.java | 2 +-
.../baritone/api/utils/BlockOptionalMeta.java | 23 +++++++-----------
.../java/baritone/api/utils/BlockUtils.java | 5 ++--
.../java/baritone/api/utils/SettingsUtil.java | 5 ++--
.../mixins/MixinClientPlayNetHandler.java | 24 -------------------
.../mixins/MixinClientPlayerEntity.java | 17 +++++++++++++
.../launch/mixins/MixinWorldRenderer.java | 2 +-
.../command/defaults/FindCommand.java | 9 ++++---
.../command/defaults/FollowCommand.java | 3 +--
.../pathing/movement/MovementHelper.java | 2 +-
src/main/java/baritone/utils/GuiClick.java | 15 +++++++-----
src/main/java/baritone/utils/IRenderer.java | 2 +-
.../java/baritone/utils/PathRenderer.java | 2 +-
.../format/defaults/LitematicaSchematic.java | 3 +--
.../format/defaults/MCEditSchematic.java | 3 +--
.../format/defaults/SpongeSchematic.java | 3 +--
tweaker/build.gradle | 2 +-
23 files changed, 65 insertions(+), 84 deletions(-)
diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json
index 62a815d0f..539fed3a8 100644
--- a/fabric/src/main/resources/fabric.mod.json
+++ b/fabric/src/main/resources/fabric.mod.json
@@ -26,6 +26,6 @@
"depends": {
"fabricloader": ">=0.11.0",
- "minecraft": "1.19.3"
+ "minecraft": "1.19.2"
}
}
\ No newline at end of file
diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml
index 2a25bf8ed..9297ed74b 100644
--- a/forge/src/main/resources/META-INF/mods.toml
+++ b/forge/src/main/resources/META-INF/mods.toml
@@ -35,6 +35,6 @@ A Minecraft pathfinder bot.
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.19.3]"
+versionRange="[1.19.2]"
ordering="NONE"
side="BOTH"
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index 208dbb3e7..4c3f5b494 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -5,5 +5,5 @@ maven_group=baritone
archives_base_name=baritone
minecraft_version=1.19.2
-forge_version=1.19.2-43.0.0
-fabric_version=0.14.11
+forge_version=1.19.2-43.1.65
+fabric_version=0.14.9
diff --git a/settings.gradle b/settings.gradle
index 7809c35c6..2475b0845 100755
--- a/settings.gradle
+++ b/settings.gradle
@@ -44,7 +44,6 @@ rootProject.name = 'baritone'
include("tweaker")
if (System.getProperty("Baritone.enabled_platforms") == null) {
System.setProperty("Baritone.enabled_platforms", "fabric,forge")
-// System.setProperty("Baritone.enabled_platforms", "fabric")
}
for (platform in System.getProperty("Baritone.enabled_platforms").split(",")) {
include(platform)
diff --git a/src/api/java/baritone/api/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java
index 21562e188..5e63fcf25 100644
--- a/src/api/java/baritone/api/command/datatypes/BlockById.java
+++ b/src/api/java/baritone/api/command/datatypes/BlockById.java
@@ -19,12 +19,11 @@ package baritone.api.command.datatypes;
import baritone.api.command.exception.CommandException;
import baritone.api.command.helpers.TabCompleteHelper;
-import net.minecraft.core.registries.BuiltInRegistries;
+import java.util.stream.Stream;
+import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
-import java.util.stream.Stream;
-
public enum BlockById implements IDatatypeFor {
INSTANCE;
@@ -32,7 +31,7 @@ public enum BlockById implements IDatatypeFor {
public Block get(IDatatypeContext ctx) throws CommandException {
ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString());
Block block;
- if ((block = BuiltInRegistries.BLOCK.getOptional(id).orElse(null)) == null) {
+ if ((block = Registry.BLOCK.getOptional(id).orElse(null)) == null) {
throw new IllegalArgumentException("no block found by that id");
}
return block;
@@ -42,7 +41,7 @@ public enum BlockById implements IDatatypeFor {
public Stream tabComplete(IDatatypeContext ctx) throws CommandException {
return new TabCompleteHelper()
.append(
- BuiltInRegistries.BLOCK.keySet()
+ Registry.BLOCK.keySet()
.stream()
.map(Object::toString)
)
diff --git a/src/api/java/baritone/api/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java
index d7cb75734..aff7a2d94 100644
--- a/src/api/java/baritone/api/command/datatypes/EntityClassById.java
+++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java
@@ -19,12 +19,11 @@ package baritone.api.command.datatypes;
import baritone.api.command.exception.CommandException;
import baritone.api.command.helpers.TabCompleteHelper;
-import net.minecraft.core.registries.BuiltInRegistries;
+import java.util.stream.Stream;
+import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
-import java.util.stream.Stream;
-
public enum EntityClassById implements IDatatypeFor {
INSTANCE;
@@ -32,7 +31,7 @@ public enum EntityClassById implements IDatatypeFor {
public EntityType get(IDatatypeContext ctx) throws CommandException {
ResourceLocation id = new ResourceLocation(ctx.getConsumer().getString());
EntityType entity;
- if ((entity = BuiltInRegistries.ENTITY_TYPE.getOptional(id).orElse(null)) == null) {
+ if ((entity = Registry.ENTITY_TYPE.getOptional(id).orElse(null)) == null) {
throw new IllegalArgumentException("no entity found by that id");
}
return entity;
@@ -41,7 +40,7 @@ public enum EntityClassById implements IDatatypeFor {
@Override
public Stream tabComplete(IDatatypeContext ctx) throws CommandException {
return new TabCompleteHelper()
- .append(BuiltInRegistries.ENTITY_TYPE.stream().map(Object::toString))
+ .append(Registry.ENTITY_TYPE.stream().map(Object::toString))
.filterPrefixNamespaced(ctx.getConsumer().getString())
.sortAlphabetically()
.stream();
diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java
index a12a4dd5c..cb7a0414c 100644
--- a/src/api/java/baritone/api/event/events/RenderEvent.java
+++ b/src/api/java/baritone/api/event/events/RenderEvent.java
@@ -18,7 +18,7 @@
package baritone.api.event.events;
import com.mojang.blaze3d.vertex.PoseStack;
-import org.joml.Matrix4f;
+import com.mojang.math.Matrix4f;
/**
* @author Brady
diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
index 2ba6f3ed1..aaeed981f 100644
--- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java
+++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
@@ -19,22 +19,18 @@ package baritone.api.utils;
import baritone.api.utils.accessor.IItemStack;
import com.google.common.collect.ImmutableSet;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
import io.netty.util.concurrent.ThreadPerTaskExecutor;
-import net.minecraft.SharedConstants;
import net.minecraft.core.BlockPos;
-import net.minecraft.network.chat.Component;
-import net.minecraft.resources.ResourceLocation;
+import net.minecraft.resources.*;
import net.minecraft.server.level.ServerLevel;
-import net.minecraft.server.packs.*;
-import net.minecraft.server.packs.metadata.pack.PackMetadataSection;
+import net.minecraft.server.packs.PackResources;
+import net.minecraft.server.packs.PackType;
+import net.minecraft.server.packs.repository.Pack;
import net.minecraft.server.packs.repository.PackRepository;
import net.minecraft.server.packs.repository.ServerPacksSource;
-import net.minecraft.server.packs.resources.MultiPackResourceManager;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
import net.minecraft.util.RandomSource;
import net.minecraft.util.Unit;
-import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
@@ -46,8 +42,6 @@ import net.minecraft.world.level.storage.loot.PredicateManager;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.Vec3;
-import org.apache.logging.log4j.core.jmx.Server;
-
import javax.annotation.Nonnull;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -169,16 +163,17 @@ public final class BlockOptionalMeta {
public static LootTables getManager() {
if (manager == null) {
- MultiPackResourceManager resources = new MultiPackResourceManager(PackType.SERVER_DATA, List.of(getVanillaServerPack()));
+ PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource());
+ rpl.reload();
+ PackResources thePack = rpl.getAvailablePacks().iterator().next().open();
ReloadableResourceManager resourceManager = new ReloadableResourceManager(PackType.SERVER_DATA);
manager = new LootTables(predicate);
resourceManager.registerReloadListener(manager);
try {
- resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), resources.listPacks().toList()).done().get();
+ resourceManager.createReload(new ThreadPerTaskExecutor(Thread::new), new ThreadPerTaskExecutor(Thread::new), CompletableFuture.completedFuture(Unit.INSTANCE), Collections.singletonList(thePack)).done().get();
} catch (Exception exception) {
throw new RuntimeException(exception);
}
-
}
return manager;
}
@@ -197,7 +192,7 @@ public final class BlockOptionalMeta {
// the other overload for generate doesnt work in forge because forge adds code that requires a non null world
getManager().get(lootTableLocation).getRandomItems(
- new LootContext.Builder((ServerLevel null)
+ new LootContext.Builder((ServerLevel) null)
.withRandom(RandomSource.create())
.withParameter(LootContextParams.ORIGIN, Vec3.atLowerCornerOf(BlockPos.ZERO))
.withParameter(LootContextParams.TOOL, ItemStack.EMPTY)
diff --git a/src/api/java/baritone/api/utils/BlockUtils.java b/src/api/java/baritone/api/utils/BlockUtils.java
index a43d78e87..cc4204f8e 100644
--- a/src/api/java/baritone/api/utils/BlockUtils.java
+++ b/src/api/java/baritone/api/utils/BlockUtils.java
@@ -20,7 +20,6 @@ package baritone.api.utils;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.core.Registry;
-import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
@@ -29,7 +28,7 @@ public class BlockUtils {
private static transient Map resourceCache = new HashMap<>();
public static String blockToString(Block block) {
- ResourceLocation loc = BuiltInRegistries.BLOCK.getKey(block);
+ ResourceLocation loc = Registry.BLOCK.getKey(block);
String name = loc.getPath(); // normally, only write the part after the minecraft:
if (!loc.getNamespace().equals("minecraft")) {
// Baritone is running on top of forge with mods installed, perhaps?
@@ -57,7 +56,7 @@ public class BlockUtils {
if (resourceCache.containsKey(name)) {
return null; // cached as null
}
- block = BuiltInRegistries.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null);
+ block = Registry.BLOCK.getOptional(ResourceLocation.tryParse(name.contains(":") ? name : "minecraft:" + name)).orElse(null);
Map copy = new HashMap<>(resourceCache); // read only copy is safe, wont throw concurrentmodification
copy.put(name, block);
resourceCache = copy;
diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java
index 9e82c05de..5b9358a21 100644
--- a/src/api/java/baritone/api/utils/SettingsUtil.java
+++ b/src/api/java/baritone/api/utils/SettingsUtil.java
@@ -23,7 +23,6 @@ import net.minecraft.client.Minecraft;
import net.minecraft.core.Direction;
import net.minecraft.core.Registry;
import net.minecraft.core.Vec3i;
-import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
@@ -253,8 +252,8 @@ public class SettingsUtil {
),
ITEM(
Item.class,
- str -> BuiltInRegistries.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue?
- item -> BuiltInRegistries.ITEM.getKey(item).toString()
+ str -> Registry.ITEM.get(new ResourceLocation(str.trim())), // TODO this now returns AIR on failure instead of null, is that an issue?
+ item -> Registry.ITEM.getKey(item).toString()
),
LIST() {
@Override
diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java
index e718685c9..df3fbf09f 100644
--- a/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java
+++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayNetHandler.java
@@ -20,19 +20,14 @@ package baritone.launch.mixins;
import baritone.Baritone;
import baritone.api.BaritoneAPI;
import baritone.api.IBaritone;
-import baritone.api.event.events.ChatEvent;
import baritone.api.event.events.ChunkEvent;
import baritone.api.event.events.type.EventState;
import baritone.cache.CachedChunk;
-import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.player.LocalPlayer;
-import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.*;
import net.minecraft.world.level.ChunkPos;
-import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -68,25 +63,6 @@ public class MixinClientPlayNetHandler {
}
}*/
- @Shadow @Final private Minecraft minecraft;
-
- @Inject(
- method = "sendChat(Ljava/lang/String;)V",
- at = @At("HEAD"),
- cancellable = true
- )
- private void sendChatMessage(String string, CallbackInfo ci) {
- ChatEvent event = new ChatEvent(string);
- IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.minecraft.player);
- if (baritone == null) {
- return;
- }
- baritone.getGameEventHandler().onSendChatMessage(event);
- if (event.isCancelled()) {
- ci.cancel();
- }
- }
-
@Inject(
method = "handleLevelChunkWithLight",
at = @At("RETURN")
diff --git a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java
index 22ca083e0..e5f3e0375 100644
--- a/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java
+++ b/src/launch/java/baritone/launch/mixins/MixinClientPlayerEntity.java
@@ -41,6 +41,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(LocalPlayer.class)
public class MixinClientPlayerEntity {
+ @Inject(
+ method = "sendChat(Ljava/lang/String;Lnet/minecraft/network/chat/Component;)V",
+ at = @At("HEAD"),
+ cancellable = true
+ )
+ private void sendChatMessage(String string, Component component, CallbackInfo ci) {
+ ChatEvent event = new ChatEvent(string);
+ IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer((LocalPlayer) (Object) this);
+ if (baritone == null) {
+ return;
+ }
+ baritone.getGameEventHandler().onSendChatMessage(event);
+ if (event.isCancelled()) {
+ ci.cancel();
+ }
+ }
+
@Inject(
method = "tick",
at = @At(
diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java
index a6cf48899..622721281 100644
--- a/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java
+++ b/src/launch/java/baritone/launch/mixins/MixinWorldRenderer.java
@@ -21,11 +21,11 @@ import baritone.api.BaritoneAPI;
import baritone.api.IBaritone;
import baritone.api.event.events.RenderEvent;
import com.mojang.blaze3d.vertex.PoseStack;
+import com.mojang.math.Matrix4f;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.LightTexture;
-import org.joml.Matrix4f;
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/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java
index 500981873..913156400 100644
--- a/src/main/java/baritone/command/defaults/FindCommand.java
+++ b/src/main/java/baritone/command/defaults/FindCommand.java
@@ -27,7 +27,6 @@ import baritone.api.utils.BetterBlockPos;
import baritone.cache.CachedChunk;
import net.minecraft.core.Registry;
import net.minecraft.ChatFormatting;
-import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.HoverEvent;
@@ -58,7 +57,7 @@ public class FindCommand extends Command {
Component[] components = toFind.stream()
.flatMap(block ->
ctx.worldData().getCachedWorld().getLocationsOf(
- BuiltInRegistries.BLOCK.getKey(block).getPath(),
+ Registry.BLOCK.getKey(block).getPath(),
Integer.MAX_VALUE,
origin.x,
origin.y,
@@ -92,9 +91,9 @@ public class FindCommand extends Command {
public Stream tabComplete(String label, IArgConsumer args) throws CommandException {
return new TabCompleteHelper()
.append(
- CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream()
- .map(BuiltInRegistries.BLOCK::getKey)
- .map(Object::toString)
+ CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream()
+ .map(Registry.BLOCK::getKey)
+ .map(Object::toString)
)
.filterPrefixNamespaced(args.getString())
.sortAlphabetically()
diff --git a/src/main/java/baritone/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java
index b7e708377..46c6a1c60 100644
--- a/src/main/java/baritone/command/defaults/FollowCommand.java
+++ b/src/main/java/baritone/command/defaults/FollowCommand.java
@@ -31,7 +31,6 @@ import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Stream;
import net.minecraft.core.Registry;
-import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
@@ -85,7 +84,7 @@ public class FollowCommand extends Command {
} else {
logDirect("Following these types of entities:");
classes.stream()
- .map(BuiltInRegistries.ENTITY_TYPE::getKey)
+ .map(Registry.ENTITY_TYPE::getKey)
.map(Objects::requireNonNull)
.map(ResourceLocation::toString)
.forEach(this::logDirect);
diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java
index b636ef9c2..128fa5e16 100644
--- a/src/main/java/baritone/pathing/movement/MovementHelper.java
+++ b/src/main/java/baritone/pathing/movement/MovementHelper.java
@@ -724,7 +724,7 @@ public interface MovementHelper extends ActionCosts, Helper {
static boolean isBlockNormalCube(BlockState state) {
Block block = state.getBlock();
- if (block instanceof BambooStalkBlock
+ if (block instanceof BambooBlock
|| block instanceof MovingPistonBlock
|| block instanceof ScaffoldingBlock
|| block instanceof ShulkerBoxBlock
diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java
index 876d5fb42..d0a435e1f 100644
--- a/src/main/java/baritone/utils/GuiClick.java
+++ b/src/main/java/baritone/utils/GuiClick.java
@@ -24,6 +24,8 @@ import baritone.api.utils.BetterBlockPos;
import baritone.api.utils.Helper;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
+import com.mojang.math.Matrix4f;
+import com.mojang.math.Vector4f;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.player.LocalPlayer;
@@ -37,8 +39,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
-import org.joml.Matrix4f;
-import org.joml.Vector4f;
import java.awt.*;
import java.util.Collections;
@@ -118,8 +118,8 @@ public class GuiClick extends Screen implements Helper {
}
public void onRender(PoseStack modelViewStack, Matrix4f projectionMatrix) {
- this.projectionViewMatrix = new Matrix4f(projectionMatrix);
- this.projectionViewMatrix.mul(modelViewStack.last().pose());
+ this.projectionViewMatrix = projectionMatrix.copy();
+ this.projectionViewMatrix.multiply(modelViewStack.last().pose());
this.projectionViewMatrix.invert();
if (currentMouseOver != null) {
@@ -158,9 +158,12 @@ public class GuiClick extends Screen implements Helper {
y = y * 2 - 1;
Vector4f pos = new Vector4f((float) x, (float) y, (float) z, 1.0F);
- projectionViewMatrix.transformProject(pos);
+ pos.transform(this.projectionViewMatrix);
+ if (pos.w() == 0) {
+ return null;
+ }
- pos.normalize();
+ pos.perspectiveDivide();
return new Vec3(pos.x(), pos.y(), pos.z());
}
}
diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java
index 380fbd9e0..d07bf44fa 100644
--- a/src/main/java/baritone/utils/IRenderer.java
+++ b/src/main/java/baritone/utils/IRenderer.java
@@ -23,9 +23,9 @@ import baritone.api.utils.Helper;
import baritone.utils.accessor.IEntityRenderManager;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*;
+import com.mojang.math.Matrix4f;
import java.awt.*;
import net.minecraft.world.phys.AABB;
-import org.joml.Matrix4f;
import static org.lwjgl.opengl.GL11.*;
diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java
index f18db52b2..5f50962e7 100644
--- a/src/main/java/baritone/utils/PathRenderer.java
+++ b/src/main/java/baritone/utils/PathRenderer.java
@@ -30,6 +30,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexFormat;
+import com.mojang.math.Matrix4f;
import java.awt.*;
import java.util.Collection;
import java.util.Collections;
@@ -44,7 +45,6 @@ import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
-import org.joml.Matrix4f;
import static org.lwjgl.opengl.GL11.*;
diff --git a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java
index 65cdec058..9fd672d62 100644
--- a/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java
+++ b/src/main/java/baritone/utils/schematic/format/defaults/LitematicaSchematic.java
@@ -20,7 +20,6 @@ package baritone.utils.schematic.format.defaults;
import baritone.utils.schematic.StaticSchematic;
import net.minecraft.core.Registry;
import net.minecraft.core.Vec3i;
-import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.resources.ResourceLocation;
@@ -94,7 +93,7 @@ public final class LitematicaSchematic extends StaticSchematic {
BlockState[] blockList = new BlockState[blockStatePalette.size()];
for (int i = 0; i < blockStatePalette.size(); i++) {
- Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name"))));
+ Block block = Registry.BLOCK.get(new ResourceLocation((((CompoundTag) blockStatePalette.get(i)).getString("Name"))));
CompoundTag properties = ((CompoundTag) blockStatePalette.get(i)).getCompound("Properties");
blockList[i] = getBlockState(block, properties);
diff --git a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java
index 3018021a5..4693ea387 100644
--- a/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java
+++ b/src/main/java/baritone/utils/schematic/format/defaults/MCEditSchematic.java
@@ -19,7 +19,6 @@ package baritone.utils.schematic.format.defaults;
import baritone.utils.schematic.StaticSchematic;
import net.minecraft.core.Registry;
-import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.datafix.fixes.ItemIdFix;
@@ -63,7 +62,7 @@ public final class MCEditSchematic extends StaticSchematic {
// additional is 0 through 15 inclusive since it's & 0xF above
blockID |= additional[blockInd] << 8;
}
- Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID)));
+ Block block = Registry.BLOCK.get(ResourceLocation.tryParse(ItemIdFix.getItem(blockID)));
// int meta = metadata[blockInd] & 0xFF;
// this.states[x][z][y] = block.getStateFromMeta(meta);
this.states[x][z][y] = block.defaultBlockState();
diff --git a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java
index 12163cbff..3c00b08c6 100644
--- a/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java
+++ b/src/main/java/baritone/utils/schematic/format/defaults/SpongeSchematic.java
@@ -26,7 +26,6 @@ import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.minecraft.core.Registry;
-import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
@@ -107,7 +106,7 @@ public final class SpongeSchematic extends StaticSchematic {
private BlockState deserialize() {
if (this.blockState == null) {
- Block block = BuiltInRegistries.BLOCK.get(this.resourceLocation);
+ Block block = Registry.BLOCK.get(this.resourceLocation);
this.blockState = block.defaultBlockState();
this.properties.keySet().stream().sorted(String::compareTo).forEachOrdered(key -> {
diff --git a/tweaker/build.gradle b/tweaker/build.gradle
index 1b6304189..ce623af6c 100644
--- a/tweaker/build.gradle
+++ b/tweaker/build.gradle
@@ -17,7 +17,7 @@
import baritone.gradle.task.CreateDistTask
import baritone.gradle.task.ProguardTask
-import baritone.gradle.task.TweakerJsonAssembler
+//import baritone.gradle.task.TweakerJsonAssembler
plugins {
id "com.github.johnrengelman.shadow" version "7.0.0"
From acce20c573a78688c2b1092e412fbc933dddff5b Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Sun, 2 Apr 2023 17:01:49 -0700
Subject: [PATCH 036/405] remove 1.19.3 method in blockOptionalMeta
---
build.gradle | 3 +--
buildSrc/build.gradle | 2 +-
.../baritone/gradle/task/ProguardTask.java | 2 +-
.../baritone/api/utils/BlockOptionalMeta.java | 20 -------------------
4 files changed, 3 insertions(+), 24 deletions(-)
diff --git a/build.gradle b/build.gradle
index 471bb608f..b139b8438 100755
--- a/build.gradle
+++ b/build.gradle
@@ -126,8 +126,7 @@ jar {
}
remapJar {
- targetNamespace = "named"
- fallbackTargetNamespace = "intermediary"
+ target = "mojmap"
}
javadoc {
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 14b7dc3bb..e6c1468a7 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -36,5 +36,5 @@ dependencies {
implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0'
implementation group: 'commons-io', name: 'commons-io', version: '2.6'
- implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.3.4'
+ implementation group: 'xyz.wagyourtail.unimined', name: 'xyz.wagyourtail.unimined.gradle.plugin', version: '0.4.9'
}
\ No newline at end of file
diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java
index 5d80a65ea..52d1d93dc 100644
--- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java
+++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java
@@ -81,7 +81,7 @@ public class ProguardTask extends BaritoneGradleTask {
MinecraftProvider, ?> provider = this.getProject().getExtensions().getByType(MinecraftProvider.class);
private File getMcJar() {
- return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdFallbackNamespace()).toFile();
+ return provider.getMinecraftWithMapping(EnvType.COMBINED, provider.getMcPatcher().getProdNamespace(), provider.getMcPatcher().getProdNamespace()).toFile();
}
private boolean isMcJar(File f) {
diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
index aaeed981f..13fe102ac 100644
--- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java
+++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
@@ -25,7 +25,6 @@ import net.minecraft.resources.*;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.packs.PackResources;
import net.minecraft.server.packs.PackType;
-import net.minecraft.server.packs.repository.Pack;
import net.minecraft.server.packs.repository.PackRepository;
import net.minecraft.server.packs.repository.ServerPacksSource;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
@@ -43,8 +42,6 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.Vec3;
import javax.annotation.Nonnull;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.regex.MatchResult;
@@ -144,23 +141,6 @@ public final class BlockOptionalMeta {
return null;
}
- private static Method getVanillaServerPack;
-
- private static VanillaPackResources getVanillaServerPack() {
- if (getVanillaServerPack == null) {
- getVanillaServerPack = Arrays.stream(ServerPacksSource.class.getDeclaredMethods()).filter(field -> field.getReturnType() == VanillaPackResources.class).findFirst().orElseThrow();
- getVanillaServerPack.setAccessible(true);
- }
-
- try {
- return (VanillaPackResources) getVanillaServerPack.invoke(null);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return null;
- }
-
public static LootTables getManager() {
if (manager == null) {
PackRepository rpl = new PackRepository(PackType.SERVER_DATA, new ServerPacksSource());
From f334b3b76572d6aa2bfdf643c0c957103441b201 Mon Sep 17 00:00:00 2001
From: Wagyourtail
Date: Mon, 10 Apr 2023 18:40:48 -0700
Subject: [PATCH 037/405] update setup.md
---
SETUP.md | 67 +++++---------------------------------------------------
1 file changed, 6 insertions(+), 61 deletions(-)
diff --git a/SETUP.md b/SETUP.md
index 57866b192..1daeb9f89 100644
--- a/SETUP.md
+++ b/SETUP.md
@@ -43,13 +43,13 @@ If another one of your Forge mods has a Baritone integration, you want `baritone
## Command Line
On Mac OSX and Linux, use `./gradlew` instead of `gradlew`.
-If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16 for 1.17.1, and JDK 17 for 1.18.1.
+If you have errors with a package missing please make sure you have setup your environment, and are using Oracle JDK 8 for 1.12.2-1.16.5, JDK 16+ for 1.17.1, and JDK 17+ for 1.18.1.
To check which java you are using do
`java -version` in a command prompt or terminal.
If you are using anything above OpenJDK 8 for 1.12.2-1.16.5, it might not work because the Java distributions above JDK 8 using may not have the needed javax classes.
-Open JDK download: https://openjdk.java.net/install/
+Download java: https://adoptium.net/
#### macOS guide
In order to get JDK 8, Try running the following command:
`% /usr/libexec/java_home -V`
@@ -66,68 +66,13 @@ In order to get JDK 8 running in the **current terminal window** you will have t
To add OpenJDK 8 to your PATH add the export line to the end of your `.zshrc / .bashrc` if you want it to apply to each new terminal. If you're using bash change the .bachrc and if you're using zsh change the .zshrc
-Setting up the Environment:
+### Building Baritone
-```
-$ gradlew setupDecompWorkspace
-$ gradlew --refresh-dependencies
-```
+These tasks depend on the minecraft version, but are (for the most part) standard for building mods.
-Building Baritone:
-
-```
-$ gradlew build
-```
-
-For minecraft 1.15.2+, run the following instead to include the Forge jars:
-
-```
-$ gradlew build -Pbaritone.forge_build
-```
-
-Do this instead for Fabric jars:
-
-```
-$ gradlew build -Pbaritone.fabric_build
-```
-
-Running Baritone:
-
-```
-$ gradlew runClient
-```
-
-For information on how to build baritone, see [Building Baritone](#building-baritone)
+for more details, see [the build ci action](/.github/workflows/gradle_build.yml)
## IntelliJ
- Open the project in IntelliJ as a Gradle project
-
- 
-
-- Run the Gradle tasks `setupDecompWorkspace` then `genIntellijRuns`
-
- 
-
- Refresh the Gradle project (or, to be safe, just restart IntelliJ)
-
- 
-
-- Select the "Minecraft Client" launch config
-
- 
-
-- Click on ``Edit Configurations...`` from the same dropdown and select the "Minecraft Client" config
-
- 
-
-- In `Edit Configurations...` you need to select `baritone_launch` for `Use classpath of module:`.
-
- 
-
-## IntelliJ
-
-- Navigate to the gradle tasks on the right tab as follows
-
- 
-
-- Double click on **build** to run it
+- depending on the minecraft version, you may need to run `setupDecompWorkspace` or `genIntellijRuns` in order to get everything working
\ No newline at end of file
From 35ab687d5e7ba76128571a24f985c90e7849a6ab Mon Sep 17 00:00:00 2001
From: leijurv
Date: Tue, 11 Apr 2023 16:00:22 -0700
Subject: [PATCH 038/405] 1.9.3 download links
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 7a35e1199..f54584118 100644
--- a/README.md
+++ b/README.md
@@ -62,7 +62,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s
| [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.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) |
| [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) |
-| | [1.19.4 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.2/baritone-api-fabric-1.9.2.jar) |
+| [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) |
**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)
From 6eeeeb3a1b3b921f5619a178aab0500497cfc292 Mon Sep 17 00:00:00 2001
From: Leijurv
Date: Tue, 11 Apr 2023 19:50:51 -0700
Subject: [PATCH 039/405] v1.9.4
---
gradle.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle.properties b/gradle.properties
index 4c3f5b494..04999bf13 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,6 +1,6 @@
org.gradle.jvmargs=-Xmx4G
-mod_version=1.9.1
+mod_version=1.9.4
maven_group=baritone
archives_base_name=baritone
From 5f2eadbfa663909ceb41073c021f2934c56ceb56 Mon Sep 17 00:00:00 2001
From: leijurv
Date: Tue, 11 Apr 2023 20:36:29 -0700
Subject: [PATCH 040/405] download links for 1.19.2
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index f54584118..8ae8090d7 100644
--- a/README.md
+++ b/README.md
@@ -61,6 +61,7 @@ Baritone is the pathfinding system used in [Impact](https://impactclient.net/) s
| [1.16.5 Forge](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-forge-1.6.4.jar) | [1.16.5 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.6.4/baritone-api-fabric-1.6.4.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.4/baritone-api-forge-1.8.4.jar) | [1.18.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.8.4/baritone-api-fabric-1.8.4.jar) |
+| [1.19.2 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-forge-1.9.4.jar) | [1.19.2 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.4/baritone-api-fabric-1.9.4.jar) |
| [1.19.3 Forge](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-forge-1.9.1.jar) | [1.19.3 Fabric](https://github.com/cabaletta/baritone/releases/download/v1.9.1/baritone-api-fabric-1.9.1.jar) |
| [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) |
From e8a4a9fdac983a5270595a6e89dc9cad480cd988 Mon Sep 17 00:00:00 2001
From: ZacSharp <68165024+ZacSharp@users.noreply.github.com>
Date: Mon, 24 Apr 2023 16:23:38 +0200
Subject: [PATCH 041/405] Make cocoa farmable
---
.../java/baritone/process/FarmProcess.java | 51 ++++++++++++++++++-
1 file changed, 50 insertions(+), 1 deletion(-)
diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java
index 73c575d22..a9188299c 100644
--- a/src/main/java/baritone/process/FarmProcess.java
+++ b/src/main/java/baritone/process/FarmProcess.java
@@ -21,6 +21,7 @@ import baritone.Baritone;
import baritone.api.BaritoneAPI;
import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalBlock;
+import baritone.api.pathing.goals.GoalGetToBlock;
import baritone.api.pathing.goals.GoalComposite;
import baritone.api.process.IFarmProcess;
import baritone.api.process.PathingCommand;
@@ -119,6 +120,7 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
PUMPKIN(Blocks.PUMPKIN, state -> true),
MELON(Blocks.MELON_BLOCK, state -> true),
NETHERWART(Blocks.NETHER_WART, state -> state.getValue(BlockNetherWart.AGE) >= 3),
+ COCOA(Blocks.COCOA, state -> state.getValue(BlockCocoa.AGE) >= 2),
SUGARCANE(Blocks.REEDS, null) {
@Override
public boolean readyToHarvest(World world, BlockPos pos, IBlockState state) {
@@ -176,6 +178,10 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
return !stack.isEmpty() && stack.getItem().equals(Items.NETHER_WART);
}
+ private boolean isCocoa(ItemStack stack) {
+ return !stack.isEmpty() && stack.getItem() instanceof ItemDye && EnumDyeColor.byDyeDamage(stack.getMetadata()) == EnumDyeColor.BROWN;
+ }
+
@Override
public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) {
ArrayList scan = new ArrayList<>();
@@ -184,6 +190,7 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
}
if (Baritone.settings().replantCrops.value) {
scan.add(Blocks.FARMLAND);
+ scan.add(Blocks.LOG);
if (Baritone.settings().replantNetherWart.value) {
scan.add(Blocks.SOUL_SAND);
}
@@ -199,6 +206,7 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
List openFarmland = new ArrayList<>();
List bonemealable = new ArrayList<>();
List openSoulsand = new ArrayList<>();
+ List openLog = new ArrayList<>();
for (BlockPos pos : locations) {
//check if the target block is out of range.
if (range != 0 && pos.getDistance(center.getX(), center.getY(), center.getZ()) > range) {
@@ -219,6 +227,19 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
}
continue;
}
+ if (state.getBlock() == Blocks.LOG) {
+ // yes, both log blocks and the planks block define separate properties but share the enum
+ if (state.getValue(BlockOldLog.VARIANT) != BlockPlanks.EnumType.JUNGLE) {
+ continue;
+ }
+ for (EnumFacing direction : EnumFacing.Plane.HORIZONTAL) {
+ if (ctx.world().getBlockState(pos.offset(direction)).getBlock() instanceof BlockAir) {
+ openLog.add(pos);
+ break;
+ }
+ }
+ continue;
+ }
if (readyForHarvest(ctx.world(), pos, state)) {
toBreak.add(pos);
continue;
@@ -259,6 +280,25 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
}
}
}
+ for (BlockPos pos : openLog) {
+ for (EnumFacing dir : EnumFacing.Plane.HORIZONTAL) {
+ if (!(ctx.world().getBlockState(pos.offset(dir)).getBlock() instanceof BlockAir)) {
+ continue;
+ }
+ Vec3d faceCenter = new Vec3d(pos).add(0.5, 0.5, 0.5).add(new Vec3d(dir.getDirectionVec()).scale(0.5));
+ Optional rot = RotationUtils.reachableOffset(ctx.player(), pos, faceCenter, ctx.playerController().getBlockReachDistance(), false);
+ if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isCocoa)) {
+ RayTraceResult result = RayTraceUtils.rayTraceTowards(ctx.player(), rot.get(), ctx.playerController().getBlockReachDistance());
+ if (result.typeOfHit == RayTraceResult.Type.BLOCK && result.sideHit == dir) {
+ baritone.getLookBehavior().updateTarget(rot.get(), true);
+ if (ctx.isLookingAt(pos)) {
+ baritone.getInputOverrideHandler().setInputForceState(Input.CLICK_RIGHT, true);
+ }
+ return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE);
+ }
+ }
+ }
+ }
for (BlockPos pos : bonemealable) {
Optional rot = RotationUtils.reachable(ctx, pos);
if (rot.isPresent() && isSafeToCancel && baritone.getInventoryBehavior().throwaway(true, this::isBoneMeal)) {
@@ -293,6 +333,15 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
goalz.add(new GoalBlock(pos.up()));
}
}
+ if (baritone.getInventoryBehavior().throwaway(false, this::isCocoa)) {
+ for (BlockPos pos : openLog) {
+ for (EnumFacing direction : EnumFacing.Plane.HORIZONTAL) {
+ if (ctx.world().getBlockState(pos.offset(direction)).getBlock() instanceof BlockAir) {
+ goalz.add(new GoalGetToBlock(pos.offset(direction)));
+ }
+ }
+ }
+ }
if (baritone.getInventoryBehavior().throwaway(false, this::isBoneMeal)) {
for (BlockPos pos : bonemealable) {
goalz.add(new GoalBlock(pos));
@@ -301,7 +350,7 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
for (Entity entity : ctx.world().loadedEntityList) {
if (entity instanceof EntityItem && entity.onGround) {
EntityItem ei = (EntityItem) entity;
- if (PICKUP_DROPPED.contains(ei.getItem().getItem())) {
+ if (PICKUP_DROPPED.contains(ei.getItem().getItem()) || isCocoa(ei.getItem())) {
// +0.1 because of farmland's 0.9375 dummy height lol
goalz.add(new GoalBlock(new BlockPos(entity.posX, entity.posY + 0.1, entity.posZ)));
}
From e4cd35ac3391ca6b0e9993e4cd0dd1d34ffc9a12 Mon Sep 17 00:00:00 2001
From: ZacSharp <68165024+ZacSharp@users.noreply.github.com>
Date: Mon, 24 Apr 2023 13:15:06 +0200
Subject: [PATCH 042/405] =?UTF-8?q?=E2=9C=A8=20Add=20maxYLevelWhileMining?=
=?UTF-8?q?=20setting?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/java/baritone/api/Settings.java | 5 +++++
src/main/java/baritone/process/MineProcess.java | 2 ++
2 files changed, 7 insertions(+)
diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java
index 38661d8be..c13cde2f7 100644
--- a/src/api/java/baritone/api/Settings.java
+++ b/src/api/java/baritone/api/Settings.java
@@ -853,6 +853,11 @@ public final class Settings {
*/
public final Setting minYLevelWhileMining = new Setting<>(0);
+ /**
+ * Sets the maximum y level to mine ores at.
+ */
+ public final Setting maxYLevelWhileMining = new Setting<>(255); // 1.17+ defaults to maximum possible world height
+
/**
* This will only allow baritone to mine exposed ores, can be used to stop ore obfuscators on servers that use them.
*/
diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java
index 9af09a819..6880dd86c 100644
--- a/src/main/java/baritone/process/MineProcess.java
+++ b/src/main/java/baritone/process/MineProcess.java
@@ -437,6 +437,8 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro
.filter(pos -> pos.getY() >= Baritone.settings().minYLevelWhileMining.value)
+ .filter(pos -> pos.getY() <= Baritone.settings().maxYLevelWhileMining.value)
+
.filter(pos -> !blacklist.contains(pos))
.sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().player()::getDistanceSq))
From 271c2ff636ce1e6504cff363589008f9802a9633 Mon Sep 17 00:00:00 2001
From: ZacSharp <68165024+ZacSharp@users.noreply.github.com>
Date: Mon, 24 Apr 2023 22:38:12 +0200
Subject: [PATCH 043/405] Extend BlockOptionalMeta parsing to parse block
properties
---
.../baritone/api/utils/BlockOptionalMeta.java | 57 +++++++++++++++----
1 file changed, 46 insertions(+), 11 deletions(-)
diff --git a/src/api/java/baritone/api/utils/BlockOptionalMeta.java b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
index e0f491fba..9864d5144 100644
--- a/src/api/java/baritone/api/utils/BlockOptionalMeta.java
+++ b/src/api/java/baritone/api/utils/BlockOptionalMeta.java
@@ -19,6 +19,7 @@ package baritone.api.utils;
import baritone.api.utils.accessor.IItemStack;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableMap;
import net.minecraft.block.*;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
@@ -36,21 +37,24 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
public final class BlockOptionalMeta {
+ // id:meta or id[] or id[properties] where id and properties are any text with at least one character and meta is a one or two digit number
+ private static final Pattern PATTERN = Pattern.compile("^(?.+?)(?::(?\\d\\d?)|\\[(?.+?)?\\])?$");
private final Block block;
private final int meta;
private final boolean noMeta;
+ private final String propertiesDescription; // exists so toString() can return something more useful than a list of all blockstates
private final Set blockstates;
private final Set stateHashes;
private final Set stackHashes;
- private static final Pattern pattern = Pattern.compile("^(.+?)(?::(\\d+))?$");
private static final Map