diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 31d1fcecc..fb68c4d04 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -19,10 +19,7 @@ package baritone.cache; import baritone.pathing.movement.MovementHelper; import baritone.utils.pathing.PathingBlockType; -import net.minecraft.block.Block; -import net.minecraft.block.BlockDoublePlant; -import net.minecraft.block.BlockFlower; -import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; @@ -95,7 +92,8 @@ public final class ChunkPacker { IBlockState[] blocks = new IBlockState[256]; for (int z = 0; z < 16; z++) { - https://www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html + https: +//www.ibm.com/developerworks/library/j-perry-writing-good-java-code/index.html for (int x = 0; x < 16; x++) { for (int y = 255; y >= 0; y--) { int index = CachedChunk.getPositionIndex(x, y, z); @@ -152,7 +150,7 @@ public final class ChunkPacker { // however, this failed in the nether when you were near a nether fortress // because fences check their adjacent blocks in the world for their fence connection status to determine AABB shape // this caused a nullpointerexception when we saved chunks on unload, because they were unable to check their neighbors - if (MovementHelper.isAir(block) || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { + if (block instanceof BlockAir || block instanceof BlockTallGrass || block instanceof BlockDoublePlant || block instanceof BlockFlower) { return PathingBlockType.AIR; } diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 3e2052bb5..bd238a550 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -76,7 +76,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (isAir(block)) { // early return for most common case + if (block instanceof BlockAir) { // early return for most common case return true; } if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.COBWEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block == Blocks.BUBBLE_COLUMN || block instanceof BlockShulkerBox || block instanceof BlockSlab) { @@ -152,7 +152,7 @@ public interface MovementHelper extends ActionCosts, Helper { static boolean fullyPassable(IBlockState state) { Block block = state.getBlock(); - if (isAir(block)) { // early return for most common case + if (block instanceof BlockAir) { // early return for most common case return true; } // exceptions - blocks that are isPassable true, but we can't actually jump through @@ -188,7 +188,7 @@ public interface MovementHelper extends ActionCosts, Helper { * } */ Block block = state.getBlock(); - if (isAir(block)) { + if (block instanceof BlockAir) { // early return for common cases hehe return true; } @@ -276,7 +276,7 @@ public interface MovementHelper extends ActionCosts, Helper { */ static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) { Block block = state.getBlock(); - if (isAir(block) || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { + if (block instanceof BlockAir || block == Blocks.MAGMA_BLOCK || block == Blocks.BUBBLE_COLUMN) { // early return for most common case (air) // plus magma, which is a normal cube but it hurts you return false; @@ -389,10 +389,6 @@ public interface MovementHelper extends ActionCosts, Helper { return 0; // we won't actually mine it, so don't check fallings above } - static boolean isAir(Block block) { - return block == Blocks.AIR || block == Blocks.CAVE_AIR || block == Blocks.VOID_AIR; - } - static boolean isBottomSlab(IBlockState state) { return state.getBlock() instanceof BlockSlab && state.get(BlockSlab.TYPE) == SlabType.BOTTOM; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index d90e2a2c1..7fee89217 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -85,7 +85,7 @@ public class MovementPillar extends Movement { if (placeCost >= COST_INF) { return COST_INF; } - if (fromDown.getBlock() == Blocks.AIR) { + if (fromDown.getBlock() instanceof BlockAir) { placeCost += 0.1; // slightly (1/200th of a second) penalize pillaring on what's currently air } } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index a9e083b4a..725cdd4e1 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -35,6 +35,7 @@ import baritone.utils.BlockStateInterface; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.AirSchematic; import baritone.utils.schematic.Schematic; +import net.minecraft.block.BlockAir; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; @@ -123,7 +124,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro return null; } IBlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ()); - if (state.getBlock() == Blocks.AIR) { + if (state.getBlock() instanceof BlockAir) { return null; } return state; @@ -143,7 +144,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro continue; // irrelevant } IBlockState curr = bcc.bsi.get0(x, y, z); - if (curr.getBlock() != Blocks.AIR && !valid(curr, desired)) { + if (!(curr.getBlock() instanceof BlockAir) && !valid(curr, desired)) { BetterBlockPos pos = new BetterBlockPos(x, y, z); Optional rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); if (rot.isPresent()) { @@ -184,7 +185,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro } IBlockState curr = bcc.bsi.get0(x, y, z); if (MovementHelper.isReplacable(x, y, z, curr, bcc.bsi) && !valid(curr, desired)) { - if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() == Blocks.AIR) { + if (dy == 1 && bcc.bsi.get0(x, y + 1, z).getBlock() instanceof BlockAir) { continue; } desirableOnHotbar.add(desired); @@ -445,8 +446,8 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro } private Goal assemble(BuilderCalculationContext bcc, List approxPlacable) { - List placable = incorrectPositions.stream().filter(pos -> bcc.bsi.get0(pos).getBlock() == Blocks.AIR && approxPlacable.contains(bcc.getSchematic(pos.x, pos.y, pos.z))).collect(Collectors.toList()); - Goal[] toBreak = incorrectPositions.stream().filter(pos -> bcc.bsi.get0(pos).getBlock() != Blocks.AIR).map(GoalBreak::new).toArray(Goal[]::new); + List placable = incorrectPositions.stream().filter(pos -> bcc.bsi.get0(pos).getBlock() instanceof BlockAir && approxPlacable.contains(bcc.getSchematic(pos.x, pos.y, pos.z))).collect(Collectors.toList()); + Goal[] toBreak = incorrectPositions.stream().filter(pos -> !(bcc.bsi.get0(pos).getBlock() instanceof BlockAir)).map(GoalBreak::new).toArray(Goal[]::new); Goal[] toPlace = placable.stream().filter(pos -> !placable.contains(pos.down()) && !placable.contains(pos.down(2))).map(pos -> placementgoal(pos, bcc)).toArray(Goal[]::new); if (toPlace.length != 0) { @@ -502,10 +503,10 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro } public Goal placementgoal(BlockPos pos, BuilderCalculationContext bcc) { - if (ctx.world().getBlockState(pos).getBlock() != Blocks.AIR) { + if (!(ctx.world().getBlockState(pos).getBlock() instanceof BlockAir)) { return new GoalPlace(pos); } - boolean allowSameLevel = ctx.world().getBlockState(pos.up()).getBlock() != Blocks.AIR; + boolean allowSameLevel = !(ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir); for (EnumFacing facing : Movement.HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP) { if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ()))) { return new GoalAdjacent(pos, allowSameLevel); @@ -580,8 +581,14 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro } public boolean valid(IBlockState current, IBlockState desired) { + if (desired == null) { + return true; + } + if (current.getBlock() instanceof BlockAir && desired.getBlock() instanceof BlockAir) { + return true; + } // TODO more complicated comparison logic I guess - return desired == null || current.equals(desired); + return current.equals(desired); } public class BuilderCalculationContext extends CalculationContext { @@ -619,7 +626,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro IBlockState sch = getSchematic(x, y, z); if (sch != null) { // TODO this can return true even when allowPlace is off.... is that an issue? - if (sch.getBlock() == Blocks.AIR) { + if (sch.getBlock() instanceof BlockAir) { // we want this to be air, but they're asking if they can place here // this won't be a schematic block, this will be a throwaway return placeBlockCost * 2; // we're going to have to break it eventually @@ -652,7 +659,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro } IBlockState sch = getSchematic(x, y, z); if (sch != null) { - if (sch.getBlock() == Blocks.AIR) { + if (sch.getBlock() instanceof BlockAir) { // it should be air // regardless of current contents, we can break it return 1; diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 598ecbba5..7c4068bce 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -32,6 +32,7 @@ import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; @@ -183,8 +184,8 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro } // Here, BlockStateInterface is used because the position may be in a cached chunk (the targeted block is one that is kept track of) - boolean upwardGoal = locs.contains(loc.up()) || (Baritone.settings().internalMiningAirException.value && MovementHelper.isAir(BlockStateInterface.getBlock(ctx, loc.up()))); - boolean downwardGoal = locs.contains(loc.down()) || (Baritone.settings().internalMiningAirException.value && MovementHelper.isAir(BlockStateInterface.getBlock(ctx, loc.down()))); + boolean upwardGoal = locs.contains(loc.up()) || (Baritone.settings().internalMiningAirException.value && BlockStateInterface.getBlock(ctx, loc.up()) instanceof BlockAir); + boolean downwardGoal = locs.contains(loc.down()) || (Baritone.settings().internalMiningAirException.value && BlockStateInterface.getBlock(ctx, loc.down()) instanceof BlockAir); return upwardGoal == downwardGoal ? new GoalTwoBlocks(loc) : upwardGoal ? new GoalBlock(loc) : new GoalBlock(loc.down()); } diff --git a/src/main/java/baritone/utils/schematic/MapArtSchematic.java b/src/main/java/baritone/utils/schematic/MapArtSchematic.java index 1be131952..296401ee9 100644 --- a/src/main/java/baritone/utils/schematic/MapArtSchematic.java +++ b/src/main/java/baritone/utils/schematic/MapArtSchematic.java @@ -17,8 +17,8 @@ package baritone.utils.schematic; +import net.minecraft.block.BlockAir; import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import java.util.OptionalInt; @@ -36,7 +36,7 @@ public class MapArtSchematic extends Schematic { for (int z = 0; z < lengthZ; z++) { IBlockState[] column = states[x][z]; - OptionalInt lowestBlockY = lastIndexMatching(column, block -> block != Blocks.AIR); + OptionalInt lowestBlockY = lastIndexMatching(column, block -> !(block instanceof BlockAir)); if (lowestBlockY.isPresent()) { heightMap[x][z] = lowestBlockY.getAsInt(); } else {