Fix ShieldBypass unable to perform criticals and stuck in blocks (#275)

Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com>
This commit is contained in:
OnlyRain233
2023-07-28 20:31:11 +08:00
committed by GitHub
parent 699d510003
commit ecf2d1a19b
6 changed files with 102 additions and 70 deletions

View File

@@ -34,9 +34,9 @@ jobs:
- uses: "marvinpinto/action-automatic-releases@latest" - uses: "marvinpinto/action-automatic-releases@latest"
with: with:
repo_token: "${{ secrets.GITHUB_TOKEN }}" repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest-1.20" automatic_release_tag: "latest-1.20.1"
prerelease: false prerelease: false
title: "1.20 Build" title: "1.20.1 Build"
files: | files: |
./build/libs/*.jar ./build/libs/*.jar

View File

@@ -2,8 +2,8 @@
org.gradle.jvmargs=-Xmx2G org.gradle.jvmargs=-Xmx2G
# Fabric Properties # Fabric Properties
minecraft_version=1.20 minecraft_version=1.20.1
yarn_version=1.20+build.1 yarn_version=1.20.1+build.1
loader_version=0.14.21 loader_version=0.14.21
# Mod Properties # Mod Properties

View File

@@ -45,7 +45,7 @@ public class AutoSignMixin extends Module {
super(category, name, description); super(category, name, description);
} }
@Inject(method = "onOpenScreen",at = @At("HEAD")) @Inject(method = "onOpenScreen",at = @At(value = "INVOKE", target = "Lmeteordevelopment/meteorclient/mixin/AbstractSignEditScreenAccessor;getSign()Lnet/minecraft/block/entity/SignBlockEntity;"))
private void beforeGetSign(OpenScreenEvent event, CallbackInfo info) { private void beforeGetSign(OpenScreenEvent event, CallbackInfo info) {
if (random.get()) { if (random.get()) {
text = new String[4]; text = new String[4];

View File

@@ -1,10 +1,13 @@
package anticope.rejects.mixin.meteor.modules; package anticope.rejects.mixin.meteor.modules;
import anticope.rejects.modules.ShieldBypass;
import anticope.rejects.utils.RejectsUtils; import anticope.rejects.utils.RejectsUtils;
import meteordevelopment.meteorclient.events.Cancellable;
import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Category; import meteordevelopment.meteorclient.systems.modules.Category;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.combat.KillAura; import meteordevelopment.meteorclient.systems.modules.combat.KillAura;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
@@ -37,9 +40,6 @@ public class KillAuraMixin extends Module {
@Shadow @Shadow
@Final @Final
private Setting<Boolean> customDelay; private Setting<Boolean> customDelay;
@Shadow
@Final
private Setting<Integer> hitDelay;
private final Random random = new Random(); private final Random random = new Random();
private Setting<Double> fov; private Setting<Double> fov;
@@ -123,6 +123,19 @@ public class KillAuraMixin extends Module {
hitTimer -= random.nextInt(randomDelayMax.get()); hitTimer -= random.nextInt(randomDelayMax.get());
} }
@Inject(method = "attack", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;attackEntity(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/entity/Entity;)V"), cancellable = true)
private void onHit(Entity target, CallbackInfo info) {
ShieldBypass shieldBypass = Modules.get().get(ShieldBypass.class);
if (shieldBypass.isActive()) {
Cancellable dummyEvent = new Cancellable();
shieldBypass.bypass(target, dummyEvent);
if (dummyEvent.isCancelled()) {
hitTimer = 0;
info.cancel();
}
}
}
private double randomOffset() { private double randomOffset() {
return Math.random() * 4 - 2; return Math.random() * 4 - 2;
} }

View File

@@ -2,6 +2,7 @@ package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon; import anticope.rejects.MeteorRejectsAddon;
import anticope.rejects.utils.WorldUtils; import anticope.rejects.utils.WorldUtils;
import meteordevelopment.meteorclient.events.entity.player.BreakBlockEvent;
import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
@@ -139,6 +140,21 @@ public class AutoFarm extends Module {
replantMap.clear(); replantMap.clear();
} }
@EventHandler
private void onBreakBlock(BreakBlockEvent event) {
BlockState state = mc.world.getBlockState(event.blockPos);
Block block = state.getBlock();
if (onlyReplant.get()) {
Item item = null;
if (block == Blocks.WHEAT) item = Items.WHEAT_SEEDS;
else if (block == Blocks.CARROTS) item = Items.CARROT;
else if (block == Blocks.POTATOES) item = Items.POTATO;
else if (block == Blocks.BEETROOTS) item = Items.BEETROOT_SEEDS;
else if (block == Blocks.NETHER_WART) item = Items.NETHER_WART;
if (item != null) replantMap.put(event.blockPos, item);
}
}
@EventHandler @EventHandler
private void onTick(TickEvent.Pre event) { private void onTick(TickEvent.Pre event) {
actions = 0; actions = 0;
@@ -187,15 +203,6 @@ public class AutoFarm extends Module {
mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(Utils.vec3d(pos), Direction.UP, pos, false)); mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(Utils.vec3d(pos), Direction.UP, pos, false));
else { else {
mc.interactionManager.updateBlockBreakingProgress(pos, Direction.UP); mc.interactionManager.updateBlockBreakingProgress(pos, Direction.UP);
if (onlyReplant.get()) {
Item item = null;
if (block == Blocks.WHEAT) item = Items.WHEAT_SEEDS;
else if (block == Blocks.CARROTS) item = Items.CARROT;
else if (block == Blocks.POTATOES) item = Items.POTATO;
else if (block == Blocks.BEETROOTS) item = Items.BEETROOT_SEEDS;
else if (block == Blocks.NETHER_WART) item = Items.NETHER_WART;
if (item != null) replantMap.put(pos, item);
}
} }
return true; return true;
} }

View File

@@ -1,25 +1,34 @@
package anticope.rejects.modules; package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon; import anticope.rejects.MeteorRejectsAddon;
import meteordevelopment.meteorclient.events.entity.player.AttackEntityEvent; import meteordevelopment.meteorclient.events.Cancellable;
import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent;
import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.combat.KillAura;
import meteordevelopment.meteorclient.utils.misc.input.KeyAction;
import meteordevelopment.meteorclient.utils.player.InvUtils;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.item.AxeItem;
import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT;
public class ShieldBypass extends Module { public class ShieldBypass extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final Setting<Boolean> rotate = sgGeneral.add(new BoolSetting.Builder() private final Setting<Boolean> ignoreAxe = sgGeneral.add(new BoolSetting.Builder()
.name("rotate") .name("ignore-axe")
.description("Rotate towards enemy.") .description("Ignore if you are holding an axe.")
.defaultValue(true) .defaultValue(true)
.build() .build()
); );
@@ -28,54 +37,57 @@ public class ShieldBypass extends Module {
super(MeteorRejectsAddon.CATEGORY, "shield-bypass", "Attempts to teleport you behind enemies to bypass shields."); super(MeteorRejectsAddon.CATEGORY, "shield-bypass", "Attempts to teleport you behind enemies to bypass shields.");
} }
private Vec3d originalPos;
private Entity target;
@Override
public void onDeactivate() {
originalPos = null;
target = null;
}
@EventHandler @EventHandler
private void onTick(TickEvent.Post event) { private void onMouseButton(MouseButtonEvent event) {
if (originalPos != null && target != null) { if (Modules.get().isActive(KillAura.class)) return;
mc.interactionManager.attackEntity(mc.player, target); if (mc.currentScreen == null && !mc.player.isUsingItem() && event.action == KeyAction.Press && event.button == GLFW_MOUSE_BUTTON_LEFT) {
mc.player.setPosition(originalPos); if (mc.crosshairTarget instanceof EntityHitResult result) {
if (rotate.get()) Rotations.rotate(-mc.player.getYaw(), mc.player.getPitch(), -10); bypass(result.getEntity(), event);
}
} }
originalPos = null;
target = null;
} }
@EventHandler private boolean isBlocked(Vec3d pos, LivingEntity target) {
private void onAttackEntity(AttackEntityEvent event) { Vec3d vec3d3 = pos.relativize(target.getPos()).normalize();
if (event.entity instanceof LivingEntity e && e.isBlocking()) { return new Vec3d(vec3d3.x, 0.0d, vec3d3.z).dotProduct(target.getRotationVec(1.0f)) >= 0.0d;
if (originalPos != null) return; }
Vec3d originalPos = mc.player.getPos(); public void bypass(Entity target, Cancellable event) {
if (target instanceof LivingEntity e && e.isBlocking()) {
if (ignoreAxe.get() && InvUtils.testInMainHand(i -> i.getItem() instanceof AxeItem)) return;
// Shield check // Shield check
Vec3d vec3d3 = originalPos.relativize(e.getPos()).normalize(); if (isBlocked(mc.player.getPos(), e)) return;
if (new Vec3d(vec3d3.x, 0.0d, vec3d3.z).dotProduct(e.getRotationVec(1.0f)) >= 0.0d) return;
Vec3d offset = Vec3d.fromPolar(0, mc.player.getYaw()).normalize().multiply(2);
Vec3d newPos = e.getPos().add(offset);
// Move up to prevent tping into blocks
boolean inside = false;
for (float i = 0; i < 4; i += 0.25) {
Vec3d targetPos = newPos.add(0, i, 0);
boolean collides = !mc.world.isSpaceEmpty(null, e.getBoundingBox().offset(offset).offset(targetPos.subtract(newPos)));
if (!inside && collides) {
inside = true;
} else if (inside && !collides) {
newPos = targetPos;
break;
}
}
if (!isBlocked(newPos, e)) return;
double range = mc.player.distanceTo(e);
while (range >= 0) {
Vec3d tp = Vec3d.fromPolar(0, mc.player.getYaw()).normalize().multiply(range);
Vec3d newPos = tp.add(e.getPos());
BlockPos pos = BlockPos.ofFloored(newPos);
for (int i = -2; i <= 2; i++) {
if (mc.player.getWorld().getBlockState(pos.up(i)).isAir() && mc.player.getWorld().getBlockState(pos).isAir()) {
this.originalPos = originalPos;
if (rotate.get()) Rotations.rotate(-mc.player.getYaw(), mc.player.getPitch(), -10);
target = e;
event.cancel(); event.cancel();
mc.player.setPosition(newPos.add(0, i, 0));
return; mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(newPos.getX(), newPos.getY(), newPos.getZ(), true));
}
} mc.getNetworkHandler().sendPacket(PlayerInteractEntityC2SPacket.attack(e, mc.player.isSneaking()));
range--; mc.getNetworkHandler().sendPacket(new HandSwingC2SPacket(mc.player.getActiveHand()));
} mc.player.resetLastAttackedTicks();
mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), true));
} }
} }
} }