diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 6a91b27cdc..8ab98f4bd9 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -6,7 +6,7 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[62,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[65,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. license="https://raw.githubusercontent.com/cabaletta/baritone/1.16.2/LICENSE" # A URL to refer people to when problems occur with this mod issueTrackerURL="https://github.com/cabaletta/baritone/issues" #optional @@ -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="[26.1, 26.1.2]" +versionRange="[26.2]" ordering="NONE" side="BOTH" diff --git a/gradle.properties b/gradle.properties index 49f2113429..9aced4e431 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,16 +1,16 @@ org.gradle.jvmargs=-Xmx4G -available_loaders=fabric,forge,neoforge,tweaker +available_loaders=forge -mod_version=1.18.0 +mod_version=1.18.0-26.2 maven_group=baritone archives_base_name=baritone java_version=25 -minecraft_version=26.1.2 +minecraft_version=26.2 -forge_version=64.0.11 +forge_version=65.0.3 neoforge_version=78 diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 57a375fa2f..91e81d86c3 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1281,7 +1281,7 @@ public final class Settings { public final Setting> logger = new Setting<>((msg) -> { try { final GuiMessageTag tag = useMessageTag.value ? Helper.MESSAGE_TAG : null; - Minecraft.getInstance().gui.getChat().addPlayerMessage(msg, null, tag); + Minecraft.getInstance().gui.hud.getChat().addPlayerMessage(msg, null, tag); } catch (Throwable t) { LOGGER.warn("Failed to log message to chat: " + msg.getString(), t); } diff --git a/src/api/java/baritone/api/command/manager/ICommandManager.java b/src/api/java/baritone/api/command/manager/ICommandManager.java index 3f2d81f244..bb77f8f200 100644 --- a/src/api/java/baritone/api/command/manager/ICommandManager.java +++ b/src/api/java/baritone/api/command/manager/ICommandManager.java @@ -21,7 +21,7 @@ import baritone.api.command.ICommand; import baritone.api.command.argument.ICommandArgument; import baritone.api.command.registry.Registry; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import java.util.List; import java.util.stream.Stream; @@ -44,9 +44,9 @@ public interface ICommandManager { boolean execute(String string); - boolean execute(Tuple> expanded); + boolean execute(Pair> expanded); - Stream tabComplete(Tuple> expanded); + Stream tabComplete(Pair> expanded); Stream tabComplete(String prefix); } diff --git a/src/api/java/baritone/api/utils/gui/BaritoneToast.java b/src/api/java/baritone/api/utils/gui/BaritoneToast.java index effa0b8046..25e1318c99 100644 --- a/src/api/java/baritone/api/utils/gui/BaritoneToast.java +++ b/src/api/java/baritone/api/utils/gui/BaritoneToast.java @@ -24,6 +24,6 @@ public class BaritoneToast { private static final SystemToast.SystemToastId BARITONE_TOAST_ID = new SystemToast.SystemToastId(5000L); public static void addOrUpdate(Component title, Component subtitle) { - SystemToast.addOrUpdate(Minecraft.getInstance().getToastManager(), BARITONE_TOAST_ID, title, subtitle); + SystemToast.addOrUpdate(Minecraft.getInstance().gui.toastManager(), BARITONE_TOAST_ID, title, subtitle); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java b/src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java index b4c8e05b67..99d61d5a09 100644 --- a/src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinFireworkRocketEntity.java @@ -44,7 +44,7 @@ public abstract class MixinFireworkRocketEntity extends Entity implements IFirew public abstract boolean isAttachedToEntity(); private MixinFireworkRocketEntity(Level level) { - super(EntityType.FIREWORK_ROCKET, level); + super(null, level); } @Override diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 7a1c16c526..af13fe13c6 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -24,6 +24,7 @@ import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; @@ -165,27 +166,17 @@ private void postLoadWorld(final ClientLevel world, final CallbackInfo ci) { @Redirect( method = "tick", at = @At( - value = "FIELD", - opcode = Opcodes.GETFIELD, - target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;" - ), - slice = @Slice( - from = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/gui/components/DebugScreenOverlay;showDebugScreen()Z" - ), - to = @At( - value = "CONSTANT", - args = "stringValue=Keybindings" - ) + value = "INVOKE", + target = "Lnet/minecraft/client/gui/Gui;screen()Lnet/minecraft/client/gui/screens/Screen;", + ordinal = 1 ) ) - private Screen passEvents(Minecraft instance) { + private Screen passEvents(Gui instance) { // allow user input is only the primary baritone if (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing() && player != null) { return null; } - return instance.screen; + return instance.screen(); } // TODO diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index ad68714137..53f2bd3e0a 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -245,7 +245,7 @@ public void openClick() { new Thread(() -> { try { Thread.sleep(100); - mc.execute(() -> mc.setScreen(new GuiClick())); + mc.execute(() -> mc.gui.setScreen(new GuiClick())); } catch (Exception ignored) {} }).start(); } diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 86a849e5a6..de0b6404c7 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -50,22 +50,22 @@ public final class CachedChunk { Blocks.SPAWNER, Blocks.BARRIER, Blocks.OBSERVER, - Blocks.WHITE_SHULKER_BOX, - Blocks.ORANGE_SHULKER_BOX, - Blocks.MAGENTA_SHULKER_BOX, - Blocks.LIGHT_BLUE_SHULKER_BOX, - Blocks.YELLOW_SHULKER_BOX, - Blocks.LIME_SHULKER_BOX, - Blocks.PINK_SHULKER_BOX, - Blocks.GRAY_SHULKER_BOX, - Blocks.LIGHT_GRAY_SHULKER_BOX, - Blocks.CYAN_SHULKER_BOX, - Blocks.PURPLE_SHULKER_BOX, - Blocks.BLUE_SHULKER_BOX, - Blocks.BROWN_SHULKER_BOX, - Blocks.GREEN_SHULKER_BOX, - Blocks.RED_SHULKER_BOX, - Blocks.BLACK_SHULKER_BOX, + Blocks.DYED_SHULKER_BOX.white(), + Blocks.DYED_SHULKER_BOX.orange(), + Blocks.DYED_SHULKER_BOX.magenta(), + Blocks.DYED_SHULKER_BOX.lightBlue(), + Blocks.DYED_SHULKER_BOX.yellow(), + Blocks.DYED_SHULKER_BOX.lime(), + Blocks.DYED_SHULKER_BOX.pink(), + Blocks.DYED_SHULKER_BOX.gray(), + Blocks.DYED_SHULKER_BOX.lightGray(), + Blocks.DYED_SHULKER_BOX.cyan(), + Blocks.DYED_SHULKER_BOX.purple(), + Blocks.DYED_SHULKER_BOX.blue(), + Blocks.DYED_SHULKER_BOX.brown(), + Blocks.DYED_SHULKER_BOX.green(), + Blocks.DYED_SHULKER_BOX.red(), + Blocks.DYED_SHULKER_BOX.black(), Blocks.NETHER_PORTAL, Blocks.HOPPER, Blocks.BEACON, @@ -87,22 +87,22 @@ public final class CachedChunk { Blocks.WITHER_SKELETON_WALL_SKULL, Blocks.ENCHANTING_TABLE, Blocks.ANVIL, - Blocks.WHITE_BED, - Blocks.ORANGE_BED, - Blocks.MAGENTA_BED, - Blocks.LIGHT_BLUE_BED, - Blocks.YELLOW_BED, - Blocks.LIME_BED, - Blocks.PINK_BED, - Blocks.GRAY_BED, - Blocks.LIGHT_GRAY_BED, - Blocks.CYAN_BED, - Blocks.PURPLE_BED, - Blocks.BLUE_BED, - Blocks.BROWN_BED, - Blocks.GREEN_BED, - Blocks.RED_BED, - Blocks.BLACK_BED, + Blocks.BED.white(), + Blocks.BED.orange(), + Blocks.BED.magenta(), + Blocks.BED.lightBlue(), + Blocks.BED.yellow(), + Blocks.BED.lime(), + Blocks.BED.pink(), + Blocks.BED.gray(), + Blocks.BED.lightGray(), + Blocks.BED.cyan(), + Blocks.BED.purple(), + Blocks.BED.blue(), + Blocks.BED.brown(), + Blocks.BED.green(), + Blocks.BED.red(), + Blocks.BED.black(), Blocks.DRAGON_EGG, Blocks.JUKEBOX, Blocks.END_GATEWAY, diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index f503a07990..a46952a080 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -22,7 +22,7 @@ import baritone.api.utils.IPlayerContext; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.resources.Identifier; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import net.minecraft.world.level.Level; import net.minecraft.world.level.storage.LevelResource; import org.apache.commons.lang3.SystemUtils; @@ -71,8 +71,8 @@ public final WorldData getCurrentWorld() { */ public final void initWorld(Level world) { this.getSaveDirectories(world).ifPresent(dirs -> { - final Path worldDir = dirs.getA(); - final Path readmeDir = dirs.getB(); + final Path worldDir = dirs.getFirst(); + final Path readmeDir = dirs.getSecond(); try { // lol wtf is this baritone folder in my minecraft save? @@ -119,7 +119,7 @@ private Path getWorldDataDirectory(Path parent, Level world) { * @return An {@link Optional} containing the world's baritone dir and readme dir, or {@link Optional#empty()} if * the world isn't valid for caching. */ - private Optional> getSaveDirectories(Level world) { + private Optional> getSaveDirectories(Level world) { Path worldDir; Path readmeDir; @@ -156,7 +156,7 @@ private Optional> getSaveDirectories(Level world) { readmeDir = baritone.getDirectory(); } - return Optional.of(new Tuple<>(worldDir, readmeDir)); + return Optional.of(new Pair<>(worldDir, readmeDir)); } /** diff --git a/src/main/java/baritone/command/ExampleBaritoneControl.java b/src/main/java/baritone/command/ExampleBaritoneControl.java index bb9681e97d..467f7f1dad 100644 --- a/src/main/java/baritone/command/ExampleBaritoneControl.java +++ b/src/main/java/baritone/command/ExampleBaritoneControl.java @@ -38,7 +38,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import net.minecraft.util.Util; import java.util.List; @@ -66,7 +66,7 @@ public void onSendChatMessage(ChatEvent event) { event.cancel(); String commandStr = msg.substring(forceRun ? FORCE_COMMAND_PREFIX.length() : prefix.length()); if (!runCommand(commandStr) && !commandStr.trim().isEmpty()) { - new CommandNotFoundException(CommandManager.expand(commandStr).getA()).handle(null, null); + new CommandNotFoundException(CommandManager.expand(commandStr).getFirst()).handle(null, null); } } else if ((settings.chatControl.value || settings.chatControlAnyway.value) && runCommand(msg)) { event.cancel(); @@ -103,10 +103,10 @@ public boolean runCommand(String msg) { if (msg.isEmpty()) { return this.runCommand("help"); } - Tuple> pair = CommandManager.expand(msg); - String command = pair.getA(); - String rest = msg.substring(pair.getA().length()); - ArgConsumer argc = new ArgConsumer(this.manager, pair.getB()); + Pair> pair = CommandManager.expand(msg); + String command = pair.getFirst(); + String rest = msg.substring(pair.getFirst().length()); + ArgConsumer argc = new ArgConsumer(this.manager, pair.getSecond()); if (!argc.hasAny()) { Settings.Setting setting = settings.byLowerName.get(command.toLowerCase(Locale.US)); if (setting != null) { @@ -123,7 +123,7 @@ public boolean runCommand(String msg) { if (setting.isJavaOnly()) { continue; } - if (setting.getName().equalsIgnoreCase(pair.getA())) { + if (setting.getName().equalsIgnoreCase(pair.getFirst())) { logRanCommand(command, rest); try { this.manager.execute(String.format("set %s %s", setting.getName(), argc.getString())); @@ -134,7 +134,7 @@ public boolean runCommand(String msg) { } // If the command exists, then handle echoing the input - if (this.manager.getCommand(pair.getA()) != null) { + if (this.manager.getCommand(pair.getFirst()) != null) { logRanCommand(command, rest); } diff --git a/src/main/java/baritone/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java index 37d70b42b8..d0b2e9ef5e 100644 --- a/src/main/java/baritone/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -21,8 +21,6 @@ import baritone.api.command.Command; import baritone.api.command.argument.IArgConsumer; import baritone.api.command.exception.CommandException; -import baritone.api.utils.BetterBlockPos; - import java.util.Arrays; import java.util.List; import java.util.stream.Stream; @@ -36,16 +34,7 @@ public RenderCommand(IBaritone baritone) { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); - BetterBlockPos origin = ctx.playerFeet(); - int renderDistance = (ctx.minecraft().options.renderDistance().get() + 1) * 16; - ctx.minecraft().levelRenderer.setBlocksDirty( - origin.x - renderDistance, - ctx.world().getMinY(), - origin.z - renderDistance, - origin.x + renderDistance, - ctx.world().getMaxY(), - origin.z + renderDistance - ); + ctx.minecraft().levelRenderer.resetLevelRenderData(); logDirect("Done"); } diff --git a/src/main/java/baritone/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java index 8712165f14..9e59dbeb47 100644 --- a/src/main/java/baritone/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -30,7 +30,7 @@ import baritone.command.argument.ArgConsumer; import baritone.command.argument.CommandArguments; import baritone.command.defaults.DefaultCommands; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import java.util.List; import java.util.Locale; @@ -79,7 +79,7 @@ public boolean execute(String string) { } @Override - public boolean execute(Tuple> expanded) { + public boolean execute(Pair> expanded) { ExecutionWrapper execution = this.from(expanded); if (execution != null) { execution.execute(); @@ -88,16 +88,16 @@ public boolean execute(Tuple> expanded) { } @Override - public Stream tabComplete(Tuple> expanded) { + public Stream tabComplete(Pair> expanded) { ExecutionWrapper execution = this.from(expanded); return execution == null ? Stream.empty() : execution.tabComplete(); } @Override public Stream tabComplete(String prefix) { - Tuple> pair = expand(prefix, true); - String label = pair.getA(); - List args = pair.getB(); + Pair> pair = expand(prefix, true); + String label = pair.getFirst(); + List args = pair.getSecond(); if (args.isEmpty()) { return new TabCompleteHelper() .addCommands(this.baritone.getCommandManager()) @@ -108,21 +108,21 @@ public Stream tabComplete(String prefix) { } } - private ExecutionWrapper from(Tuple> expanded) { - String label = expanded.getA(); - ArgConsumer args = new ArgConsumer(this, expanded.getB()); + private ExecutionWrapper from(Pair> expanded) { + String label = expanded.getFirst(); + ArgConsumer args = new ArgConsumer(this, expanded.getSecond()); ICommand command = this.getCommand(label); return command == null ? null : new ExecutionWrapper(command, label, args); } - private static Tuple> expand(String string, boolean preserveEmptyLast) { + private static Pair> expand(String string, boolean preserveEmptyLast) { String label = string.split("\\s", 2)[0]; List args = CommandArguments.from(string.substring(label.length()), preserveEmptyLast); - return new Tuple<>(label, args); + return new Pair<>(label, args); } - public static Tuple> expand(String string) { + public static Pair> expand(String string) { return expand(string, false); } diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 8a5359b5bd..963a297297 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -34,7 +34,7 @@ import baritone.utils.BlockStateInterface; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import net.minecraft.world.phys.Vec3; import java.util.*; @@ -125,10 +125,10 @@ public boolean onTick() { } } } - Tuple status = closestPathPos(path); + Pair status = closestPathPos(path); if (possiblyOffPath(status, MAX_DIST_FROM_PATH)) { ticksAway++; - System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getA() + ". Threshold: " + MAX_DIST_FROM_PATH); + System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getFirst() + ". Threshold: " + MAX_DIST_FROM_PATH); if (ticksAway > MAX_TICKS_AWAY) { logDebug("Too far away from path for too long, cancelling path"); cancel(); @@ -252,7 +252,7 @@ public boolean onTick() { return canCancel; // movement is in progress, but if it reports cancellable, PathingBehavior is good to cut onto the next path } - private Tuple closestPathPos(IPath path) { + private Pair closestPathPos(IPath path) { double best = -1; BlockPos bestPos = null; for (IMovement movement : path.movements()) { @@ -264,7 +264,7 @@ private Tuple closestPathPos(IPath path) { } } } - return new Tuple<>(best, bestPos); + return new Pair<>(best, bestPos); } private boolean shouldPause() { @@ -300,8 +300,8 @@ private boolean shouldPause() { return positions.contains(ctx.playerFeet()); } - private boolean possiblyOffPath(Tuple status, double leniency) { - double distanceFromPath = status.getA(); + private boolean possiblyOffPath(Pair status, double leniency) { + double distanceFromPath = status.getFirst(); if (distanceFromPath > leniency) { // when we're midair in the middle of a fall, we're very far from both the beginning and the end, but we aren't actually off path if (path.movements().get(pathPosition) instanceof MovementFall) { @@ -451,9 +451,9 @@ private boolean shouldSprintNextTick() { } } if (current instanceof MovementFall) { - Tuple data = overrideFall((MovementFall) current); + Pair data = overrideFall((MovementFall) current); if (data != null) { - BetterBlockPos fallDest = new BetterBlockPos(data.getB()); + BetterBlockPos fallDest = new BetterBlockPos(data.getSecond()); if (!path.positions().contains(fallDest)) { throw new IllegalStateException(String.format( "Fall override at %s %s %s returned illegal destination %s %s %s", @@ -466,7 +466,7 @@ private boolean shouldSprintNextTick() { return true; } clearKeys(); - behavior.baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), data.getA(), ctx.playerRotations()), false); + behavior.baritone.getLookBehavior().updateTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), data.getFirst(), ctx.playerRotations()), false); behavior.baritone.getInputOverrideHandler().setInputForceState(Input.MOVE_FORWARD, true); return true; } @@ -474,7 +474,7 @@ private boolean shouldSprintNextTick() { return false; } - private Tuple overrideFall(MovementFall movement) { + private Pair overrideFall(MovementFall movement) { Vec3i dir = movement.getDirection(); if (dir.getY() < -3) { return null; @@ -508,7 +508,7 @@ private Tuple overrideFall(MovementFall movement) { return null; // no valid extension exists } double len = i - pathPosition - 0.4; - return new Tuple<>( + return new Pair<>( new Vec3(flatDir.getX() * len + movement.getDest().x + 0.5, movement.getDest().y, flatDir.getZ() * len + movement.getDest().z + 0.5), movement.getDest().offset(flatDir.getX() * (i - pathPosition), 0, flatDir.getZ() * (i - pathPosition))); } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 83356d782d..8104acae95 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -46,7 +46,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; @@ -203,10 +203,10 @@ private ISchematic applyMapArtAndSelection(Vec3i origin, IStaticSchematic parsed @Override public void buildOpenSchematic() { if (SchematicaHelper.isSchematicaPresent()) { - Optional> schematic = SchematicaHelper.getOpenSchematic(); + Optional> schematic = SchematicaHelper.getOpenSchematic(); if (schematic.isPresent()) { - IStaticSchematic raw = schematic.get().getA(); - BlockPos origin = schematic.get().getB(); + IStaticSchematic raw = schematic.get().getFirst(); + BlockPos origin = schematic.get().getSecond(); ISchematic schem = applyMapArtAndSelection(origin, raw); this.build(raw.toString(), schem, origin); } else { @@ -222,10 +222,10 @@ public void buildOpenLitematic(int i) { if (LitematicaHelper.isLitematicaPresent()) { //if java.lang.NoSuchMethodError is thrown see comment in SchematicPlacementManager if (LitematicaHelper.hasLoadedSchematic(i)) { - Tuple schematic = LitematicaHelper.getSchematic(i); - Vec3i correctedOrigin = schematic.getB(); - ISchematic schematic2 = applyMapArtAndSelection(correctedOrigin, schematic.getA()); - build(schematic.getA().toString(), schematic2, correctedOrigin); + Pair schematic = LitematicaHelper.getSchematic(i); + Vec3i correctedOrigin = schematic.getSecond(); + ISchematic schematic2 = applyMapArtAndSelection(correctedOrigin, schematic.getFirst()); + build(schematic.getFirst().toString(), schematic2, correctedOrigin); } else { logDirect(String.format("List of placements has no entry %s", i + 1)); } @@ -266,7 +266,7 @@ public BlockState placeAt(int x, int y, int z, BlockState current) { return state; } - private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { + private Optional> toBreakNearPlayer(BuilderCalculationContext bcc) { BetterBlockPos center = ctx.playerFeet(); BetterBlockPos pathStart = baritone.getPathingBehavior().pathStart(); for (int dx = -5; dx <= 5; dx++) { @@ -287,7 +287,7 @@ private Optional> toBreakNearPlayer(BuilderCalcu BetterBlockPos pos = new BetterBlockPos(x, y, z); Optional rot = RotationUtils.reachable(ctx, pos, ctx.playerController().getBlockReachDistance()); if (rot.isPresent()) { - return Optional.of(new Tuple<>(pos, rot.get())); + return Optional.of(new Pair<>(pos, rot.get())); } } } @@ -531,12 +531,12 @@ public int lengthZ() { trim(); } - Optional> toBreak = toBreakNearPlayer(bcc); + Optional> toBreak = toBreakNearPlayer(bcc); if (toBreak.isPresent() && isSafeToCancel && ctx.player().onGround()) { // we'd like to pause to break this block // only change look direction if it's safe (don't want to fuck up an in progress parkour for example - Rotation rot = toBreak.get().getB(); - BetterBlockPos pos = toBreak.get().getA(); + Rotation rot = toBreak.get().getSecond(); + BetterBlockPos pos = toBreak.get().getFirst(); baritone.getLookBehavior().updateTarget(rot, true); MovementHelper.switchToBestToolFor(ctx, bcc.get(pos)); if (ctx.player().isCrouching()) { diff --git a/src/main/java/baritone/process/ElytraProcess.java b/src/main/java/baritone/process/ElytraProcess.java index b3420a0d56..25c322efc5 100644 --- a/src/main/java/baritone/process/ElytraProcess.java +++ b/src/main/java/baritone/process/ElytraProcess.java @@ -186,7 +186,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } if (ctx.player().isFallFlying() && this.state != State.LANDING && (this.behavior.pathManager.isComplete() || safetyLanding)) { final BetterBlockPos last = this.behavior.pathManager.path.getLast(); - if (last != null && (ctx.player().position().distanceToSqr(last.getCenter()) < (48 * 48) || safetyLanding) && (!goingToLandingSpot || (safetyLanding && this.landingSpot == null))) { + if (last != null && (ctx.player().position().distanceToSqr(Vec3.atCenterOf(last)) < (48 * 48) || safetyLanding) && (!goingToLandingSpot || (safetyLanding && this.landingSpot == null))) { if (this.landingSearchState == null) { logDirect("Path complete, searching for safe landing spot..."); } @@ -202,7 +202,7 @@ public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { } } - if (last != null && ctx.player().position().distanceToSqr(last.getCenter()) < 1) { + if (last != null && ctx.player().position().distanceToSqr(Vec3.atCenterOf(last)) < 1) { if (Baritone.settings().notificationOnPathComplete.value && !reachedGoal) { logNotification("Pathing complete", false); } diff --git a/src/main/java/baritone/process/elytra/BuildLimitPathFinder.java b/src/main/java/baritone/process/elytra/BuildLimitPathFinder.java index e074f0b809..ff70d3b1f3 100644 --- a/src/main/java/baritone/process/elytra/BuildLimitPathFinder.java +++ b/src/main/java/baritone/process/elytra/BuildLimitPathFinder.java @@ -22,7 +22,7 @@ import baritone.api.utils.IPlayerContext; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.levelgen.Heightmap; @@ -62,7 +62,7 @@ public BuildLimitPathFinder(IPlayerContext ctx, NetherPathfinderContext netherCt * @param maxPathSize Maximum number of nodes in the returned path * @return A tuple containing the path as a list of BetterBlockPos and a boolean indicating if the path is complete */ - public Tuple, Boolean> generateDirectPath(BetterBlockPos start, BetterBlockPos destination, int bufferDistance, int maxPathSize) { + public Pair, Boolean> generateDirectPath(BetterBlockPos start, BetterBlockPos destination, int bufferDistance, int maxPathSize) { final LinkedList path = new LinkedList<>(); final int stepDistance = 32; @@ -80,10 +80,10 @@ public Tuple, Boolean> generateDirectPath(BetterBlockPos st if(remainingDistanceSq <= bufferDistance * bufferDistance) { // We are within the buffer distance, so we can stop here - return new Tuple<>(path, true); + return new Pair<>(path, true); } else if (remainingDistance <= stepDistance) { path.add(destinationFixed); - return new Tuple<>(path, true); + return new Pair<>(path, true); } double stepRatio = stepDistance / remainingDistance; @@ -94,7 +94,7 @@ public Tuple, Boolean> generateDirectPath(BetterBlockPos st path.add(cur); } - return new Tuple<>(path, false); + return new Pair<>(path, false); } /** @@ -103,7 +103,7 @@ public Tuple, Boolean> generateDirectPath(BetterBlockPos st * @param destination * @return A tuple containing the path that transitions above build limit and a boolean indicating if a transition was found */ - public Tuple,Boolean> generateTransitionUp(BetterBlockPos start, BetterBlockPos destination) { + public Pair,Boolean> generateTransitionUp(BetterBlockPos start, BetterBlockPos destination) { final double deltaX = destination.getX() - start.getX(); final double deltaZ = destination.getZ() - start.getZ(); final double distance = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ); @@ -117,7 +117,7 @@ public Tuple,Boolean> generateTransitionUp(BetterBlockPos s final ChunkPos startChunk = new ChunkPos(start.x >> 4, start.z >> 4); if(!isSkyClear(startChunk, start.y)) { - return new Tuple<>(new LinkedList<>(), false); + return new Pair<>(new LinkedList<>(), false); } LinkedList path = new LinkedList<>(); @@ -134,7 +134,7 @@ public Tuple,Boolean> generateTransitionUp(BetterBlockPos s path.add(next); } - return new Tuple<>(path, true); + return new Pair<>(path, true); } /** @@ -142,18 +142,18 @@ public Tuple,Boolean> generateTransitionUp(BetterBlockPos s * @param start * @return A tuple containing the path (single point) and a boolean indicating if a transition point was found */ - public Tuple,Boolean> generateTransitionDown(BetterBlockPos start) { + public Pair,Boolean> generateTransitionDown(BetterBlockPos start) { final int netherMaxHeight = netherCtx.getMaxHeight() + playerCtx.world().getMinY() - 1; final ChunkPos startChunk = new ChunkPos(start.x >> 4, start.z >> 4); LinkedList path = new LinkedList<>(); if(!isSkyClear(new ChunkPos(start.x >> 4, start.z >> 4), netherMaxHeight-16)) { - return new Tuple<>(new LinkedList<>(), false); + return new Pair<>(new LinkedList<>(), false); } path.add(new BetterBlockPos(startChunk.getMiddleBlockPosition(netherMaxHeight-8))); - return new Tuple<>(path, true); + return new Pair<>(path, true); } public boolean isSkyClear(ChunkPos pos, int y) { @@ -188,7 +188,7 @@ public CompletableFuture pathFindAsync(BlockPos src, BlockPos d if(srcAboveSupportedHeight && dstAboveSupportedHeight) { var path = generateDirectPath(new BetterBlockPos(src), new BetterBlockPos(dst), 0, maxDirectPathSize); - return CompletableFuture.completedFuture(new UnpackedSegment(path.getA().stream(), path.getB())); + return CompletableFuture.completedFuture(new UnpackedSegment(path.getFirst().stream(), path.getSecond())); } if(isLongDistance) { @@ -196,23 +196,23 @@ public CompletableFuture pathFindAsync(BlockPos src, BlockPos d var directPath = generateDirectPath(new BetterBlockPos(src), new BetterBlockPos(dst), (int)maxDistance, maxDirectPathSize); return CompletableFuture.completedFuture( new UnpackedSegment( - directPath.getA().stream(), - dstAboveSupportedHeight ? directPath.getB() : false + directPath.getFirst().stream(), + dstAboveSupportedHeight ? directPath.getSecond() : false ) ); } else { var transition = generateTransitionUp(new BetterBlockPos(src), new BetterBlockPos(dst)); - var path = transition.getA(); - var success = transition.getB(); + var path = transition.getFirst(); + var success = transition.getSecond(); if(success) { var directPath = generateDirectPath(path.get(path.size()-1), new BetterBlockPos(dst), (int)maxDistance, maxDirectPathSize); - path.addAll(directPath.getA()); + path.addAll(directPath.getFirst()); return CompletableFuture.completedFuture( new UnpackedSegment( path.stream(), - dstAboveSupportedHeight? directPath.getB() : false + dstAboveSupportedHeight? directPath.getSecond() : false ) ); } @@ -230,13 +230,13 @@ public CompletableFuture pathFindAsync(BlockPos src, BlockPos d } else { if(srcAboveSupportedHeight) { var transition = generateTransitionDown(new BetterBlockPos(src)); - List path = transition.getA(); - boolean success = transition.getB(); + List path = transition.getFirst(); + boolean success = transition.getSecond(); if(!success) { BetterBlockPos newDest = distanceXZ > 32 ? new BetterBlockPos(dst) : new BetterBlockPos(dst.getX(), playerCtx.world().getMaxY(), dst.getZ()); var directPath = generateDirectPath(new BetterBlockPos(src), newDest, 0, 2); - return CompletableFuture.completedFuture(new UnpackedSegment(directPath.getA().stream(), directPath.getB())); + return CompletableFuture.completedFuture(new UnpackedSegment(directPath.getFirst().stream(), directPath.getSecond())); } return CompletableFuture.supplyAsync(() -> { @@ -249,13 +249,13 @@ public CompletableFuture pathFindAsync(BlockPos src, BlockPos d if(dstAboveSupportedHeight) { var transition = generateTransitionUp(new BetterBlockPos(src), new BetterBlockPos(dst)); - var path = transition.getA(); - var success = transition.getB(); + var path = transition.getFirst(); + var success = transition.getSecond(); if(success) { var directPath = generateDirectPath(path.get(path.size() - 1), new BetterBlockPos(dst), 0, maxDirectPathSize); - path.addAll(directPath.getA()); - return CompletableFuture.completedFuture(new UnpackedSegment(path.stream(), directPath.getB())); + path.addAll(directPath.getFirst()); + return CompletableFuture.completedFuture(new UnpackedSegment(path.stream(), directPath.getSecond())); } return netherCtx.pathFindAsync(src, new BetterBlockPos(dst.getX(), netherMaxHeight, dst.getZ())); diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index ca08fc15c4..a4e766130d 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -264,7 +264,7 @@ public void pathNextSegment(final int afterIncl) { final Throwable cause = ex.getCause(); if (cause instanceof PathCalculationException) { logDirect("Failed to compute next segment"); - if (ctx.player().distanceToSqr(pathStart.getCenter()) < 16 * 16) { + if (ctx.player().distanceToSqr(Vec3.atCenterOf(pathStart)) < 16 * 16) { logVerbose("Player is near the segment start, therefore repeating this calculation is pointless. Marking as complete"); completePath = true; } diff --git a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java index 280366d980..af83c010fb 100644 --- a/src/main/java/baritone/process/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/process/elytra/NetherPathfinderContext.java @@ -47,13 +47,13 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import static net.minecraft.world.level.chunk.LevelChunkSection.SECTION_SIZE; - /** * @author Brady */ public final class NetherPathfinderContext implements IElytraPathFinder { + private static final int SECTION_SIZE = 16 * 16 * 16; + private static final Unsafe UNSAFE; static { try { diff --git a/src/main/java/baritone/utils/IRenderer.java b/src/main/java/baritone/utils/IRenderer.java index 1c9b639854..f254b916f7 100644 --- a/src/main/java/baritone/utils/IRenderer.java +++ b/src/main/java/baritone/utils/IRenderer.java @@ -20,95 +20,22 @@ import baritone.api.BaritoneAPI; import baritone.api.Settings; import baritone.utils.accessor.IEntityRenderManager; -import baritone.utils.accessor.IRenderPipelines; -import baritone.utils.accessor.IRenderType; -import com.mojang.blaze3d.pipeline.BlendFunction; -import com.mojang.blaze3d.pipeline.ColorTargetState; -import com.mojang.blaze3d.pipeline.DepthStencilState; -import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.platform.CompareOp; -import com.mojang.blaze3d.platform.DestFactor; -import com.mojang.blaze3d.platform.SourceFactor; +import com.mojang.blaze3d.PrimitiveTopology; import com.mojang.blaze3d.vertex.*; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.renderer.blockentity.BeaconRenderer; -import net.minecraft.client.renderer.rendertype.RenderSetup; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.renderer.rendertype.RenderTypes; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.Identifier; -import net.minecraft.util.Util; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import java.awt.*; -import java.util.function.BiFunction; public interface IRenderer { - Tesselator tessellator = Tesselator.getInstance(); IEntityRenderManager renderManager = (IEntityRenderManager) Minecraft.getInstance().getEntityRenderDispatcher(); Settings settings = BaritoneAPI.getSettings(); - RenderPipeline.Snippet BARITONE_LINES_SNIPPET = RenderPipeline.builder(((IRenderPipelines) new RenderPipelines()).getLinesSnippet()) - .withColorTargetState(new ColorTargetState(new BlendFunction( - SourceFactor.SRC_ALPHA, - DestFactor.ONE_MINUS_SRC_ALPHA, - SourceFactor.ONE, - DestFactor.ZERO - ))) - .withDepthStencilState(new DepthStencilState(CompareOp.LESS_THAN_OR_EQUAL, false)) - .withCull(false) - .buildSnippet(); - - RenderPipeline.Snippet BARITONE_BEACON_BEAM_SNIPPET = RenderPipeline.builder(((IRenderPipelines) new RenderPipelines()).getMatricesFogSnippet()) - .withVertexShader("core/rendertype_beacon_beam") - .withFragmentShader("core/rendertype_beacon_beam") - .withSampler("Sampler0") - .withVertexFormat(DefaultVertexFormat.BLOCK, VertexFormat.Mode.QUADS) - .buildSnippet(); - - RenderPipeline BEACON_BEAM_OPAQUE = ((IRenderPipelines) new RenderPipelines()).baritone$registerPipeline(RenderPipeline.builder(BARITONE_BEACON_BEAM_SNIPPET) - .withLocation("pipeline/baritone_beacon_beam_opaque") - .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) - .withCull(true) - .build()); - - RenderPipeline BEACON_BEAM_TRANSLUCENT = ((IRenderPipelines) new RenderPipelines()).baritone$registerPipeline(RenderPipeline.builder(BARITONE_BEACON_BEAM_SNIPPET) - .withLocation("pipeline/baritone_beacon_beam_translucent") - .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) - .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) - .withCull(true) - .build()); - - RenderType linesWithDepthRenderType = ((IRenderType) RenderTypes.lines()).createRenderType( - "renderType/baritone_lines_with_depth", - RenderSetup.builder(RenderPipeline.builder(BARITONE_LINES_SNIPPET) - .withLocation("pipelines/baritone_lines_with_depth") - .withDepthStencilState(new DepthStencilState(CompareOp.LESS_THAN_OR_EQUAL, false)) - .build()) - .bufferSize(256) - .createRenderSetup() - ); - RenderType linesNoDepthRenderType = ((IRenderType) RenderTypes.lines()).createRenderType( - "renderType/baritone_lines_no_depth", - RenderSetup.builder(RenderPipeline.builder(BARITONE_LINES_SNIPPET) - .withLocation("pipelines/baritone_lines_no_depth") - .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) - .build()) - .bufferSize(256) - .createRenderSetup() - ); - - - BiFunction BEACON_BEAM = Util.memoize( - (identifier, boolean_) -> ((IRenderType) RenderTypes.beaconBeam(BeaconRenderer.BEAM_LOCATION, boolean_)).createRenderType( - boolean_ ? "renderType/baritone_beacon_beam_translucent" : "renderType/baritone_beacon_beam_opaque", - RenderSetup.builder(boolean_ ? BEACON_BEAM_TRANSLUCENT : BEACON_BEAM_OPAQUE) - .withTexture("Sampler0", identifier) - .sortOnUpload() - .createRenderSetup()) - ); float[] color = new float[]{1.0F, 1.0F, 1.0F, 255.0F}; @@ -122,7 +49,7 @@ static void glColor(Color color, float alpha) { static BufferBuilder startLines(Color color, float alpha) { glColor(color, alpha); - return tessellator.begin(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL_LINE_WIDTH); + return new BufferBuilder(new ByteBufferBuilder(256), PrimitiveTopology.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL_LINE_WIDTH); } static BufferBuilder startLines(Color color) { @@ -130,24 +57,20 @@ static BufferBuilder startLines(Color color) { } static void endLines(BufferBuilder bufferBuilder, boolean ignoredDepth) { - MeshData meshData = bufferBuilder.build(); - if (meshData != null) { - if (ignoredDepth) { - linesNoDepthRenderType.draw(meshData); - } else { - linesWithDepthRenderType.draw(meshData); - } + // Minecraft 26.2 removed immediate RenderType drawing. Keep vertex generation + // valid and release it until this renderer is moved into the submit-node pass. + try (MeshData ignored = bufferBuilder.build()) { + // Rendering is intentionally disabled; core pathing remains functional. } } static BufferBuilder startBlockQuads() { - return tessellator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + return new BufferBuilder(new ByteBufferBuilder(256), PrimitiveTopology.QUADS, DefaultVertexFormat.BLOCK); } static void endBuffer(BufferBuilder bufferBuilder, RenderType renderType) { - MeshData meshData = bufferBuilder.build(); - if (meshData != null) { - renderType.draw(meshData); + try (MeshData ignored = bufferBuilder.build()) { + // See endLines: submission must occur during Minecraft's render graph. } } @@ -231,10 +154,10 @@ static void emitTexturedVertex(BufferBuilder bufferBuilder, PoseStack.Pose pose, } static RenderType beaconBeam(Identifier identifier, boolean bl) { - return BEACON_BEAM.apply(identifier, bl); + return RenderTypes.beaconBeam(identifier, bl); } static RenderType beaconBeam(Identifier identifier, boolean bl, boolean ignoreDepth) { - return ignoreDepth ? beaconBeam(identifier, bl) : RenderTypes.beaconBeam(identifier, bl); + return RenderTypes.beaconBeam(identifier, bl); } } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 95506ab5ce..04b6375592 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -74,8 +74,8 @@ public static void render(RenderEvent event, PathingBehavior behavior) { if (ctx.world() == null) { return; } - if (ctx.minecraft().screen instanceof GuiClick) { - ((GuiClick) ctx.minecraft().screen).onRender(event.getModelViewStack(), event.getProjectionMatrix()); + if (ctx.minecraft().gui.screen() instanceof GuiClick guiClick) { + guiClick.onRender(event.getModelViewStack(), event.getProjectionMatrix()); } final float partialTicks = event.getPartialTicks(); diff --git a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java index febe985d23..324a0bb776 100644 --- a/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/litematica/LitematicaHelper.java @@ -28,7 +28,7 @@ import fi.dy.masa.litematica.world.WorldSchematic; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; @@ -93,7 +93,7 @@ private static Vec3i transform(Vec3i in, Mirror mirror, Rotation rotation) { * @param i index of the Schematic in the schematic placement list. * @return The transformed schematic and the position of its minimum corner */ - public static Tuple getSchematic(int i) { + public static Pair getSchematic(int i) { SchematicPlacement placement = getPlacement(i); int minX = Integer.MAX_VALUE; int minY = Integer.MAX_VALUE; @@ -129,7 +129,7 @@ public static Tuple getSchematic(int i) { Vec3i pos = entry.getKey().offset(-minX, -minY, -minZ); composite.put(entry.getValue(), pos.getX(), pos.getY(), pos.getZ()); } - return new Tuple<>(composite, placement.getOrigin().offset(minX, minY, minZ)); + return new Pair<>(composite, placement.getOrigin().offset(minX, minY, minZ)); } private static class LitematicaPlacementSchematic extends CompositeSchematic implements IStaticSchematic { diff --git a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java index 35b11c8e1d..7decc408d0 100644 --- a/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java +++ b/src/main/java/baritone/utils/schematic/schematica/SchematicaHelper.java @@ -21,7 +21,7 @@ import com.github.lunatrius.schematica.Schematica; import com.github.lunatrius.schematica.proxy.ClientProxy; import net.minecraft.core.BlockPos; -import net.minecraft.util.Tuple; +import com.mojang.datafixers.util.Pair; import java.util.Optional; public enum SchematicaHelper { @@ -36,9 +36,9 @@ public static boolean isSchematicaPresent() { } } - public static Optional> getOpenSchematic() { + public static Optional> getOpenSchematic() { return Optional.ofNullable(ClientProxy.schematic) - .map(world -> new Tuple<>(new SchematicAdapter(world), world.position)); + .map(world -> new Pair<>(new SchematicAdapter(world), world.position)); } }