diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index d5d41f44..2f0d1ab4 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -23,6 +23,7 @@ import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; import baritone.behavior.PathingBehavior; +import baritone.utils.BaritoneAutoTest; import baritone.utils.ExampleBaritoneControl; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; @@ -39,6 +40,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; /** @@ -59,11 +61,22 @@ public class MixinMinecraft { method = "init", at = @At("RETURN") ) - private void init(CallbackInfo ci) { + private void postInit(CallbackInfo ci) { Baritone.INSTANCE.init(); ExampleBaritoneControl.INSTANCE.initAndRegister(); } + @Inject( + method = "init", + at = @At( + value = "INVOKE", + target = "net/minecraft/client/Minecraft.startTimerHackThread()V" + ) + ) + private void preInit(CallbackInfo ci) { + BaritoneAutoTest.INSTANCE.onPreInit(); + } + @Inject( method = "runTick", at = @At( diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 8d30d1df..51e7598a 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -110,7 +110,7 @@ public enum Baritone { ); } if (BaritoneAutoTest.ENABLE_AUTO_TEST && "true".equals(System.getenv("BARITONE_AUTO_TEST"))) { - registerEventListener(new BaritoneAutoTest()); + registerEventListener(BaritoneAutoTest.INSTANCE); } this.dir = new File(Minecraft.getMinecraft().gameDir, "baritone"); if (!Files.exists(dir.toPath())) { diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index ae88f7f9..d74a9b93 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -22,19 +22,51 @@ import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; import baritone.behavior.PathingBehavior; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.tutorial.TutorialSteps; import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameType; import net.minecraft.world.WorldSettings; import net.minecraft.world.WorldType; public class BaritoneAutoTest implements AbstractGameEventListener, Helper { + + public static final BaritoneAutoTest INSTANCE = new BaritoneAutoTest(); + + private BaritoneAutoTest() {} + public static final boolean ENABLE_AUTO_TEST = true; private static final long TEST_SEED = -928872506371745L; private static final BlockPos STARTING_POSITION = new BlockPos(50, 65, 50); private static final Goal GOAL = new GoalBlock(69, 121, 420); private static final int MAX_TICKS = 3200; + /** + * Called right after the {@link GameSettings} object is created in the {@link Minecraft} instance. + */ + public void onPreInit() { + System.out.println("Optimizing Game Settings"); + + GameSettings s = mc.gameSettings; + s.limitFramerate = 10; + s.mipmapLevels = 0; + s.particleSetting = 2; + s.overrideWidth = 128; + s.overrideHeight = 128; + s.pauseOnLostFocus = false; + s.heldItemTooltips = false; + s.entityShadows = false; + s.chatScale = 0.0F; + s.ambientOcclusion = 0; + s.clouds = 0; + s.fancyGraphics = false; + s.tutorialStep = TutorialSteps.NONE; + s.hideGUI = true; + s.fovSetting = 30.0F; + } + @Override public void onTick(TickEvent event) { if (mc.currentScreen != null && mc.currentScreen instanceof GuiMainMenu) {