From c4c85b4f49b1721f8e003c76febdda4fc38a0970 Mon Sep 17 00:00:00 2001 From: cdagaming Date: Sat, 20 Apr 2019 12:04:07 -0500 Subject: [PATCH 1/4] [Change] Add Block Avoidance Settings Fixes #392 --- src/api/java/baritone/api/Settings.java | 17 +++++++++++++++++ .../pathing/movement/MovementHelper.java | 3 +++ .../java/baritone/utils/pathing/Avoidance.java | 8 ++++++++ 3 files changed, 28 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 0676049d..ece3b23f 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -18,6 +18,7 @@ package baritone.api; import baritone.api.utils.SettingsUtil; +import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.item.Item; @@ -146,6 +147,13 @@ public final class Settings { Item.getItemFromBlock(Blocks.STONE) ))); + /** + * Blocks that Baritone will attempt to avoid (Used in avoidance) + */ + public final Setting> blocksToAvoid = new Setting<>(new ArrayList<>(Arrays.asList( + Blocks.VINE + ))); + /** * Enables some more advanced vine features. They're honestly just gimmicks and won't ever be needed in real * pathing scenarios. And they can cause Baritone to get trapped indefinitely in a strange scenario. @@ -250,6 +258,15 @@ public final class Settings { public final Setting mobAvoidanceRadius = new Setting<>(8); + /** + * Set to 1.0 to effectively disable this feature + *

