Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chocolate Eggs have ESP #832

Closed
nea89o opened this issue Jul 10, 2024 · 5 comments · Fixed by #845
Closed

Chocolate Eggs have ESP #832

nea89o opened this issue Jul 10, 2024 · 5 comments · Fixed by #845
Labels
bug Something isn't working

Comments

@nea89o
Copy link
Contributor

nea89o commented Jul 10, 2024

What happened?

The chocolate egg finder detects armor stands through walls impossible to see by the player. Hypixel does not really allow ESP like that, a proper approach would be to use the particles from the egglocater instead.

Screenshots

image
This egg was detected without me ever seeing it or getting it shared in chat.

Log output

https://mclo.gs/J1NFRDp

Minecraft Version

1.21.0

Skyblocker Version

1.21.1+1.21

Additional context

No response

@nea89o nea89o added the bug Something isn't working label Jul 10, 2024
@nea89o
Copy link
Contributor Author

nea89o commented Jul 10, 2024

Skyhanni uses the visible particles from the detector, skyblocker scans the world for armor stands even when behind walls

@Fluboxer
Copy link
Contributor

Fluboxer commented Jul 10, 2024

pretty sure no armorstands involved in it, at least in way you say

@AzureAaron
Copy link
Collaborator

Skyblocker listens to armour stand entity update packets, we don't actively scan the world just to clarify this but the functionality should still be changed

@nea89o
Copy link
Contributor Author

nea89o commented Jul 10, 2024

pretty sure no armorstands involved in it, at least in way you say

public static void checkIfEgg(ArmorStandEntity armorStand) {
if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableEggFinder) return;
if (SkyblockTime.skyblockSeason.get() != SkyblockTime.Season.SPRING) return;
if (armorStand.hasCustomName() || !armorStand.isInvisible() || !armorStand.shouldHideBasePlate()) return;
if (Utils.getLocation() == Location.UNKNOWN) { //The location is unknown upon world change and will be changed via /locraw soon, so we can queue it for now
armorStandQueue.add(armorStand);
return;
}
if (isLocationCorrect) handleArmorStand(armorStand);
}
private static void handleArmorStand(ArmorStandEntity armorStand) {
for (ItemStack itemStack : armorStand.getArmorItems()) {
ItemUtils.getHeadTextureOptional(itemStack).ifPresent(texture -> {
for (EggType type : EggType.entries) { //Compare blockPos rather than entity to avoid incorrect matches when the entity just moves rather than a new one being spawned elsewhere
if (texture.equals(type.texture) && (type.egg == null || !type.egg.entity.getBlockPos().equals(armorStand.getBlockPos()))) {
handleFoundEgg(armorStand, type);
return;
}
}
});
}
}
it definitely uses armor stand to detect things

@XPed0bearZQZE
Copy link

XPed0bearZQZE commented Jul 10, 2024

pretty sure no armorstands involved in it, at least in way you say

public static void checkIfEgg(ArmorStandEntity armorStand) {
if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableEggFinder) return;
if (SkyblockTime.skyblockSeason.get() != SkyblockTime.Season.SPRING) return;
if (armorStand.hasCustomName() || !armorStand.isInvisible() || !armorStand.shouldHideBasePlate()) return;
if (Utils.getLocation() == Location.UNKNOWN) { //The location is unknown upon world change and will be changed via /locraw soon, so we can queue it for now
armorStandQueue.add(armorStand);
return;
}
if (isLocationCorrect) handleArmorStand(armorStand);
}
private static void handleArmorStand(ArmorStandEntity armorStand) {
for (ItemStack itemStack : armorStand.getArmorItems()) {
ItemUtils.getHeadTextureOptional(itemStack).ifPresent(texture -> {
for (EggType type : EggType.entries) { //Compare blockPos rather than entity to avoid incorrect matches when the entity just moves rather than a new one being spawned elsewhere
if (texture.equals(type.texture) && (type.egg == null || !type.egg.entity.getBlockPos().equals(armorStand.getBlockPos()))) {
handleFoundEgg(armorStand, type);
return;
}
}
});
}
}

it definitely uses armor stand to detect things

@Inject(method = "onEntityTrackerUpdate", at = @At("TAIL"))
private void skyblocker$onEntityTrackerUpdate(EntityTrackerUpdateS2CPacket packet, CallbackInfo ci, @Local Entity entity) {
if (!(entity instanceof ArmorStandEntity armorStandEntity)) return;
EggFinder.checkIfEgg(armorStandEntity);
try { //Prevent packet handling fails if something goes wrong so that entity trackers still update, just without compact damage numbers
CompactDamage.compactDamage(armorStandEntity);
} catch (Exception e) {
LOGGER.error("[Skyblocker Compact Damage] Failed to compact damage number", e);
}
}

as we said, it depends on packets not scanning entities

but it's indeed cheaty rn, and we will nerf it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants