diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index f9394db09b..dc1be1db95 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -536,7 +536,7 @@ private void initWorld() { add(new BuildHeight()); add(new Collisions()); add(new EChestFarmer()); - add(new EndermanLook()); + add(new MobLook()); add(new Flamethrower()); add(new HighwayBuilder()); add(new LiquidFiller()); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/EndermanLook.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/EndermanLook.java deleted file mode 100644 index aed2241daf..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/EndermanLook.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). - * Copyright (c) Meteor Development. - */ - -package meteordevelopment.meteorclient.systems.modules.world; - -import meteordevelopment.meteorclient.events.world.TickEvent; -import meteordevelopment.meteorclient.settings.BoolSetting; -import meteordevelopment.meteorclient.settings.EnumSetting; -import meteordevelopment.meteorclient.settings.Setting; -import meteordevelopment.meteorclient.settings.SettingGroup; -import meteordevelopment.meteorclient.systems.modules.Categories; -import meteordevelopment.meteorclient.systems.modules.Module; -import meteordevelopment.meteorclient.utils.entity.Target; -import meteordevelopment.meteorclient.utils.player.Rotations; -import meteordevelopment.orbit.EventHandler; -import net.minecraft.block.Blocks; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.mob.EndermanEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.Vec3d; - -public class EndermanLook extends Module { - private final SettingGroup sgGeneral = settings.getDefaultGroup(); - - private final Setting lookMode = sgGeneral.add(new EnumSetting.Builder() - .name("look-mode") - .description("How this module behaves.") - .defaultValue(Mode.Away) - .build() - ); - - private final Setting stun = sgGeneral.add(new BoolSetting.Builder() - .name("stun-hostiles") - .description("Automatically stares at hostile endermen to stun them in place.") - .defaultValue(true) - .visible(() -> lookMode.get() == Mode.Away) - .build() - ); - - public EndermanLook() { - super(Categories.World, "enderman-look", "Either looks at all Endermen or prevents you from looking at Endermen."); - } - - @EventHandler - private void onTick(TickEvent.Pre event) { - // if either are true nothing happens when you look at an enderman - if (mc.player.getEquippedStack(EquipmentSlot.HEAD).isOf(Blocks.CARVED_PUMPKIN.asItem()) || mc.player.getAbilities().creativeMode) return; - - for (Entity entity : mc.world.getEntities()) { - if (!(entity instanceof EndermanEntity enderman) || !enderman.isAlive() || !mc.player.canSee(enderman)) continue; - - switch (lookMode.get()) { - case Away -> { - if (enderman.isAngry() && stun.get()) Rotations.rotate(Rotations.getYaw(enderman), Rotations.getPitch(enderman, Target.Head), -75, null); - else if (angleCheck(enderman)) Rotations.rotate(mc.player.getYaw(), 90, -75, null); - } - case At -> { - if (!enderman.isAngry()) Rotations.rotate(Rotations.getYaw(enderman), Rotations.getPitch(enderman, Target.Head), -75, null); - } - } - } - } - - /** - * @see EndermanEntity#isPlayerStaring(PlayerEntity) - */ - private boolean angleCheck(EndermanEntity entity) { - Vec3d vec3d = mc.player.getRotationVec(1.0F).normalize(); - Vec3d vec3d2 = new Vec3d(entity.getX() - mc.player.getX(), entity.getEyeY() - mc.player.getEyeY(), entity.getZ() - mc.player.getZ()); - - double d = vec3d2.length(); - vec3d2 = vec3d2.normalize(); - double e = vec3d.dotProduct(vec3d2); - - return e > 1.0D - 0.025D / d; - } - - public enum Mode { - At, - Away - } -} diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/MobLook.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/MobLook.java new file mode 100644 index 0000000000..e51e3afbd4 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/MobLook.java @@ -0,0 +1,103 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.systems.modules.world; + +import meteordevelopment.meteorclient.events.world.TickEvent; +import meteordevelopment.meteorclient.settings.BoolSetting; +import meteordevelopment.meteorclient.settings.EnumSetting; +import meteordevelopment.meteorclient.settings.Setting; +import meteordevelopment.meteorclient.settings.SettingGroup; +import meteordevelopment.meteorclient.systems.modules.Categories; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.meteorclient.utils.entity.Target; +import meteordevelopment.meteorclient.utils.player.Rotations; +import meteordevelopment.orbit.EventHandler; +import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.mob.CreakingEntity; +import net.minecraft.entity.mob.EndermanEntity; +import net.minecraft.util.math.Vec3d; + +public class MobLook extends Module { + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + + private final Setting endermenMode = sgGeneral.add(new EnumSetting.Builder() + .name("endermen-mode") + .description("Whether to look at/away from endermen") + .defaultValue(Mode.Away) + .build() + ); + + private final Setting stunHostiles = sgGeneral.add(new BoolSetting.Builder() + .name("stun-hostiles") + .description("Automatically stares at hostile endermen to stun them in place.") + .defaultValue(true) + .visible(() -> endermenMode.get() == Mode.Away) + .build() + ); + + private final Setting stunCreaking = sgGeneral.add(new BoolSetting.Builder() + .name("stun-creaking") + .description("Automatically stares at hostile creaking to stun them in place.") + .defaultValue(true) + .build() + ); + + public MobLook() { + super(Categories.World, "mob-look", "Look at/away from endermen and creaking to prevent them from moving."); + } + + @EventHandler + private void onTick(TickEvent.Pre event) { + if (mc.player.getAbilities().creativeMode) return; + + for (Entity entity : mc.world.getEntities()) { + if (stunCreaking.get() && entity instanceof CreakingEntity creaking && creaking.isAlive() && mc.player.canSee(creaking)) { + Rotations.rotate(Rotations.getYaw(creaking), Rotations.getPitch(creaking), -75); + } + + if (entity instanceof EndermanEntity enderman && enderman.isAlive() && mc.player.canSee(enderman)) { + if (mc.player.getEquippedStack(EquipmentSlot.HEAD).isOf(Blocks.CARVED_PUMPKIN.asItem())) continue; + + switch (endermenMode.get()) { + case Away -> { + if (enderman.isAngry() && stunHostiles.get()) { + Rotations.rotate(Rotations.getYaw(enderman), Rotations.getPitch(enderman, Target.Head), -75); + } else if (playerIsLookingAt(enderman)) { + Rotations.rotate(mc.player.getYaw(), 90, -75); + } + } + case At -> { + if (!enderman.isAngry()) { + Rotations.rotate(Rotations.getYaw(enderman), Rotations.getPitch(enderman, Target.Head), -75); + } + } + } + } + } + } + + /** + * @see LivingEntity#isEntityLookingAtMe(LivingEntity, double, boolean, boolean, double...) + */ + private boolean playerIsLookingAt(EndermanEntity entity) { + Vec3d vec3d = mc.player.getRotationVec(1.0F).normalize(); + Vec3d vec3d2 = new Vec3d(entity.getX() - mc.player.getX(), entity.getEyeY() - mc.player.getEyeY(), entity.getZ() - mc.player.getZ()); + + double d = vec3d2.length(); + vec3d2 = vec3d2.normalize(); + double e = vec3d.dotProduct(vec3d2); + + return e > 1.0D - 0.025D / d; + } + + public enum Mode { + At, + Away + } +}