+ * Set below 1.0 to go out of your way to walk near blocks + */ + public final Setting blockAvoidanceCoefficient = new Setting<>(1.5); + + public final Setting blockAvoidanceRadius = new Setting<>(8); + /** * When running a goto towards a container block (chest, ender chest, furnace, etc), * right click and open it once you arrive. diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 3abba65f..52ed9924 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -74,6 +74,9 @@ public interface MovementHelper extends ActionCosts, Helper { if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor) { return false; } + if (Baritone.settings().blocksToAvoid.value.contains(block)) { + return false; + } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { // Because there's no nice method in vanilla to check if a door is openable or not, we just have to assume // that anything that isn't an iron door isn't openable, ignoring that some doors introduced in mods can't diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index 9b32b1df..f1b2cac7 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -19,8 +19,10 @@ package baritone.utils.pathing; import baritone.Baritone; import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockUtils; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; +import net.minecraft.block.Block; import net.minecraft.entity.monster.EntityMob; import net.minecraft.util.math.BlockPos; @@ -63,12 +65,18 @@ public class Avoidance { List res = new ArrayList<>(); double mobSpawnerCoeff = Baritone.settings().mobSpawnerAvoidanceCoefficient.value; double mobCoeff = Baritone.settings().mobAvoidanceCoefficient.value; + double blockCoeff = Baritone.settings().blockAvoidanceCoefficient.value; if (mobSpawnerCoeff != 1.0D) { ctx.worldData().getCachedWorld().getLocationsOf("mob_spawner", 1, ctx.playerFeet().x, ctx.playerFeet().z, 2).forEach(mobspawner -> res.add(new Avoidance(mobspawner, mobSpawnerCoeff, Baritone.settings().mobSpawnerAvoidanceRadius.value))); } if (mobCoeff != 1.0D) { ctx.world().loadedEntityList.stream().filter(entity -> entity instanceof EntityMob).forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } + if (blockCoeff != 1.0D) { + for (Block block : Baritone.settings().blocksToAvoid.value) { + ctx.worldData().getCachedWorld().getLocationsOf(BlockUtils.blockToString(block), 1, ctx.playerFeet().x, ctx.playerFeet().z, 2).forEach(blockPos -> res.add(new Avoidance(blockPos, blockCoeff, Baritone.settings().blockAvoidanceRadius.value))); + } + } return res; } From 13469053b9ccc92dbc90ce32e1ac0976d4f83c26 Mon Sep 17 00:00:00 2001 From: cdagaming Date: Sat, 20 Apr 2019 12:11:46 -0500 Subject: [PATCH 2/4] [Change] Suggested Changes --- src/api/java/baritone/api/Settings.java | 2 +- src/main/java/baritone/utils/pathing/Avoidance.java | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index ece3b23f..42273335 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -151,7 +151,7 @@ public final class Settings { * Blocks that Baritone will attempt to avoid (Used in avoidance) */ public final Setting> blocksToAvoid = new Setting<>(new ArrayList<>(Arrays.asList( - Blocks.VINE + // Leave Empty by Default ))); /** diff --git a/src/main/java/baritone/utils/pathing/Avoidance.java b/src/main/java/baritone/utils/pathing/Avoidance.java index f1b2cac7..9b32b1df 100644 --- a/src/main/java/baritone/utils/pathing/Avoidance.java +++ b/src/main/java/baritone/utils/pathing/Avoidance.java @@ -19,10 +19,8 @@ package baritone.utils.pathing; import baritone.Baritone; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.BlockUtils; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; -import net.minecraft.block.Block; import net.minecraft.entity.monster.EntityMob; import net.minecraft.util.math.BlockPos; @@ -65,18 +63,12 @@ public class Avoidance { List res = new ArrayList<>(); double mobSpawnerCoeff = Baritone.settings().mobSpawnerAvoidanceCoefficient.value; double mobCoeff = Baritone.settings().mobAvoidanceCoefficient.value; - double blockCoeff = Baritone.settings().blockAvoidanceCoefficient.value; if (mobSpawnerCoeff != 1.0D) { ctx.worldData().getCachedWorld().getLocationsOf("mob_spawner", 1, ctx.playerFeet().x, ctx.playerFeet().z, 2).forEach(mobspawner -> res.add(new Avoidance(mobspawner, mobSpawnerCoeff, Baritone.settings().mobSpawnerAvoidanceRadius.value))); } if (mobCoeff != 1.0D) { ctx.world().loadedEntityList.stream().filter(entity -> entity instanceof EntityMob).forEach(entity -> res.add(new Avoidance(new BlockPos(entity), mobCoeff, Baritone.settings().mobAvoidanceRadius.value))); } - if (blockCoeff != 1.0D) { - for (Block block : Baritone.settings().blocksToAvoid.value) { - ctx.worldData().getCachedWorld().getLocationsOf(BlockUtils.blockToString(block), 1, ctx.playerFeet().x, ctx.playerFeet().z, 2).forEach(blockPos -> res.add(new Avoidance(blockPos, blockCoeff, Baritone.settings().blockAvoidanceRadius.value))); - } - } return res; } From dd8406c39ab78ecd93a14d5298c06ca2e53c8d56 Mon Sep 17 00:00:00 2001 From: cdagaming Date: Sat, 20 Apr 2019 12:13:28 -0500 Subject: [PATCH 3/4] [Fix] Remove unused Settings --- src/api/java/baritone/api/Settings.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 42273335..651b6af3 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -257,16 +257,7 @@ public final class Settings { public final Setting mobAvoidanceCoefficient = new Setting<>(1.5); public final Setting mobAvoidanceRadius = new Setting<>(8); - - /** - * Set to 1.0 to effectively disable this feature - *

- * Set below 1.0 to go out of your way to walk near blocks - */ - public final Setting blockAvoidanceCoefficient = new Setting<>(1.5); - - public final Setting blockAvoidanceRadius = new Setting<>(8); - + /** * When running a goto towards a container block (chest, ender chest, furnace, etc), * right click and open it once you arrive. From d5a8ed5cb162a461326b6372984ac2b0e032f18d Mon Sep 17 00:00:00 2001 From: cdagaming Date: Sat, 20 Apr 2019 12:32:35 -0500 Subject: [PATCH 4/4] [Change] More Suggested changes --- src/api/java/baritone/api/Settings.java | 4 ++-- src/api/java/baritone/api/utils/SettingsUtil.java | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 651b6af3..47459ae8 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -150,7 +150,7 @@ public final class Settings { /** * Blocks that Baritone will attempt to avoid (Used in avoidance) */ - public final Setting> blocksToAvoid = new Setting<>(new ArrayList<>(Arrays.asList( + public final Setting> blocksToAvoid = new Setting<>(new LinkedList<>(Arrays.asList( // Leave Empty by Default ))); @@ -257,7 +257,7 @@ public final class Settings { public final Setting mobAvoidanceCoefficient = new Setting<>(1.5); public final Setting mobAvoidanceRadius = new Setting<>(8); - + /** * When running a goto towards a container block (chest, ender chest, furnace, etc), * right click and open it once you arrive. diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 60014bbd..f5cb17e1 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -18,6 +18,7 @@ package baritone.api.utils; import baritone.api.Settings; +import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; @@ -147,6 +148,7 @@ public class SettingsUtil { FLOAT(Float.class, Float::parseFloat), LONG(Long.class, Long::parseLong), + BLOCK_LIST(LinkedList.class, str -> Stream.of(str.split(",")).map(String::trim).map(BlockUtils::stringToBlockRequired).collect(Collectors.toCollection(LinkedList::new)), list -> ((LinkedList) list).stream().map(BlockUtils::blockToString).collect(Collectors.joining(","))), ITEM_LIST(ArrayList.class, str -> Stream.of(str.split(",")).map(String::trim).map(Item::getByNameOrId).collect(Collectors.toCollection(ArrayList::new)), list -> ((ArrayList) list).stream().map(Item.REGISTRY::getNameForObject).map(ResourceLocation::toString).collect(Collectors.joining(","))), COLOR(Color.class, str -> new Color(Integer.parseInt(str.split(",")[0]), Integer.parseInt(str.split(",")[1]), Integer.parseInt(str.split(",")[2])), color -> color.getRed() + "," + color.getGreen() + "," + color.getBlue()), ENUMFACING(EnumFacing.class, EnumFacing::byName);