From bb453a94b99b1ae797086bd183c90e94877558ec Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:04:41 -0700 Subject: [PATCH 1/9] beautiful settings --- src/main/java/baritone/bot/Baritone.java | 1 + src/main/java/baritone/bot/Settings.java | 97 ++++++++++++++++--- .../bot/behavior/impl/PathingBehavior.java | 12 +-- .../baritone/bot/event/GameEventHandler.java | 8 +- .../bot/pathing/calc/AStarPathFinder.java | 7 +- .../baritone/bot/pathing/goals/GoalXZ.java | 2 +- .../pathing/movement/CalculationContext.java | 4 +- .../bot/pathing/movement/Movement.java | 2 +- .../bot/pathing/movement/MovementHelper.java | 3 +- .../bot/pathing/movement/MovementState.java | 2 +- .../movement/movements/MovementAscend.java | 2 +- .../movement/movements/MovementDescend.java | 2 +- .../movement/movements/MovementFall.java | 2 +- .../movement/movements/MovementPillar.java | 2 +- .../movement/movements/MovementTraverse.java | 2 +- .../bot/utils/BlockStateInterface.java | 2 +- .../bot/utils/ExampleBaritoneControl.java | 19 ++-- src/main/java/baritone/bot/utils/Helper.java | 2 +- .../bot/{ => utils}/InputOverrideHandler.java | 22 ++++- .../baritone/movement/MovementManager.java | 2 +- 20 files changed, 146 insertions(+), 49 deletions(-) rename src/main/java/baritone/bot/{ => utils}/InputOverrideHandler.java (82%) diff --git a/src/main/java/baritone/bot/Baritone.java b/src/main/java/baritone/bot/Baritone.java index 3bc352b9f..e13cbade2 100755 --- a/src/main/java/baritone/bot/Baritone.java +++ b/src/main/java/baritone/bot/Baritone.java @@ -22,6 +22,7 @@ import baritone.bot.behavior.impl.LookBehavior; import baritone.bot.behavior.impl.MemoryBehavior; import baritone.bot.behavior.impl.PathingBehavior; import baritone.bot.event.GameEventHandler; +import baritone.bot.utils.InputOverrideHandler; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/baritone/bot/Settings.java b/src/main/java/baritone/bot/Settings.java index ad93d7fee..0c1353702 100644 --- a/src/main/java/baritone/bot/Settings.java +++ b/src/main/java/baritone/bot/Settings.java @@ -17,25 +17,98 @@ package baritone.bot; +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.util.*; + /** * Baritone's settings * * @author leijurv */ public class Settings { - public boolean allowBreak = true; - public boolean allowPlaceThrowaway = true; - public double costHeuristic = 4; - public boolean chuckCaching = false; - public boolean allowWaterBucketFall = true; - public int planningTickLookAhead = 150; - public boolean renderPath = true; - public boolean chatDebug = true; - public boolean chatControl = true; - public boolean fadePath = true; - public boolean slowPath = false; + public Setting allowBreak = new Setting<>(true); + public Setting allowPlaceThrowaway = new Setting<>(true); + public Setting costHeuristic = new Setting(4D); + public Setting chuckCaching = new Setting<>(false); + public Setting allowWaterBucketFall = new Setting<>(true); + public Setting planningTickLookAhead = new Setting<>(150); + public Setting renderPath = new Setting<>(true); + public Setting chatDebug = new Setting<>(true); + public Setting chatControl = new Setting<>(true); // probably false in impact + public Setting fadePath = new Setting<>(false); // give this a better name in the UI, like "better path fps" idk + public Setting slowPath = new Setting<>(false); - Settings() { + public final Map> byName; + public final List> allSettings; + public class Setting { + public T value; + private String name; + private Class klass; + + private Setting(V value) { + this.value = value; + } + + public final T get() { + return value; + } + + public final String getName() { + return name; + } + + public String toString() { + return name + ": " + value; + } } + + // here be dragons + + { + Field[] temp = getClass().getFields(); + HashMap> tmpByName = new HashMap<>(); + List> tmpAll = new ArrayList<>(); + for (Field field : temp) { + if (field.getType().equals(Setting.class)) { + try { + ParameterizedType param = (ParameterizedType) field.getGenericType(); + Class settingType = (Class) param.getActualTypeArguments()[0]; + // can't always do field.get(this).value.getClass() because default value might be null + Setting setting = (Setting) field.get(this); + if (setting.value != null) { + if (setting.value.getClass() != settingType) { + throw new IllegalStateException("Generic mismatch" + setting.value + " " + setting.value.getClass() + " " + settingType); + } + } + String name = field.getName(); + setting.name = name; + setting.klass = settingType; + if (tmpByName.containsKey(name)) { + throw new IllegalStateException("Duplicate setting name"); + } + tmpByName.put(name, setting); + tmpAll.add(setting); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + } + byName = Collections.unmodifiableMap(tmpByName); + allSettings = Collections.unmodifiableList(tmpAll); + } + + public List> getByValueType(Class klass) { + ArrayList> result = new ArrayList<>(); + for (Setting setting : allSettings) { + if (setting.klass.equals(klass)) { + result.add((Setting) setting); + } + } + return result; + } + + Settings() { } } diff --git a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java index 53b0e0366..6e8488843 100644 --- a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java +++ b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java @@ -122,7 +122,7 @@ public class PathingBehavior extends Behavior { // and this path dosen't get us all the way there return; } - if (current.getPath().ticksRemainingFrom(current.getPosition()) < Baritone.settings().planningTickLookAhead) { + if (current.getPath().ticksRemainingFrom(current.getPosition()) < Baritone.settings().planningTickLookAhead.get()) { // and this path has 5 seconds or less left displayChatMessageRaw("Path almost over. Planning ahead..."); findPathInNewThread(current.getPath().getDest(), false); @@ -231,7 +231,7 @@ public class PathingBehavior extends Behavior { @Override public void onRenderPass(RenderEvent event) { - if (!Baritone.settings().renderPath) { + if (!Baritone.settings().renderPath.get()) { return; } // System.out.println("Render passing"); @@ -246,10 +246,10 @@ public class PathingBehavior extends Behavior { // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - PathRenderer.drawPath(current.getPath(), renderBegin, player(), partialTicks, Color.RED, Baritone.settings().fadePath, 10, 20); + PathRenderer.drawPath(current.getPath(), renderBegin, player(), partialTicks, Color.RED, Baritone.settings().fadePath.get(), 10, 20); } if (next != null && next.getPath() != null) { - PathRenderer.drawPath(next.getPath(), 0, player(), partialTicks, Color.GREEN, Baritone.settings().fadePath, 10, 20); + PathRenderer.drawPath(next.getPath(), 0, player(), partialTicks, Color.GREEN, Baritone.settings().fadePath.get(), 10, 20); } long split = System.nanoTime(); @@ -262,10 +262,10 @@ public class PathingBehavior extends Behavior { // If there is a path calculation currently running, render the path calculation process AbstractNodeCostSearch.getCurrentlyRunning().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - PathRenderer.drawPath(p, 0, player(), partialTicks, Color.BLUE, Baritone.settings().fadePath, 10, 20); + PathRenderer.drawPath(p, 0, player(), partialTicks, Color.BLUE, Baritone.settings().fadePath.get(), 10, 20); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - PathRenderer.drawPath(mr, 0, player(), partialTicks, Color.CYAN, Baritone.settings().fadePath, 10, 20); + PathRenderer.drawPath(mr, 0, player(), partialTicks, Color.CYAN, Baritone.settings().fadePath.get(), 10, 20); PathRenderer.drawManySelectionBoxes(player(), Collections.singletonList(mr.getDest()), partialTicks, Color.CYAN); }); }); diff --git a/src/main/java/baritone/bot/event/GameEventHandler.java b/src/main/java/baritone/bot/event/GameEventHandler.java index ea151c2e1..32bcde8cb 100644 --- a/src/main/java/baritone/bot/event/GameEventHandler.java +++ b/src/main/java/baritone/bot/event/GameEventHandler.java @@ -35,15 +35,15 @@ package baritone.bot.event; import baritone.bot.Baritone; -import baritone.bot.InputOverrideHandler; import baritone.bot.behavior.Behavior; import baritone.bot.chunk.CachedWorld; import baritone.bot.chunk.CachedWorldProvider; import baritone.bot.chunk.ChunkPacker; -import baritone.bot.event.listener.IGameEventListener; import baritone.bot.event.events.*; import baritone.bot.event.events.type.EventState; +import baritone.bot.event.listener.IGameEventListener; import baritone.bot.utils.Helper; +import baritone.bot.utils.InputOverrideHandler; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; @@ -108,7 +108,7 @@ public final class GameEventHandler implements IGameEventListener, Helper { && type == ChunkEvent.Type.UNLOAD && mc.world.getChunkProvider().isChunkGeneratedAt(event.getX(), event.getZ()); - if (Baritone.settings().chuckCaching) { + if (Baritone.settings().chuckCaching.get()) { if (isPostPopulate || isPreUnload) { CachedWorldProvider.INSTANCE.ifWorldLoaded(world -> world.updateCachedChunk(event.getX(), event.getZ(), @@ -132,7 +132,7 @@ public final class GameEventHandler implements IGameEventListener, Helper { @Override public void onWorldEvent(WorldEvent event) { - if (Baritone.settings().chuckCaching) { + if (Baritone.settings().chuckCaching.get()) { CachedWorldProvider cache = CachedWorldProvider.INSTANCE; switch (event.getState()) { diff --git a/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java index 93025a534..694b05a3e 100644 --- a/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java @@ -81,14 +81,15 @@ public class AStarPathFinder extends AbstractNodeCostSearch implements Helper { } currentlyRunning = this; long startTime = System.currentTimeMillis(); - long timeoutTime = startTime + (Baritone.settings().slowPath ? 40000 : 4000); + boolean slowPath = Baritone.settings().slowPath.get(); + long timeoutTime = startTime + (slowPath ? 40000 : 4000); long lastPrintout = 0; int numNodes = 0; CalculationContext calcContext = new CalculationContext(); int numEmptyChunk = 0; - boolean cache = Baritone.settings().chuckCaching; + boolean cache = Baritone.settings().chuckCaching.get(); while (!openSet.isEmpty() && numEmptyChunk < 50 && System.currentTimeMillis() < timeoutTime) { - if (Baritone.settings().slowPath) { + if (slowPath) { try { Thread.sleep(100); } catch (InterruptedException ex) { diff --git a/src/main/java/baritone/bot/pathing/goals/GoalXZ.java b/src/main/java/baritone/bot/pathing/goals/GoalXZ.java index acc8592c7..ca70c9517 100644 --- a/src/main/java/baritone/bot/pathing/goals/GoalXZ.java +++ b/src/main/java/baritone/bot/pathing/goals/GoalXZ.java @@ -99,7 +99,7 @@ public class GoalXZ implements Goal { diagonal = z; } diagonal *= SQRT_2; - return (diagonal + straight) * Baritone.settings().costHeuristic; // big TODO tune + return (diagonal + straight) * Baritone.settings().costHeuristic.get(); // big TODO tune } public static GoalXZ fromDirection(Vec3d origin, float yaw, double distance) { diff --git a/src/main/java/baritone/bot/pathing/movement/CalculationContext.java b/src/main/java/baritone/bot/pathing/movement/CalculationContext.java index 6c171475b..92a9de9f8 100644 --- a/src/main/java/baritone/bot/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/bot/pathing/movement/CalculationContext.java @@ -42,8 +42,8 @@ public class CalculationContext implements Helper { public CalculationContext(ToolSet toolSet) { this.toolSet = toolSet; - this.hasWaterBucket = Baritone.settings().allowWaterBucketFall && InventoryPlayer.isHotbar(player().inventory.getSlotFor(STACK_BUCKET_WATER)) && !world().provider.isNether(); - this.hasThrowaway = Baritone.settings().allowPlaceThrowaway && MovementHelper.throwaway(false); + this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.get() && InventoryPlayer.isHotbar(player().inventory.getSlotFor(STACK_BUCKET_WATER)) && !world().provider.isNether(); + this.hasThrowaway = Baritone.settings().allowPlaceThrowaway.get() && MovementHelper.throwaway(false); } public ToolSet getToolSet() { diff --git a/src/main/java/baritone/bot/pathing/movement/Movement.java b/src/main/java/baritone/bot/pathing/movement/Movement.java index 9db706b71..7b79fc4f4 100644 --- a/src/main/java/baritone/bot/pathing/movement/Movement.java +++ b/src/main/java/baritone/bot/pathing/movement/Movement.java @@ -37,7 +37,7 @@ import net.minecraft.util.math.Vec3d; import java.util.ArrayList; import java.util.Optional; -import static baritone.bot.InputOverrideHandler.Input; +import static baritone.bot.utils.InputOverrideHandler.Input; public abstract class Movement implements Helper, MovementHelper { diff --git a/src/main/java/baritone/bot/pathing/movement/MovementHelper.java b/src/main/java/baritone/bot/pathing/movement/MovementHelper.java index 5a5732a38..4872e2faa 100644 --- a/src/main/java/baritone/bot/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/bot/pathing/movement/MovementHelper.java @@ -18,7 +18,6 @@ package baritone.bot.pathing.movement; import baritone.bot.Baritone; -import baritone.bot.InputOverrideHandler; import baritone.bot.behavior.impl.LookBehaviorUtils; import baritone.bot.pathing.movement.MovementState.MovementTarget; import baritone.bot.pathing.movement.movements.MovementDescend; @@ -137,7 +136,7 @@ public interface MovementHelper extends ActionCosts, Helper { IBlockState state = BlockStateInterface.get(position); Block block = state.getBlock(); if (!block.equals(Blocks.AIR) && !canWalkThrough(position)) { - if (!Baritone.settings().allowBreak) { + if (!Baritone.settings().allowBreak.get()) { return COST_INF; } if (avoidBreaking(position)) { diff --git a/src/main/java/baritone/bot/pathing/movement/MovementState.java b/src/main/java/baritone/bot/pathing/movement/MovementState.java index 9dea192d3..efc56c085 100644 --- a/src/main/java/baritone/bot/pathing/movement/MovementState.java +++ b/src/main/java/baritone/bot/pathing/movement/MovementState.java @@ -17,7 +17,7 @@ package baritone.bot.pathing.movement; -import baritone.bot.InputOverrideHandler.Input; +import baritone.bot.utils.InputOverrideHandler.Input; import baritone.bot.utils.Rotation; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java index b021e19fa..7d68608cc 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java @@ -17,7 +17,7 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.InputOverrideHandler; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.behavior.impl.LookBehaviorUtils; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java index 2b25a191a..fa2381e28 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java @@ -17,7 +17,7 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.InputOverrideHandler; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; import baritone.bot.pathing.movement.MovementHelper; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java index 592440ff7..d1312a39e 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java @@ -17,7 +17,7 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.InputOverrideHandler; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.behavior.impl.LookBehaviorUtils; import baritone.bot.pathing.movement.*; import baritone.bot.pathing.movement.MovementState.MovementStatus; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java index eace641e7..d8d68c873 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java @@ -17,7 +17,7 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.InputOverrideHandler; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; import baritone.bot.pathing.movement.MovementHelper; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java index fb2cba39a..92d147e27 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java @@ -17,7 +17,7 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.InputOverrideHandler; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.behavior.impl.LookBehaviorUtils; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; diff --git a/src/main/java/baritone/bot/utils/BlockStateInterface.java b/src/main/java/baritone/bot/utils/BlockStateInterface.java index 7ab42c1da..cddd73515 100644 --- a/src/main/java/baritone/bot/utils/BlockStateInterface.java +++ b/src/main/java/baritone/bot/utils/BlockStateInterface.java @@ -41,7 +41,7 @@ public class BlockStateInterface implements Helper { if (chunk.isLoaded()) { return chunk.getBlockState(pos); } - if(Baritone.settings().chuckCaching) { + if (Baritone.settings().chuckCaching.get()) { CachedWorld world = CachedWorldProvider.INSTANCE.getCurrentWorld(); if (world != null) { PathingBlockType type = world.getBlockType(pos); diff --git a/src/main/java/baritone/bot/utils/ExampleBaritoneControl.java b/src/main/java/baritone/bot/utils/ExampleBaritoneControl.java index d48654493..aaf59b056 100644 --- a/src/main/java/baritone/bot/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/bot/utils/ExampleBaritoneControl.java @@ -18,6 +18,7 @@ package baritone.bot.utils; import baritone.bot.Baritone; +import baritone.bot.Settings; import baritone.bot.behavior.Behavior; import baritone.bot.behavior.impl.PathingBehavior; import baritone.bot.event.events.ChatEvent; @@ -27,6 +28,8 @@ import baritone.bot.pathing.goals.GoalXZ; import baritone.bot.pathing.goals.GoalYLevel; import net.minecraft.util.math.BlockPos; +import java.util.List; + public class ExampleBaritoneControl extends Behavior { public static ExampleBaritoneControl INSTANCE = new ExampleBaritoneControl(); @@ -40,7 +43,7 @@ public class ExampleBaritoneControl extends Behavior { @Override public void onSendChatMessage(ChatEvent event) { - if (!Baritone.settings().chatControl) { + if (!Baritone.settings().chatControl.get()) { return; } String msg = event.getMessage(); @@ -82,11 +85,6 @@ public class ExampleBaritoneControl extends Behavior { event.cancel(); return; } - if (msg.toLowerCase().equals("slowpath")) { - Baritone.settings().slowPath ^= true; - event.cancel(); - return; - } if (msg.toLowerCase().equals("cancel")) { PathingBehavior.INSTANCE.cancel(); event.cancel(); @@ -100,5 +98,14 @@ public class ExampleBaritoneControl extends Behavior { event.cancel(); return; } + List> toggleable = Baritone.settings().getByValueType(Boolean.class); + for (Settings.Setting setting : toggleable) { + if (msg.toLowerCase().equals(setting.getName().toLowerCase())) { + setting.value ^= true; + event.cancel(); + displayChatMessageRaw("Toggled " + setting.getName() + " to " + setting.value); + return; + } + } } } diff --git a/src/main/java/baritone/bot/utils/Helper.java b/src/main/java/baritone/bot/utils/Helper.java index 4f2ef227a..8571f23e2 100755 --- a/src/main/java/baritone/bot/utils/Helper.java +++ b/src/main/java/baritone/bot/utils/Helper.java @@ -68,7 +68,7 @@ public interface Helper { } default void displayChatMessageRaw(String message) { - if (!Baritone.settings().chatDebug) { + if (!Baritone.settings().chatDebug.get()) { System.out.println("Suppressed debug message:"); System.out.println(message); return; diff --git a/src/main/java/baritone/bot/InputOverrideHandler.java b/src/main/java/baritone/bot/utils/InputOverrideHandler.java similarity index 82% rename from src/main/java/baritone/bot/InputOverrideHandler.java rename to src/main/java/baritone/bot/utils/InputOverrideHandler.java index 63f3bb39b..99e59e3f7 100755 --- a/src/main/java/baritone/bot/InputOverrideHandler.java +++ b/src/main/java/baritone/bot/utils/InputOverrideHandler.java @@ -15,9 +15,25 @@ * along with Baritone. If not, see . */ -package baritone.bot; +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Baritone. If not, see . + */ + +package baritone.bot.utils; -import baritone.bot.utils.Helper; import net.minecraft.client.settings.KeyBinding; import org.lwjgl.input.Keyboard; @@ -34,7 +50,7 @@ import java.util.Map; */ public final class InputOverrideHandler implements Helper { - InputOverrideHandler() {} + public InputOverrideHandler() {} /** * Maps keybinds to whether or not we are forcing their state down. diff --git a/src/main/resources/baritone/movement/MovementManager.java b/src/main/resources/baritone/movement/MovementManager.java index 704cc9291..357f75147 100644 --- a/src/main/resources/baritone/movement/MovementManager.java +++ b/src/main/resources/baritone/movement/MovementManager.java @@ -1,7 +1,7 @@ package baritone.movement; import baritone.Baritone; -import baritone.bot.InputOverrideHandler; +import baritone.bot.utils.InputOverrideHandler; import baritone.ui.LookManager; import net.minecraft.block.BlockLadder; import net.minecraft.block.BlockVine; From 45375c45bb8b6382894007f2f166ce67b6bfb9f2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:16:38 -0700 Subject: [PATCH 2/9] simplified --- src/main/java/baritone/bot/Settings.java | 32 ++++++++---------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/main/java/baritone/bot/Settings.java b/src/main/java/baritone/bot/Settings.java index 0c1353702..f7f2ccb67 100644 --- a/src/main/java/baritone/bot/Settings.java +++ b/src/main/java/baritone/bot/Settings.java @@ -18,7 +18,6 @@ package baritone.bot; import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; import java.util.*; /** @@ -45,10 +44,11 @@ public class Settings { public class Setting { public T value; private String name; - private Class klass; + private final Class klass; - private Setting(V value) { + private Setting(T value) { this.value = value; + this.klass = (Class) value.getClass(); } public final T get() { @@ -70,41 +70,31 @@ public class Settings { Field[] temp = getClass().getFields(); HashMap> tmpByName = new HashMap<>(); List> tmpAll = new ArrayList<>(); - for (Field field : temp) { - if (field.getType().equals(Setting.class)) { - try { - ParameterizedType param = (ParameterizedType) field.getGenericType(); - Class settingType = (Class) param.getActualTypeArguments()[0]; - // can't always do field.get(this).value.getClass() because default value might be null + try { + for (Field field : temp) { + if (field.getType().equals(Setting.class)) { Setting setting = (Setting) field.get(this); - if (setting.value != null) { - if (setting.value.getClass() != settingType) { - throw new IllegalStateException("Generic mismatch" + setting.value + " " + setting.value.getClass() + " " + settingType); - } - } String name = field.getName(); setting.name = name; - setting.klass = settingType; if (tmpByName.containsKey(name)) { throw new IllegalStateException("Duplicate setting name"); } tmpByName.put(name, setting); tmpAll.add(setting); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); } - } + } catch (IllegalAccessException e) { + throw new RuntimeException(e); } byName = Collections.unmodifiableMap(tmpByName); allSettings = Collections.unmodifiableList(tmpAll); } - public List> getByValueType(Class klass) { - ArrayList> result = new ArrayList<>(); + public List> getByValueType(Class klass) { + ArrayList> result = new ArrayList<>(); for (Setting setting : allSettings) { if (setting.klass.equals(klass)) { - result.add((Setting) setting); + result.add((Setting) setting); } } return result; From 7bc9969d93efaeae365709fd0f9fd3844c27572e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:19:35 -0700 Subject: [PATCH 3/9] throwaways setting --- src/main/java/baritone/bot/Settings.java | 8 ++++++++ .../baritone/bot/pathing/movement/MovementHelper.java | 11 +---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/bot/Settings.java b/src/main/java/baritone/bot/Settings.java index f7f2ccb67..efeb186e4 100644 --- a/src/main/java/baritone/bot/Settings.java +++ b/src/main/java/baritone/bot/Settings.java @@ -17,6 +17,9 @@ package baritone.bot; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; + import java.lang.reflect.Field; import java.util.*; @@ -37,6 +40,11 @@ public class Settings { public Setting chatControl = new Setting<>(true); // probably false in impact public Setting fadePath = new Setting<>(false); // give this a better name in the UI, like "better path fps" idk public Setting slowPath = new Setting<>(false); + public Setting> acceptableThrowAwayItems = new Setting<>(Arrays.asList( + Item.getItemFromBlock(Blocks.DIRT), + Item.getItemFromBlock(Blocks.COBBLESTONE), + Item.getItemFromBlock(Blocks.NETHERRACK) + )); public final Map> byName; public final List> allSettings; diff --git a/src/main/java/baritone/bot/pathing/movement/MovementHelper.java b/src/main/java/baritone/bot/pathing/movement/MovementHelper.java index 4872e2faa..1e7e18687 100644 --- a/src/main/java/baritone/bot/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/bot/pathing/movement/MovementHelper.java @@ -29,14 +29,11 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; -import java.util.Arrays; -import java.util.List; import java.util.Optional; /** @@ -46,12 +43,6 @@ import java.util.Optional; */ public interface MovementHelper extends ActionCosts, Helper { - List ACCEPTABLE_THROWAWAY_ITEMS = Arrays.asList( - Item.getItemFromBlock(Blocks.DIRT), - Item.getItemFromBlock(Blocks.COBBLESTONE), - Item.getItemFromBlock(Blocks.NETHERRACK) - ); - static boolean avoidBreaking(BlockPos pos) { Block b = BlockStateInterface.getBlock(pos); BlockPos below = new BlockPos(pos.getX(), pos.getY() - 1, pos.getZ()); @@ -200,7 +191,7 @@ public interface MovementHelper extends ActionCosts, Helper { NonNullList inv = p.inventory.mainInventory; for (byte i = 0; i < 9; i++) { ItemStack item = inv.get(i); - if (ACCEPTABLE_THROWAWAY_ITEMS.contains(item.getItem())) { + if (Baritone.settings().acceptableThrowAwayItems.get().contains(item.getItem())) { if (select) { p.inventory.currentItem = i; } From 72f7c564a1e30227ab2d152508c209e43783a79b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:22:52 -0700 Subject: [PATCH 4/9] getter --- src/main/java/baritone/bot/Settings.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baritone/bot/Settings.java b/src/main/java/baritone/bot/Settings.java index efeb186e4..bc97a689c 100644 --- a/src/main/java/baritone/bot/Settings.java +++ b/src/main/java/baritone/bot/Settings.java @@ -67,6 +67,10 @@ public class Settings { return name; } + public Class getValueClass() { + return klass; + } + public String toString() { return name + ": " + value; } From 92b3ac93d0b37866f1aebd83ce23babd5ac54c13 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:24:23 -0700 Subject: [PATCH 5/9] check --- src/main/java/baritone/bot/Settings.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/baritone/bot/Settings.java b/src/main/java/baritone/bot/Settings.java index bc97a689c..3f03ee533 100644 --- a/src/main/java/baritone/bot/Settings.java +++ b/src/main/java/baritone/bot/Settings.java @@ -55,6 +55,9 @@ public class Settings { private final Class klass; private Setting(T value) { + if (value == null) { + throw new IllegalArgumentException("Cannot determine value type class from null"); + } this.value = value; this.klass = (Class) value.getClass(); } From 9aefcebddf876e72705b422641093b2ef8c5503f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:32:16 -0700 Subject: [PATCH 6/9] api --- src/main/java/baritone/bot/behavior/impl/PathingBehavior.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java index 6e8488843..096daecf7 100644 --- a/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java +++ b/src/main/java/baritone/bot/behavior/impl/PathingBehavior.java @@ -135,10 +135,12 @@ public class PathingBehavior extends Behavior { this.goal = goal; } - public PathExecutor getExecutor() { + public PathExecutor getCurrent() { return current; } + public PathExecutor getNext() {return next;} + public Optional getPath() { return Optional.ofNullable(current).map(PathExecutor::getPath); } From c780454b7888b00683f3e4b9047ab0d8a77ad6eb Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:42:59 -0700 Subject: [PATCH 7/9] comment --- src/main/java/baritone/bot/pathing/movement/ActionCosts.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/baritone/bot/pathing/movement/ActionCosts.java b/src/main/java/baritone/bot/pathing/movement/ActionCosts.java index 79069d50e..d21b93842 100644 --- a/src/main/java/baritone/bot/pathing/movement/ActionCosts.java +++ b/src/main/java/baritone/bot/pathing/movement/ActionCosts.java @@ -44,5 +44,9 @@ public interface ActionCosts extends ActionCostsButOnlyTheOnesThatMakeMickeyDieI */ double PLACE_ONE_BLOCK_COST = 20; + /** + * don't make this Double.MAX_VALUE because it's added to other things, maybe other COST_INFs, + * and that would make it overflow to negative + */ double COST_INF = 1000000; } From ea5914f7761d0d72ebef209249387ec55e48f857 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 15:58:53 -0700 Subject: [PATCH 8/9] cmt --- src/main/java/baritone/bot/pathing/movement/Movement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/bot/pathing/movement/Movement.java b/src/main/java/baritone/bot/pathing/movement/Movement.java index 7b79fc4f4..b1f8124b6 100644 --- a/src/main/java/baritone/bot/pathing/movement/Movement.java +++ b/src/main/java/baritone/bot/pathing/movement/Movement.java @@ -265,7 +265,7 @@ public abstract class Movement implements Helper, MovementHelper { return result; } - public ArrayList toWalkInto() { + public ArrayList toWalkInto() { // overridden by movementdiagonal if (toWalkIntoCached == null) { toWalkIntoCached = new ArrayList<>(); } From aef3af50c2675f75a93a4b9ba2dbc4e6d7ed349c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 14 Aug 2018 17:37:19 -0700 Subject: [PATCH 9/9] unused cases --- .../bot/pathing/movement/movements/MovementAscend.java | 6 +----- .../bot/pathing/movement/movements/MovementDescend.java | 6 +----- .../bot/pathing/movement/movements/MovementDiagonal.java | 4 ---- .../bot/pathing/movement/movements/MovementDownward.java | 4 ---- .../bot/pathing/movement/movements/MovementFall.java | 6 +----- .../bot/pathing/movement/movements/MovementPillar.java | 6 +----- .../bot/pathing/movement/movements/MovementTraverse.java | 6 +----- 7 files changed, 5 insertions(+), 33 deletions(-) diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java index 7d68608cc..7a8d5176c 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java @@ -17,7 +17,6 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.utils.InputOverrideHandler; import baritone.bot.behavior.impl.LookBehaviorUtils; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; @@ -25,6 +24,7 @@ import baritone.bot.pathing.movement.MovementHelper; import baritone.bot.pathing.movement.MovementState; import baritone.bot.pathing.movement.MovementState.MovementStatus; import baritone.bot.utils.BlockStateInterface; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.utils.Utils; import net.minecraft.block.BlockFalling; import net.minecraft.block.state.IBlockState; @@ -98,10 +98,6 @@ public class MovementAscend extends Movement { // TODO incorporate some behavior from ActionClimb (specifically how it waited until it was at most 1.2 blocks away before starting to jump // for efficiency in ascending minimal height staircases, which is just repeated MovementAscend, so that it doesn't bonk its head on the ceiling repeatedly) switch (state.getStatus()) { - case PREPPING: - case UNREACHABLE: - case FAILED: - return state; case WAITING: case RUNNING: break; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java index fa2381e28..7be59858f 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementDescend.java @@ -17,13 +17,13 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.utils.InputOverrideHandler; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; import baritone.bot.pathing.movement.MovementHelper; import baritone.bot.pathing.movement.MovementState; import baritone.bot.pathing.movement.MovementState.MovementStatus; import baritone.bot.utils.BlockStateInterface; +import baritone.bot.utils.InputOverrideHandler; import net.minecraft.block.Block; import net.minecraft.block.BlockLadder; import net.minecraft.block.BlockVine; @@ -59,10 +59,6 @@ public class MovementDescend extends Movement { public MovementState updateState(MovementState state) { super.updateState(state); switch (state.getStatus()) { - case PREPPING: - case UNREACHABLE: - case FAILED: - return state; case WAITING: state.setStatus(MovementStatus.RUNNING); case RUNNING: diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementDiagonal.java index 5254d4158..776f2037c 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementDiagonal.java @@ -51,10 +51,6 @@ public class MovementDiagonal extends Movement { public MovementState updateState(MovementState state) { super.updateState(state); switch (state.getStatus()) { - case PREPPING: - case UNREACHABLE: - case FAILED: - return state; case WAITING: case RUNNING: break; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementDownward.java index 10c84c5ec..20aad6dfa 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementDownward.java @@ -53,10 +53,6 @@ public class MovementDownward extends Movement { public MovementState updateState(MovementState state) { super.updateState(state); switch (state.getStatus()) { - case PREPPING: - case UNREACHABLE: - case FAILED: - return state; case WAITING: case RUNNING: break; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java index d1312a39e..dec79f4b0 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java @@ -17,12 +17,12 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.utils.InputOverrideHandler; import baritone.bot.behavior.impl.LookBehaviorUtils; import baritone.bot.pathing.movement.*; import baritone.bot.pathing.movement.MovementState.MovementStatus; import baritone.bot.pathing.movement.MovementState.MovementTarget; import baritone.bot.utils.BlockStateInterface; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.utils.Rotation; import baritone.bot.utils.Utils; import net.minecraft.init.Items; @@ -67,10 +67,6 @@ public class MovementFall extends Movement { public MovementState updateState(MovementState state) { super.updateState(state); switch (state.getStatus()) { - case PREPPING: - case UNREACHABLE: - case FAILED: - return state; case WAITING: state.setStatus(MovementStatus.RUNNING); case RUNNING: diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java index d8d68c873..db858b251 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementPillar.java @@ -17,12 +17,12 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.utils.InputOverrideHandler; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; import baritone.bot.pathing.movement.MovementHelper; import baritone.bot.pathing.movement.MovementState; import baritone.bot.utils.BlockStateInterface; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.utils.Rotation; import baritone.bot.utils.Utils; import net.minecraft.block.*; @@ -99,10 +99,6 @@ public class MovementPillar extends Movement { public MovementState updateState(MovementState state) { super.updateState(state); switch (state.getStatus()) { - case PREPPING: - case UNREACHABLE: - case FAILED: - return state; case WAITING: case RUNNING: break; diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java index 92d147e27..fecbeae3a 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementTraverse.java @@ -17,13 +17,13 @@ package baritone.bot.pathing.movement.movements; -import baritone.bot.utils.InputOverrideHandler; import baritone.bot.behavior.impl.LookBehaviorUtils; import baritone.bot.pathing.movement.CalculationContext; import baritone.bot.pathing.movement.Movement; import baritone.bot.pathing.movement.MovementHelper; import baritone.bot.pathing.movement.MovementState; import baritone.bot.utils.BlockStateInterface; +import baritone.bot.utils.InputOverrideHandler; import baritone.bot.utils.Utils; import net.minecraft.block.Block; import net.minecraft.block.BlockLadder; @@ -118,10 +118,6 @@ public class MovementTraverse extends Movement { public MovementState updateState(MovementState state) { super.updateState(state); switch (state.getStatus()) { - case PREPPING: - case UNREACHABLE: - case FAILED: - return state; case WAITING: case RUNNING: break;