air is stupid
This commit is contained in:
+4
-6
@@ -19,10 +19,7 @@ package baritone.cache;
|
|||||||
|
|
||||||
import baritone.pathing.movement.MovementHelper;
|
import baritone.pathing.movement.MovementHelper;
|
||||||
import baritone.utils.pathing.PathingBlockType;
|
import baritone.utils.pathing.PathingBlockType;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.*;
|
||||||
import net.minecraft.block.BlockDoublePlant;
|
|
||||||
import net.minecraft.block.BlockFlower;
|
|
||||||
import net.minecraft.block.BlockTallGrass;
|
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
@@ -95,7 +92,8 @@ public final class ChunkPacker {
|
|||||||
IBlockState[] blocks = new IBlockState[256];
|
IBlockState[] blocks = new IBlockState[256];
|
||||||
|
|
||||||
for (int z = 0; z < 16; z++) {
|
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 x = 0; x < 16; x++) {
|
||||||
for (int y = 255; y >= 0; y--) {
|
for (int y = 255; y >= 0; y--) {
|
||||||
int index = CachedChunk.getPositionIndex(x, y, z);
|
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
|
// 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
|
// 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
|
// 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;
|
return PathingBlockType.AIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public interface MovementHelper extends ActionCosts, Helper {
|
|||||||
|
|
||||||
static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) {
|
static boolean canWalkThrough(BlockStateInterface bsi, int x, int y, int z, IBlockState state) {
|
||||||
Block block = state.getBlock();
|
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;
|
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) {
|
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) {
|
static boolean fullyPassable(IBlockState state) {
|
||||||
Block block = state.getBlock();
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
// exceptions - blocks that are isPassable true, but we can't actually jump through
|
// 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();
|
Block block = state.getBlock();
|
||||||
if (isAir(block)) {
|
if (block instanceof BlockAir) {
|
||||||
// early return for common cases hehe
|
// early return for common cases hehe
|
||||||
return true;
|
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) {
|
static boolean canWalkOn(BlockStateInterface bsi, int x, int y, int z, IBlockState state) {
|
||||||
Block block = state.getBlock();
|
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)
|
// early return for most common case (air)
|
||||||
// plus magma, which is a normal cube but it hurts you
|
// plus magma, which is a normal cube but it hurts you
|
||||||
return false;
|
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
|
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) {
|
static boolean isBottomSlab(IBlockState state) {
|
||||||
return state.getBlock() instanceof BlockSlab
|
return state.getBlock() instanceof BlockSlab
|
||||||
&& state.get(BlockSlab.TYPE) == SlabType.BOTTOM;
|
&& state.get(BlockSlab.TYPE) == SlabType.BOTTOM;
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public class MovementPillar extends Movement {
|
|||||||
if (placeCost >= COST_INF) {
|
if (placeCost >= COST_INF) {
|
||||||
return 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
|
placeCost += 0.1; // slightly (1/200th of a second) penalize pillaring on what's currently air
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import baritone.utils.BlockStateInterface;
|
|||||||
import baritone.utils.PathingCommandContext;
|
import baritone.utils.PathingCommandContext;
|
||||||
import baritone.utils.schematic.AirSchematic;
|
import baritone.utils.schematic.AirSchematic;
|
||||||
import baritone.utils.schematic.Schematic;
|
import baritone.utils.schematic.Schematic;
|
||||||
|
import net.minecraft.block.BlockAir;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
@@ -123,7 +124,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
IBlockState state = schematic.desiredState(x - origin.getX(), y - origin.getY(), z - origin.getZ());
|
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 null;
|
||||||
}
|
}
|
||||||
return state;
|
return state;
|
||||||
@@ -143,7 +144,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro
|
|||||||
continue; // irrelevant
|
continue; // irrelevant
|
||||||
}
|
}
|
||||||
IBlockState curr = bcc.bsi.get0(x, y, z);
|
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);
|
BetterBlockPos pos = new BetterBlockPos(x, y, z);
|
||||||
Optional<Rotation> rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance());
|
Optional<Rotation> rot = RotationUtils.reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance());
|
||||||
if (rot.isPresent()) {
|
if (rot.isPresent()) {
|
||||||
@@ -184,7 +185,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro
|
|||||||
}
|
}
|
||||||
IBlockState curr = bcc.bsi.get0(x, y, z);
|
IBlockState curr = bcc.bsi.get0(x, y, z);
|
||||||
if (MovementHelper.isReplacable(x, y, z, curr, bcc.bsi) && !valid(curr, desired)) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
desirableOnHotbar.add(desired);
|
desirableOnHotbar.add(desired);
|
||||||
@@ -445,8 +446,8 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Goal assemble(BuilderCalculationContext bcc, List<IBlockState> approxPlacable) {
|
private Goal assemble(BuilderCalculationContext bcc, List<IBlockState> approxPlacable) {
|
||||||
List<BetterBlockPos> 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());
|
List<BetterBlockPos> 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() != Blocks.AIR).map(GoalBreak::new).toArray(Goal[]::new);
|
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);
|
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) {
|
if (toPlace.length != 0) {
|
||||||
@@ -502,10 +503,10 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Goal placementgoal(BlockPos pos, BuilderCalculationContext bcc) {
|
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);
|
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) {
|
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()))) {
|
if (MovementHelper.canPlaceAgainst(ctx, pos.offset(facing)) && placementPlausible(pos, bcc.getSchematic(pos.getX(), pos.getY(), pos.getZ()))) {
|
||||||
return new GoalAdjacent(pos, allowSameLevel);
|
return new GoalAdjacent(pos, allowSameLevel);
|
||||||
@@ -580,8 +581,14 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean valid(IBlockState current, IBlockState desired) {
|
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
|
// TODO more complicated comparison logic I guess
|
||||||
return desired == null || current.equals(desired);
|
return current.equals(desired);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BuilderCalculationContext extends CalculationContext {
|
public class BuilderCalculationContext extends CalculationContext {
|
||||||
@@ -619,7 +626,7 @@ public class BuilderProcess extends BaritoneProcessHelper implements IBuilderPro
|
|||||||
IBlockState sch = getSchematic(x, y, z);
|
IBlockState sch = getSchematic(x, y, z);
|
||||||
if (sch != null) {
|
if (sch != null) {
|
||||||
// TODO this can return true even when allowPlace is off.... is that an issue?
|
// 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
|
// 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
|
// this won't be a schematic block, this will be a throwaway
|
||||||
return placeBlockCost * 2; // we're going to have to break it eventually
|
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);
|
IBlockState sch = getSchematic(x, y, z);
|
||||||
if (sch != null) {
|
if (sch != null) {
|
||||||
if (sch.getBlock() == Blocks.AIR) {
|
if (sch.getBlock() instanceof BlockAir) {
|
||||||
// it should be air
|
// it should be air
|
||||||
// regardless of current contents, we can break it
|
// regardless of current contents, we can break it
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import baritone.pathing.movement.MovementHelper;
|
|||||||
import baritone.utils.BaritoneProcessHelper;
|
import baritone.utils.BaritoneProcessHelper;
|
||||||
import baritone.utils.BlockStateInterface;
|
import baritone.utils.BlockStateInterface;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockAir;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.item.EntityItem;
|
import net.minecraft.entity.item.EntityItem;
|
||||||
import net.minecraft.init.Blocks;
|
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)
|
// 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 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 && MovementHelper.isAir(BlockStateInterface.getBlock(ctx, loc.down())));
|
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());
|
return upwardGoal == downwardGoal ? new GoalTwoBlocks(loc) : upwardGoal ? new GoalBlock(loc) : new GoalBlock(loc.down());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
|
|
||||||
package baritone.utils.schematic;
|
package baritone.utils.schematic;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockAir;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.init.Blocks;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
import java.util.OptionalInt;
|
import java.util.OptionalInt;
|
||||||
@@ -36,7 +36,7 @@ public class MapArtSchematic extends Schematic {
|
|||||||
for (int z = 0; z < lengthZ; z++) {
|
for (int z = 0; z < lengthZ; z++) {
|
||||||
IBlockState[] column = states[x][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()) {
|
if (lowestBlockY.isPresent()) {
|
||||||
heightMap[x][z] = lowestBlockY.getAsInt();
|
heightMap[x][z] = lowestBlockY.getAsInt();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user