Начинающий
- Статус
- Оффлайн
- Регистрация
- 1 Авг 2024
- Сообщения
- 72
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
ss:
Код:
package org.excellent.client.managers.module.impl.movement;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import org.excellent.client.api.events.orbit.EventHandler;
import org.excellent.client.managers.events.player.UpdateEvent;
import org.excellent.client.managers.module.Category;
import org.excellent.client.managers.module.Module;
import org.excellent.client.managers.module.ModuleInfo;
@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleInfo(name = "Spider", category = Category.MOVEMENT)
public class Spider extends Module {
int prevSlot = -1;
long lastUseTime = 0L;
long lastGroundTime = System.currentTimeMillis();
@EventHandler
public void onUpdate(UpdateEvent event) {
if (mc.player == null || mc.world == null) return;
if (mc.player.isInWater()) {
mc.player.motion.y = 0.46;
return;
}
if (mc.player.isOnGround()) {
lastGroundTime = System.currentTimeMillis();
return;
}
// сколько в воздухе
long airTime = System.currentTimeMillis() - lastGroundTime;
if (airTime < 120L) return;
if (!mc.player.collidedHorizontally) {
mc.gameSettings.keyBindSneak.setPressed(false);
mc.gameSettings.keyBindJump.setPressed(false);
return;
}
int waterSlot = findWaterBucket();
if (waterSlot == -1) return;
long cooldown = getCooldown();
long now = System.currentTimeMillis();
if (now - lastUseTime < cooldown) return;
mc.gameSettings.keyBindJump.setPressed(true);
prevSlot = mc.player.inventory.currentItem;
mc.player.connection.sendPacket(new CHeldItemChangePacket(waterSlot));
mc.player.inventory.currentItem = waterSlot;
mc.player.connection.sendPacket(
new CPlayerTryUseItemPacket(Hand.MAIN_HAND)
);
mc.player.motion.y = 0.45;
mc.player.connection.sendPacket(new CHeldItemChangePacket(prevSlot));
mc.player.inventory.currentItem = prevSlot;
mc.gameSettings.keyBindSneak.setPressed(true);
lastUseTime = now;
}
private int findWaterBucket() {
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (!stack.isEmpty() && stack.getItem() == Items.WATER_BUCKET) {
return i;
}
}
return -1;
}
private long getCooldown() {
double dist = distanceToGround();
return dist <= 9.9 ? 450L : 1L;
}
private double distanceToGround() {
double y = mc.player.getPosY();
for (double d = y; d > 0; d -= 0.1) {
BlockPos pos = new BlockPos(mc.player.getPosX(), d, mc.player.getPosZ());
if (!mc.world.isAirBlock(pos)) {
return y - (d + 1.0);
}
}
return 0;
}
@Override
public void onDisable() {
mc.gameSettings.keyBindSneak.setPressed(false);
mc.gameSettings.keyBindJump.setPressed(false);
prevSlot = -1;
lastUseTime = 0L;
}
}