first attempt
This commit is contained in:
54
src/main/java/baritone/launch/BaritoneTweaker.java
Executable file
54
src/main/java/baritone/launch/BaritoneTweaker.java
Executable file
@@ -0,0 +1,54 @@
|
||||
package baritone.launch;
|
||||
|
||||
import net.minecraft.launchwrapper.ITweaker;
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
import org.spongepowered.asm.launch.MixinBootstrap;
|
||||
import org.spongepowered.asm.mixin.MixinEnvironment;
|
||||
import org.spongepowered.asm.mixin.Mixins;
|
||||
import org.spongepowered.tools.obfuscation.mcp.ObfuscationServiceMCP;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 9:59 PM
|
||||
*/
|
||||
public class BaritoneTweaker implements ITweaker {
|
||||
|
||||
List<String> args;
|
||||
|
||||
@Override
|
||||
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile) {
|
||||
this.args = new ArrayList<>(args);
|
||||
if (gameDir != null) addArg("gameDir", gameDir.getAbsolutePath());
|
||||
if (assetsDir != null) addArg("assetsDir", assetsDir.getAbsolutePath());
|
||||
if (profile != null) addArg("version", profile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectIntoClassLoader(LaunchClassLoader classLoader) {
|
||||
MixinBootstrap.init();
|
||||
MixinEnvironment.getDefaultEnvironment().setSide(MixinEnvironment.Side.CLIENT);
|
||||
MixinEnvironment.getDefaultEnvironment().setObfuscationContext(ObfuscationServiceMCP.NOTCH);
|
||||
Mixins.addConfiguration("mixins.baritone.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getLaunchTarget() {
|
||||
return "net.minecraft.client.main.Main";
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String[] getLaunchArguments() {
|
||||
return this.args.toArray(new String[0]);
|
||||
}
|
||||
|
||||
private void addArg(String label, String value) {
|
||||
if (!args.contains("--" + label) && value != null) {
|
||||
this.args.add("--" + label);
|
||||
this.args.add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
27
src/main/java/baritone/launch/BaritoneTweakerForge.java
Executable file
27
src/main/java/baritone/launch/BaritoneTweakerForge.java
Executable file
@@ -0,0 +1,27 @@
|
||||
package baritone.launch;
|
||||
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
import org.spongepowered.asm.mixin.MixinEnvironment;
|
||||
import org.spongepowered.tools.obfuscation.mcp.ObfuscationServiceMCP;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 10:09 PM
|
||||
*/
|
||||
public class BaritoneTweakerForge extends BaritoneTweaker {
|
||||
|
||||
@Override
|
||||
public final void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile) {
|
||||
this.args = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void injectIntoClassLoader(LaunchClassLoader classLoader) {
|
||||
super.injectIntoClassLoader(classLoader);
|
||||
MixinEnvironment.getDefaultEnvironment().setObfuscationContext(ObfuscationServiceMCP.SEARGE);
|
||||
}
|
||||
}
|
||||
17
src/main/java/baritone/launch/BaritoneTweakerOptifine.java
Executable file
17
src/main/java/baritone/launch/BaritoneTweakerOptifine.java
Executable file
@@ -0,0 +1,17 @@
|
||||
package baritone.launch;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 10:10 PM
|
||||
*/
|
||||
public class BaritoneTweakerOptifine extends BaritoneTweaker {
|
||||
|
||||
@Override
|
||||
public final void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile) {
|
||||
this.args = new ArrayList<>();
|
||||
}
|
||||
}
|
||||
26
src/main/java/baritone/launch/mixins/MixinGameSettings.java
Executable file
26
src/main/java/baritone/launch/mixins/MixinGameSettings.java
Executable file
@@ -0,0 +1,26 @@
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import baritone.bot.Baritone;
|
||||
import net.minecraft.client.settings.GameSettings;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 8/1/2018 12:28 AM
|
||||
*/
|
||||
@Mixin(GameSettings.class)
|
||||
public class MixinGameSettings {
|
||||
|
||||
@Redirect(
|
||||
method = "isKeyDown",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "org/lwjgl/input/Keyboard.isKeyDown(I)Z"
|
||||
)
|
||||
)
|
||||
private static boolean isKeyDown(int keyCode) {
|
||||
return Baritone.INSTANCE.getInputOverrideHandler().isKeyDown(keyCode);
|
||||
}
|
||||
}
|
||||
29
src/main/java/baritone/launch/mixins/MixinGuiContainer.java
Executable file
29
src/main/java/baritone/launch/mixins/MixinGuiContainer.java
Executable file
@@ -0,0 +1,29 @@
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import baritone.bot.Baritone;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 10:47 PM
|
||||
*/
|
||||
@Mixin(GuiContainer.class)
|
||||
public class MixinGuiContainer {
|
||||
|
||||
@Redirect(
|
||||
method = {
|
||||
"mouseClicked",
|
||||
"mouseReleased"
|
||||
},
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "org/lwjgl/input/Keyboard.isKeyDown(I)Z"
|
||||
)
|
||||
)
|
||||
private boolean isKeyDown(int keyCode) {
|
||||
return Baritone.INSTANCE.getInputOverrideHandler().isKeyDown(keyCode);
|
||||
}
|
||||
}
|
||||
50
src/main/java/baritone/launch/mixins/MixinGuiOverlayDebug.java
Executable file
50
src/main/java/baritone/launch/mixins/MixinGuiOverlayDebug.java
Executable file
@@ -0,0 +1,50 @@
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import baritone.bot.HookStateManager;
|
||||
import baritone.bot.Baritone;
|
||||
import net.minecraft.client.gui.GuiOverlayDebug;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
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.CallbackInfoReturnable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 10:28 PM
|
||||
*/
|
||||
@Mixin(GuiOverlayDebug.class)
|
||||
public abstract class MixinGuiOverlayDebug {
|
||||
|
||||
@Shadow protected abstract void renderDebugInfoRight(ScaledResolution scaledResolution);
|
||||
|
||||
@Redirect(
|
||||
method = "renderDebugInfo",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "net/minecraft/client/gui/GuiOverlayDebug.renderDebugInfoRight(Lnet/minecraft/client/gui/ScaledResolution;)V"
|
||||
)
|
||||
)
|
||||
private void onRenderDebugInfoRight(GuiOverlayDebug gui, ScaledResolution scaledResolution) {
|
||||
if (!Baritone.INSTANCE.getHookStateManager().shouldCancelDebugRenderRight()) {
|
||||
this.renderDebugInfoRight(scaledResolution);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "call",
|
||||
at = @At("HEAD"),
|
||||
cancellable = true
|
||||
)
|
||||
private void call(CallbackInfoReturnable<List<String>> cir) {
|
||||
HookStateManager hooks = Baritone.INSTANCE.getHookStateManager();
|
||||
|
||||
if (hooks.shouldOverrideDebugInfoLeft()) {
|
||||
cir.setReturnValue(hooks.getDebugInfoLeft());
|
||||
}
|
||||
}
|
||||
}
|
||||
30
src/main/java/baritone/launch/mixins/MixinGuiScreen.java
Executable file
30
src/main/java/baritone/launch/mixins/MixinGuiScreen.java
Executable file
@@ -0,0 +1,30 @@
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import baritone.bot.Baritone;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 10:38 PM
|
||||
*/
|
||||
@Mixin(GuiScreen.class)
|
||||
public class MixinGuiScreen {
|
||||
|
||||
@Redirect(
|
||||
method = {
|
||||
"isCtrlKeyDown",
|
||||
"isShiftKeyDown",
|
||||
"isAltKeyDown"
|
||||
},
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "org/lwjgl/input/Keyboard.isKeyDown(I)Z"
|
||||
)
|
||||
)
|
||||
private static boolean isKeyDown(int keyCode) {
|
||||
return Baritone.INSTANCE.getInputOverrideHandler().isKeyDown(keyCode);
|
||||
}
|
||||
}
|
||||
55
src/main/java/baritone/launch/mixins/MixinKeyBinding.java
Executable file
55
src/main/java/baritone/launch/mixins/MixinKeyBinding.java
Executable file
@@ -0,0 +1,55 @@
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import baritone.bot.Baritone;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.util.IntHashMap;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
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.CallbackInfoReturnable;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 11:44 PM
|
||||
*/
|
||||
@Mixin(KeyBinding.class)
|
||||
public abstract class MixinKeyBinding {
|
||||
|
||||
@Redirect(
|
||||
method = "onTick",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "net/minecraft/util/IntHashMap.lookup(I)Ljava/lang/Object;"
|
||||
)
|
||||
)
|
||||
private static Object lookup(IntHashMap<KeyBinding> HASH, int keyCode) {
|
||||
KeyBinding keyBinding = HASH.lookup(keyCode);
|
||||
|
||||
// If we're overriding the key state, we don't want to be incrementing the pressTime
|
||||
if (keyBinding != null && Baritone.INSTANCE.getInputOverrideHandler().isInputForcedDown(keyBinding))
|
||||
return null;
|
||||
|
||||
return keyBinding;
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "isPressed",
|
||||
at = @At("HEAD"),
|
||||
cancellable = true
|
||||
)
|
||||
private void isPressed(CallbackInfoReturnable<Boolean> cir) {
|
||||
if (Baritone.INSTANCE.getInputOverrideHandler().isInputForcedDown((KeyBinding) (Object) this))
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "isKeyDown",
|
||||
at = @At("HEAD"),
|
||||
cancellable = true
|
||||
)
|
||||
private void isKeyDown(CallbackInfoReturnable<Boolean> cir) {
|
||||
if (Baritone.INSTANCE.getInputOverrideHandler().isInputForcedDown((KeyBinding) (Object) this))
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
}
|
||||
23
src/main/java/baritone/launch/mixins/MixinMain.java
Executable file
23
src/main/java/baritone/launch/mixins/MixinMain.java
Executable file
@@ -0,0 +1,23 @@
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import net.minecraft.client.main.Main;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 10:18 PM
|
||||
*/
|
||||
@Mixin(Main.class)
|
||||
public class MixinMain {
|
||||
|
||||
@Inject(
|
||||
method = "main",
|
||||
at = @At("HEAD")
|
||||
)
|
||||
private static void main(String[] args, CallbackInfo ci) {
|
||||
System.setProperty("java.net.preferIPv4Stack", "true");
|
||||
}
|
||||
}
|
||||
93
src/main/java/baritone/launch/mixins/MixinMinecraft.java
Executable file
93
src/main/java/baritone/launch/mixins/MixinMinecraft.java
Executable file
@@ -0,0 +1,93 @@
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import baritone.bot.Baritone;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumActionResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.lib.Opcodes;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
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.LocalCapture;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
* @since 7/31/2018 10:51 PM
|
||||
*/
|
||||
@Mixin(Minecraft.class)
|
||||
public class MixinMinecraft {
|
||||
|
||||
@Shadow private int leftClickCounter;
|
||||
|
||||
@Inject(
|
||||
method = "init",
|
||||
at = @At("RETURN")
|
||||
)
|
||||
private void init(CallbackInfo ci) {
|
||||
Baritone.INSTANCE.init();
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "runTick",
|
||||
at = @At(
|
||||
value = "FIELD",
|
||||
opcode = Opcodes.GETFIELD,
|
||||
target = "net/minecraft/client/Minecraft.currentScreen:Lnet/minecraft/client/gui/GuiScreen;",
|
||||
ordinal = 5,
|
||||
shift = At.Shift.BY,
|
||||
by = -3
|
||||
)
|
||||
)
|
||||
private void runTick(CallbackInfo ci) {
|
||||
Baritone.INSTANCE.getGameEventHandler().onTick();
|
||||
}
|
||||
|
||||
@Redirect(
|
||||
method = "runTickKeyboard",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "org/lwjgl/input/Keyboard.isKeyDown(I)Z"
|
||||
)
|
||||
)
|
||||
private boolean Keyboard$isKeyDown(int keyCode) {
|
||||
return Baritone.INSTANCE.getInputOverrideHandler().isKeyDown(keyCode);
|
||||
}
|
||||
|
||||
@Redirect(
|
||||
method = {
|
||||
"setIngameFocus",
|
||||
"runTick"
|
||||
},
|
||||
at = @At(
|
||||
value = "FIELD",
|
||||
opcode = Opcodes.PUTFIELD,
|
||||
target = "net/minecraft/client/Minecraft.leftClickCounter:I",
|
||||
ordinal = 0
|
||||
)
|
||||
)
|
||||
private void setLeftClickCounter(Minecraft mc, int value) {
|
||||
if (!Baritone.INSTANCE.isInitialized() || !Baritone.INSTANCE.getInputOverrideHandler().isInputForcedDown(mc.gameSettings.keyBindAttack))
|
||||
this.leftClickCounter = value;
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "rightClickMouse",
|
||||
at = @At(
|
||||
value = "INVOKE_ASSIGN",
|
||||
target = "net/minecraft/client/entity/EntityPlayerSP.swingArm(Lnet/minecraft/util/EnumHand;)V"
|
||||
),
|
||||
locals = LocalCapture.CAPTURE_FAILHARD
|
||||
)
|
||||
private void postSwingArm(CallbackInfo ci, ItemStack stack, BlockPos pos, int stackCount, EnumActionResult result) {
|
||||
Minecraft mc = (Minecraft) (Object) this;
|
||||
Baritone bot = Baritone.INSTANCE;
|
||||
|
||||
bot.getMemory().scanBlock(pos);
|
||||
bot.getMemory().scanBlock(pos.offset(mc.objectMouseOver.sideHit));
|
||||
bot.getActionHandler().onPlacedBlock(stack, pos);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user