diff --git a/.github/workflows/gradle_build.yml b/.github/workflows/gradle_build.yml
index 0c8919406..c028d9365 100644
--- a/.github/workflows/gradle_build.yml
+++ b/.github/workflows/gradle_build.yml
@@ -29,6 +29,12 @@ jobs:
- name: Build with Gradle
run: ./gradlew build -Pmod_version="$(git describe --always --tags | cut -c2-)"
+ - name: Build (fabric) with Gradle
+ run: ./gradlew build -Pbaritone.fabric_build
+
+ - name: Build (forge) with Gradle
+ run: ./gradlew build -Pbaritone.forge_build -Ploom.platform=forge
+
- name: Archive Artifacts
uses: actions/upload-artifact@v2
with:
diff --git a/scripts/proguard.pro b/scripts/proguard.pro
index 36aa91d8d..1d6778336 100644
--- a/scripts/proguard.pro
+++ b/scripts/proguard.pro
@@ -50,7 +50,6 @@
#proguard doesnt like it when it cant find our fake schematica classes
-dontwarn baritone.utils.schematic.schematica.**
-
# Keep - Applications. Keep all application classes, along with their 'main'
# methods.
-keepclasseswithmembers public class * {
diff --git a/src/api/java/baritone/api/schematic/FillSchematic.java b/src/api/java/baritone/api/schematic/FillSchematic.java
index a55954961..126501987 100644
--- a/src/api/java/baritone/api/schematic/FillSchematic.java
+++ b/src/api/java/baritone/api/schematic/FillSchematic.java
@@ -18,10 +18,11 @@
package baritone.api.schematic;
import baritone.api.utils.BlockOptionalMeta;
-import java.util.List;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
+import java.util.List;
+
public class FillSchematic extends AbstractSchematic {
private final BlockOptionalMeta bom;
diff --git a/src/launch/java/baritone/launch/mixins/MixinItemTool.java b/src/launch/java/baritone/launch/mixins/MixinItemTool.java
deleted file mode 100644
index c2a30edad..000000000
--- a/src/launch/java/baritone/launch/mixins/MixinItemTool.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.launch.mixins;
-
-import baritone.utils.accessor.IItemTool;
-import net.minecraft.world.item.Tier;
-import net.minecraft.world.item.TieredItem;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-
-@Mixin(TieredItem.class)
-public class MixinItemTool implements IItemTool {
- @Final @Shadow private Tier tier;
-
- @Override
- public int getHarvestLevel() {
- return tier.getLevel();
- }
-
-}
diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json
index d956fa2c8..eb461292f 100644
--- a/src/launch/resources/mixins.baritone.json
+++ b/src/launch/resources/mixins.baritone.json
@@ -17,7 +17,6 @@
"MixinEntity",
"MixinEntityRenderManager",
"MixinItemStack",
- "MixinItemTool",
"MixinLivingEntity",
"MixinLootContext",
"MixinMinecraft",
diff --git a/src/main/java/baritone/behavior/WaypointBehavior.java b/src/main/java/baritone/behavior/WaypointBehavior.java
index e37f15fff..035f1dfd6 100644
--- a/src/main/java/baritone/behavior/WaypointBehavior.java
+++ b/src/main/java/baritone/behavior/WaypointBehavior.java
@@ -28,6 +28,7 @@ import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.HoverEvent;
+import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.BedBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BedPart;
@@ -69,9 +70,9 @@ public class WaypointBehavior extends Behavior {
return;
Waypoint deathWaypoint = new Waypoint("death", Waypoint.Tag.DEATH, ctx.playerFeet());
baritone.getWorldProvider().getCurrentWorld().getWaypoints().addWaypoint(deathWaypoint);
- Component component = Component.literal("Death position saved.");
- component.getStyle()
- .applyFormat(ChatFormatting.WHITE)
+ MutableComponent component = Component.literal("Death position saved.");
+ component.setStyle(component.getStyle()
+ .withColor(ChatFormatting.WHITE)
.withHoverEvent(new HoverEvent(
HoverEvent.Action.SHOW_TEXT,
Component.literal("Click to goto death")
@@ -85,7 +86,7 @@ public class WaypointBehavior extends Behavior {
deathWaypoint.getTag().getName(),
deathWaypoint.getCreationTimestamp()
)
- ));
+ )));
Helper.HELPER.logDirect(component);
}
diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java
index 471809761..d544ac74d 100644
--- a/src/main/java/baritone/cache/ChunkPacker.java
+++ b/src/main/java/baritone/cache/ChunkPacker.java
@@ -133,7 +133,7 @@ public final class ChunkPacker {
return PathingBlockType.AVOID;
}
if (x == 0 || x == 15 || z == 0 || z == 15) {
- Vec3 flow = state.getFluidState().getFlow(chunk.getLevel(), new BlockPos(x + chunk.getPos().x << 4, y, z + chunk.getPos().z << 4));
+ Vec3 flow = state.getFluidState().getFlow(chunk.getLevel(), new BlockPos(x + (chunk.getPos().x << 4), y, z + (chunk.getPos().z << 4)));
if (flow.x != 0.0 || flow.z != 0.0) {
return PathingBlockType.WATER;
}
diff --git a/src/main/java/baritone/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java
index 01b50d67d..b4ba0ce59 100644
--- a/src/main/java/baritone/command/defaults/SelCommand.java
+++ b/src/main/java/baritone/command/defaults/SelCommand.java
@@ -39,12 +39,6 @@ import baritone.api.utils.BlockOptionalMetaLookup;
import baritone.utils.IRenderer;
import baritone.utils.BlockStateInterface;
import baritone.utils.schematic.StaticSchematic;
-import java.awt.*;
-import java.util.*;
-import java.util.List;
-import java.util.function.Function;
-import java.util.stream.Stream;
-
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Vec3i;
@@ -52,6 +46,12 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
public class SelCommand extends Command {
private ISelectionManager manager = baritone.getSelectionManager();
diff --git a/src/main/java/baritone/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java
index 29e443005..ba0bf919e 100644
--- a/src/main/java/baritone/command/defaults/SetCommand.java
+++ b/src/main/java/baritone/command/defaults/SetCommand.java
@@ -28,6 +28,8 @@ import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.api.command.helpers.Paginator;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.utils.SettingsUtil;
+
+import java.awt.*;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
@@ -35,6 +37,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.*;
+import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX;
@@ -79,9 +82,9 @@ public class SetCommand extends Command {
" (%s)",
settingTypeToString(setting)
));
- typeComponent.getStyle().withColor(ChatFormatting.DARK_GRAY);
+ typeComponent.setStyle(typeComponent.getStyle().withColor(ChatFormatting.DARK_GRAY));
MutableComponent hoverComponent = Component.literal("");
- hoverComponent.getStyle().withColor(ChatFormatting.GRAY);
+ hoverComponent.setStyle(hoverComponent.getStyle().withColor(ChatFormatting.GRAY));
hoverComponent.append(setting.getName());
hoverComponent.append(String.format("\nType: %s", settingTypeToString(setting)));
hoverComponent.append(String.format("\n\nValue:\n%s", settingValueToString(setting)));
diff --git a/src/main/java/baritone/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java
index 09c33dade..c0f7814a2 100644
--- a/src/main/java/baritone/command/defaults/WaypointsCommand.java
+++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java
@@ -155,8 +155,8 @@ public class WaypointsCommand extends Command {
ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint);
}
deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).addAll(Arrays.asList(waypoints));
- MutableComponent MutableComponent = Component.literal(String.format("Cleared %d waypoints, click to restore them", waypoints.length));
- MutableComponent.getStyle().withClickEvent(new ClickEvent(
+ MutableComponent textComponent = Component.literal(String.format("Cleared %d waypoints, click to restore them", waypoints.length));
+ textComponent.setStyle(textComponent.getStyle().withClickEvent(new ClickEvent(
ClickEvent.Action.RUN_COMMAND,
String.format(
"%s%s restore @ %s",
@@ -164,8 +164,8 @@ public class WaypointsCommand extends Command {
label,
Stream.of(waypoints).map(wp -> Long.toString(wp.getCreationTimestamp())).collect(Collectors.joining(" "))
)
- ));
- logDirect(MutableComponent);
+ )));
+ logDirect(textComponent);
} else if (action == Action.RESTORE) {
List waypoints = new ArrayList<>();
List deletedWaypoints = this.deletedWaypoints.getOrDefault(baritone.getWorldProvider().getCurrentWorld(), Collections.emptyList());
@@ -259,7 +259,7 @@ public class WaypointsCommand extends Command {
)
)));
MutableComponent recreateComponent = Component.literal("Click to show a command to recreate this waypoint");
- recreateComponent.getStyle().withClickEvent(new ClickEvent(
+ recreateComponent.setStyle(recreateComponent.getStyle().withClickEvent(new ClickEvent(
ClickEvent.Action.SUGGEST_COMMAND,
String.format(
"%s%s save %s %s %s %s %s",
@@ -271,16 +271,16 @@ public class WaypointsCommand extends Command {
waypoint.getLocation().y,
waypoint.getLocation().z
)
- ));
+ )));
MutableComponent backComponent = Component.literal("Click to return to the waypoints list");
- backComponent.getStyle().withClickEvent(new ClickEvent(
+ backComponent.setStyle(backComponent.getStyle().withClickEvent(new ClickEvent(
ClickEvent.Action.RUN_COMMAND,
String.format(
"%s%s list",
FORCE_COMMAND_PREFIX,
label
)
- ));
+ )));
logDirect(deleteComponent);
logDirect(goalComponent);
logDirect(recreateComponent);
@@ -288,8 +288,8 @@ public class WaypointsCommand extends Command {
} else if (action == Action.DELETE) {
ForWaypoints.waypoints(this.baritone).removeWaypoint(waypoint);
deletedWaypoints.computeIfAbsent(baritone.getWorldProvider().getCurrentWorld(), k -> new ArrayList<>()).add(waypoint);
- MutableComponent MutableComponent = Component.literal("That waypoint has successfully been deleted, click to restore it");
- MutableComponent.getStyle().withClickEvent(new ClickEvent(
+ MutableComponent textComponent = Component.literal("That waypoint has successfully been deleted, click to restore it");
+ textComponent.setStyle(textComponent.getStyle().withClickEvent(new ClickEvent(
ClickEvent.Action.RUN_COMMAND,
String.format(
"%s%s restore @ %s",
@@ -297,8 +297,8 @@ public class WaypointsCommand extends Command {
label,
waypoint.getCreationTimestamp()
)
- ));
- logDirect(MutableComponent);
+ )));
+ logDirect(textComponent);
} else if (action == Action.GOAL) {
Goal goal = new GoalBlock(waypoint.getLocation());
baritone.getCustomGoalProcess().setGoal(goal);
diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java
index fd622ae1b..08272cf28 100644
--- a/src/main/java/baritone/pathing/movement/MovementHelper.java
+++ b/src/main/java/baritone/pathing/movement/MovementHelper.java
@@ -157,7 +157,10 @@ public interface MovementHelper extends ActionCosts, Helper {
if (block instanceof CauldronBlock) {
return false;
}
- return state.isPathfindable(bsi.access, bsi.isPassableBlockPos.set(x, y, z), PathComputationType.LAND); // workaround for future compatibility =P
+ // every block that overrides isPassable with anything more complicated than a "return true;" or "return false;"
+ // has already been accounted for above
+ // therefore it's safe to not construct a blockpos from our x, y, z ints and instead just pass null
+ return state.isPathfindable(bsi.access, BlockPos.ZERO, PathComputationType.LAND); // workaround for future compatibility =P
}
/**
diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java
index 1c7809b8d..2f5f0dbcf 100644
--- a/src/main/java/baritone/process/BuilderProcess.java
+++ b/src/main/java/baritone/process/BuilderProcess.java
@@ -65,6 +65,7 @@ import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.VoxelShape;
+
import java.io.File;
import java.io.FileInputStream;
import java.util.*;
@@ -984,7 +985,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
}
BlockState sch = getSchematic(x, y, z, current);
if (sch != null && !Baritone.settings().buildSkipBlocks.value.contains(sch.getBlock())) {
- if (sch.getBlock() == Blocks.AIR) {
+ if (sch.getBlock() instanceof AirBlock) {
// it should be air
// regardless of current contents, we can break it
return 1;
diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java
index 235fe8cb0..88cc5bfa2 100644
--- a/src/main/java/baritone/process/GetToBlockProcess.java
+++ b/src/main/java/baritone/process/GetToBlockProcess.java
@@ -30,13 +30,14 @@ import baritone.api.utils.input.Input;
import baritone.pathing.movement.CalculationContext;
import baritone.pathing.movement.MovementHelper;
import baritone.utils.BaritoneProcessHelper;
-import java.util.*;
import net.minecraft.core.BlockPos;
import net.minecraft.world.inventory.InventoryMenu;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
+import java.util.*;
+
public final class GetToBlockProcess extends BaritoneProcessHelper implements IGetToBlockProcess {
private BlockOptionalMeta gettingTo;
diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java
index 503ffc92c..b99369c96 100644
--- a/src/main/java/baritone/process/MineProcess.java
+++ b/src/main/java/baritone/process/MineProcess.java
@@ -40,6 +40,7 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.FallingBlock;
import net.minecraft.world.level.block.state.BlockState;
+
import java.util.*;
import java.util.stream.Collectors;
diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java
index f5dd500a7..d0a435e1f 100644
--- a/src/main/java/baritone/utils/GuiClick.java
+++ b/src/main/java/baritone/utils/GuiClick.java
@@ -92,12 +92,12 @@ public class GuiClick extends Screen implements Helper {
BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().removeAllSelections();
BaritoneAPI.getProvider().getPrimaryBaritone().getSelectionManager().addSelection(BetterBlockPos.from(clickStart), BetterBlockPos.from(currentMouseOver));
MutableComponent component = Component.literal("Selection made! For usage: " + Baritone.settings().prefix.value + "help sel");
- component.getStyle()
+ component.setStyle(component.getStyle()
.withColor(ChatFormatting.WHITE)
.withClickEvent(new ClickEvent(
ClickEvent.Action.RUN_COMMAND,
FORCE_COMMAND_PREFIX + "help sel"
- ));
+ )));
Helper.HELPER.logDirect(component);
clickStart = null;
} else {
diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java
index 53a88ec30..db7d11b34 100644
--- a/src/main/java/baritone/utils/PathRenderer.java
+++ b/src/main/java/baritone/utils/PathRenderer.java
@@ -271,9 +271,9 @@ public final class PathRenderer implements IRenderer, Helper {
stack,
mc.renderBuffers().bufferSource(),
TEXTURE_BEACON_BEAM,
- partialTicks,
+ settings.renderGoalAnimated.value ? partialTicks : 0,
1.0F,
- player.level.getGameTime(),
+ settings.renderGoalAnimated.value ? player.level.getGameTime() : 0,
0,
256,
color.getColorComponents(null),
diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java
index 69efd7fb0..fa2aee628 100644
--- a/src/main/java/baritone/utils/ToolSet.java
+++ b/src/main/java/baritone/utils/ToolSet.java
@@ -18,14 +18,8 @@
package baritone.utils;
import baritone.Baritone;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Function;
-
-import baritone.utils.accessor.IItemTool;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.world.effect.MobEffects;
-import net.minecraft.world.item.DiggerItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.TieredItem;
@@ -34,6 +28,10 @@ import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+
/**
* A cached list of the best tools on the hotbar for any block
*
@@ -88,7 +86,7 @@ public class ToolSet {
private int getMaterialCost(ItemStack itemStack) {
if (itemStack.getItem() instanceof TieredItem) {
TieredItem tool = (TieredItem) itemStack.getItem();
- return ((IItemTool) tool).getHarvestLevel();
+ return tool.getTier().getLevel();
} else {
return -1;
}
diff --git a/src/main/java/baritone/utils/accessor/IItemTool.java b/src/main/java/baritone/utils/accessor/IItemTool.java
deleted file mode 100644
index 990cb672b..000000000
--- a/src/main/java/baritone/utils/accessor/IItemTool.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.utils.accessor;
-
-public interface IItemTool {
-
- int getHarvestLevel();
-
-}