Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 24 Май 2023
- Сообщения
- 53
- Реакции
- 3
- Выберите загрузчик игры
- Vanilla
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Всем привет, это ноуслоу с луком и арбалетом, работает на серваках с гримом. Нужно положить лук/арбалет в хотбар. excellent ready
ss -
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.
noslow:
package xyz.pub.client.managers.module.impl.movement;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.UseAction;
import net.minecraft.network.play.client.CClickWindowPacket;
import net.minecraft.network.play.client.CPlayerDiggingPacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import xyz.pub.client.api.events.orbit.EventHandler;
import xyz.pub.client.managers.events.other.SlowWalkingEvent;
import xyz.pub.client.managers.events.player.UpdateEvent;
import xyz.pub.client.managers.module.Category;
import xyz.pub.client.managers.module.Module;
import xyz.pub.client.managers.module.ModuleInfo;
import xyz.pub.client.managers.module.settings.impl.BooleanSetting;
import xyz.pub.client.managers.module.settings.impl.ModeSetting;
import xyz.pub.client.utils.other.Instance;
import xyz.pub.client.utils.player.MoveUtil;
import xyz.pub.lib.util.time.StopWatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleInfo(name = "NoSlow", category = Category.MOVEMENT)
public class NoSlow extends Module {
public static NoSlow getInstance() {
return Instance.get(NoSlow.class);
}
private final ModeSetting mode = new ModeSetting(this, "Mode", "GrimOld", "Test", "GrimBow", "GrimCrossbow");
private final BooleanSetting onlyOnGround = new BooleanSetting(this, "Только на земле", false)
.setVisible(() -> mode.is("GrimBow") || mode.is("GrimCrossbow"));
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private final StopWatch stopWatch = new StopWatch();
private ItemStack originalOffhandItem = ItemStack.EMPTY;
private boolean isSwapping = false;
private final StopWatch bowSwapTimer = new StopWatch();
private final StopWatch crossbowSwapTimer = new StopWatch();
@EventHandler
public void onUpdate(UpdateEvent e) {
if (mode.is("GrimBow") && mc.player != null) {
handleGrimBowUpdate();
}
if (mode.is("GrimCrossbow") && mc.player != null) {
handleGrimCrossbowUpdate();
}
}
@EventHandler
public void onSlowWalk(SlowWalkingEvent e) {
if (mc.player == null || mc.player.isElytraFlying()) return;
switch (mode.getValue()) {
case "GrimOld" -> {
mc.player.connection.sendPacket(new CPlayerDiggingPacket(CPlayerDiggingPacket.Action.ABORT_DESTROY_BLOCK, mc.player.getPosition().up(), Direction.NORTH));
e.cancel();
}
case "Test" -> handleTestMode(e);
case "GrimBow" -> handleGrimBowMode(e);
case "GrimCrossbow" -> handleGrimCrossbowMode(e);
}
}
private void handleTestMode(SlowWalkingEvent event) {
if (mc.player == null || mc.player.isElytraFlying()) return;
if ((mc.player.getHeldItemOffhand().getUseAction() == UseAction.BLOCK ||
mc.player.getHeldItemOffhand().getUseAction() == UseAction.EAT) &&
mc.player.getActiveHand() == Hand.MAIN_HAND) {
return;
}
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(mc.player.getActiveHand()));
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(
mc.player.getActiveHand() == Hand.MAIN_HAND ? Hand.OFF_HAND : Hand.MAIN_HAND));
event.cancel();
}
private void handleGrimBowMode(SlowWalkingEvent event) {
if (mc.player == null) return;
if (!mc.player.isHandActive() || !MoveUtil.isMoving()) return;
if (onlyOnGround.getValue() && !mc.player.isOnGround()) return;
event.cancel();
if (bowSwapTimer.elapsed(30)) {
performBowSwap();
bowSwapTimer.reset();
}
}
private void handleGrimCrossbowMode(SlowWalkingEvent event) {
if (mc.player == null) return;
if (!mc.player.isHandActive() || !MoveUtil.isMoving()) return;
if (onlyOnGround.getValue() && !mc.player.isOnGround()) return;
event.cancel();
if (crossbowSwapTimer.elapsed(30)) {
performCrossbowSwap();
crossbowSwapTimer.reset();
}
}
private void handleGrimBowUpdate() {
if (!mc.player.isHandActive() && isSwapping) {
isSwapping = false;
}
}
private void handleGrimCrossbowUpdate() {
if (!mc.player.isHandActive() && isSwapping) {
isSwapping = false;
}
}
private void performBowSwap() {
ItemStack currentOffhandItem = mc.player.getHeldItemOffhand();
int bowSlot = findBowInInventory();
if (bowSlot != -1) {
if (!isSwapping) {
originalOffhandItem = currentOffhandItem.copy();
isSwapping = true;
}
swapItemToOffhand(bowSlot);
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.OFF_HAND));
if (!originalOffhandItem.isEmpty()) {
int originalItemSlot = findItemInInventory(originalOffhandItem);
if (originalItemSlot != -1) {
swapItemToOffhand(originalItemSlot);
}
}
}
}
private void performCrossbowSwap() {
ItemStack currentOffhandItem = mc.player.getHeldItemOffhand();
int crossbowSlot = findCrossbowInInventory();
if (crossbowSlot != -1) {
if (!isSwapping) {
originalOffhandItem = currentOffhandItem.copy();
isSwapping = true;
}
swapItemToOffhand(crossbowSlot);
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.OFF_HAND));
if (!originalOffhandItem.isEmpty()) {
int originalItemSlot = findItemInInventory(originalOffhandItem);
if (originalItemSlot != -1) {
swapItemToOffhand(originalItemSlot);
}
}
}
}
private int findBowInInventory() {
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.BOW) {
return i;
}
}
for (int i = 9; i < 36; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.BOW) {
return i;
}
}
return -1;
}
private int findCrossbowInInventory() {
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.CROSSBOW) {
return i;
}
}
for (int i = 9; i < 36; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == Items.CROSSBOW) {
return i;
}
}
return -1;
}
private int findItemInInventory(ItemStack itemToFind) {
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (ItemStack.areItemsEqual(stack, itemToFind)) {
return i;
}
}
for (int i = 9; i < 36; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (ItemStack.areItemsEqual(stack, itemToFind)) {
return i;
}
}
return -1;
}
private void swapItemToOffhand(int inventorySlot) {
int containerSlot = inventorySlot < 9 ? inventorySlot + 36 : inventorySlot;
int offhandSlot = 45;
mc.player.connection.sendPacket(new CClickWindowPacket(
0,
containerSlot,
0,
ClickType.SWAP,
mc.player.inventory.getStackInSlot(inventorySlot),
mc.player.openContainer.getNextTransactionID(mc.player.inventory)
));
mc.player.connection.sendPacket(new CClickWindowPacket(
0,
offhandSlot,
0,
ClickType.SWAP,
mc.player.getHeldItemOffhand(),
mc.player.openContainer.getNextTransactionID(mc.player.inventory)
));
}
public boolean isBlockUnderWithMotion() {
AxisAlignedBB aab = mc.player.getBoundingBox().offset(mc.player.getMotion().x, -0.1, mc.player.getMotion().z);
return mc.world.getCollisionShapes(mc.player, aab).toList().isEmpty();
}
@Override
public void toggle() {
super.toggle();
originalOffhandItem = ItemStack.EMPTY;
isSwapping = false;
}
}
Последнее редактирование: