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:
4
.github/workflows/gradle.yml
vendored
4
.github/workflows/gradle.yml
vendored
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user