Skip to content

Commit

Permalink
Add entities to AutoLog (MeteorDevelopment#4766)
Browse files Browse the repository at this point in the history
  • Loading branch information
AnandBhasme authored Jul 23, 2024
1 parent 4dc99b3 commit 271a0e5
Showing 1 changed file with 96 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,14 @@

package meteordevelopment.meteorclient.systems.modules.misc;

import java.util.HashMap;
import java.util.Set;
import java.util.Map;

import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.EntityTypeListSetting;
import meteordevelopment.meteorclient.settings.IntSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
Expand All @@ -20,15 +25,18 @@
import meteordevelopment.meteorclient.utils.player.PlayerUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.entity.Entity;
import net.minecraft.entity.decoration.EndCrystalEntity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.packet.s2c.common.DisconnectS2CPacket;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Colors;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;

public class AutoLog extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final SettingGroup sgEntities = settings.createGroup("Entities");

private final Setting<Integer> health = sgGeneral.add(new IntSetting.Builder()
.name("health")
Expand Down Expand Up @@ -60,20 +68,47 @@ public class AutoLog extends Module {
.build()
);

private final Setting<Boolean> crystalLog = sgGeneral.add(new BoolSetting.Builder()
.name("crystal-nearby")
.description("Disconnects when a crystal appears near you.")
.defaultValue(false)
private final Setting<Set<EntityType<?>>> entities = sgEntities.add(new EntityTypeListSetting.Builder()
.name("entities")
.description("Disconnects when a specified entity is present within a specified range.")
.defaultValue(EntityType.END_CRYSTAL)
.build()
);

private final Setting<Boolean> useTotalCount = sgEntities.add(new BoolSetting.Builder()
.name("use-total-count")
.description("Toggle between counting the total number of all selected entities or each entity individually.")
.defaultValue(true)
.visible(() -> !entities.get().isEmpty())
.build());

private final Setting<Integer> combinedEntityThreshold = sgEntities.add(new IntSetting.Builder()
.name("combined-entity-threshold")
.description("The minimum total number of selected entities that must be near you before disconnection occurs.")
.defaultValue(10)
.min(1)
.sliderMax(32)
.visible(() -> useTotalCount.get() && !entities.get().isEmpty())
.build()
);

private final Setting<Integer> range = sgGeneral.add(new IntSetting.Builder()
private final Setting<Integer> individualEntityThreshold = sgEntities.add(new IntSetting.Builder()
.name("individual-entity-threshold")
.description("The minimum number of entities individually that must be near you before disconnection occurs.")
.defaultValue(2)
.min(1)
.sliderMax(16)
.visible(() -> !useTotalCount.get() && !entities.get().isEmpty())
.build()
);

private final Setting<Integer> range = sgEntities.add(new IntSetting.Builder()
.name("range")
.description("How close a crystal has to be to you before you disconnect.")
.defaultValue(4)
.range(1, 10)
.sliderMax(5)
.visible(crystalLog::get)
.description("How close an entity has to be to you before you disconnect.")
.defaultValue(5)
.min(1)
.sliderMax(16)
.visible(() -> !entities.get().isEmpty())
.build()
);

Expand All @@ -91,6 +126,10 @@ public class AutoLog extends Module {
.build()
);

//Declaring variables outside the loop for better efficiency
private final Object2IntMap<EntityType<?>> entityCounts = new Object2IntOpenHashMap<>();
private int totalEntities = 0;

public AutoLog() {
super(Categories.Combat, "auto-log", "Automatically disconnects you when certain requirements are met.");
}
Expand All @@ -110,31 +149,63 @@ private void onTick(TickEvent.Post event) {
}
}

if (smart.get() && playerHealth + mc.player.getAbsorptionAmount() - PlayerUtils.possibleHealthReductions() < health.get()){
if (smart.get() && playerHealth + mc.player.getAbsorptionAmount()
- PlayerUtils.possibleHealthReductions() < health.get()) {
disconnect("Health was going to be lower than " + health.get() + ".");
if (toggleOff.get()) this.toggle();
}


if (!onlyTrusted.get() && !instantDeath.get() && !crystalLog.get()) return; // only check all entities if needed
if (!onlyTrusted.get() && !instantDeath.get() && entities.get().isEmpty())
return; // only check all entities if needed

for (Entity entity : mc.world.getEntities()) {
if (entity instanceof PlayerEntity player && player.getUuid() != mc.player.getUuid()) {
if (onlyTrusted.get() && player != mc.player && !Friends.get().isFriend(player)) {
disconnect("A non-trusted player appeared in your render distance.");
if (toggleOff.get()) this.toggle();
break;
disconnect("A non-trusted player appeared in your render distance.");
if (toggleOff.get()) this.toggle();
break;
}
if (instantDeath.get() && PlayerUtils.isWithin(entity, 8) && DamageUtils.getAttackDamage(player, mc.player)
> playerHealth + mc.player.getAbsorptionAmount()) {
> playerHealth + mc.player.getAbsorptionAmount()) {
disconnect("Anti-32k measures.");
if (toggleOff.get()) this.toggle();
if (toggleOff.get())
this.toggle();
break;
}
}
if (crystalLog.get() && entity instanceof EndCrystalEntity && PlayerUtils.isWithin(entity, range.get())) {
disconnect("End Crystal appeared within specified range.");
if (toggleOff.get()) this.toggle();
}

// Entities detection Logic
if (!entities.get().isEmpty()) {
// Reset totalEntities count and clear the entityCounts map
totalEntities = 0;
entityCounts.clear();

// Iterate through all entities in the world and count the ones that match the selected types and are within range
for (Entity entity : mc.world.getEntities()) {
if (PlayerUtils.isWithin(entity, range.get()) && entities.get().contains(entity.getType())) {
totalEntities++;
if (!useTotalCount.get()) {
entityCounts.put(entity.getType(), entityCounts.getOrDefault(entity.getType(), 0) + 1);
}
}
}

if (useTotalCount.get() && totalEntities >= combinedEntityThreshold.get()) {
disconnect("Total number of selected entities within range exceeded the limit.");
if (toggleOff.get())
this.toggle();
} else if (!useTotalCount.get()) {
// Check if the count of each entity type exceeds the specified limit
for (Object2IntMap.Entry<EntityType<?>> entry : entityCounts.object2IntEntrySet()) {
if (entry.getIntValue() >= individualEntityThreshold.get()) {
disconnect("Number of " + entry.getKey().getName().getString()
+ " within range exceeded the limit.");
if (toggleOff.get())
this.toggle();
break;
}
}
}
}
}
Expand All @@ -157,11 +228,11 @@ private void healthListener(TickEvent.Post event) {
if (isActive()) disableHealthListener();

else if (Utils.canUpdate()
&& !mc.player.isDead()
&& mc.player.getHealth() > health.get()) {
&& !mc.player.isDead()
&& mc.player.getHealth() > health.get()) {
toggle();
disableHealthListener();
}
}
}
}

Expand Down

0 comments on commit 271a0e5

Please sign in to comment.