Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос У кого есть нормальный GuiMove под Polar на Zenith Recode?

пробывал не воркает
Не зенит но принцып простой
пример:
Expand Collapse Copy
task.schedule(EventPlayerTick.class, e -> {
                InputUtils.LockMovement();
                return true;
            }).schedule(EventPlayerTick.class, e -> {
                for (Packet<?> p : delayedPackets) NetworkUtils.sendSilentPacket(p);
                delayedPackets.clear();
                processingPackets = false;
                return true;
            }).schedule(EventPlayerTick.class, e -> {
                InputUtils.UnlockMovement();
                return true;
            });
в 1 тике оффни мувмент, в след тике отправь все пакеты что были нажаты когда был открыт инв, в 3 тике анлокни мувмент, хотя можно сразу во 2 и после пакетов
 
Не зенит но принцып простой
пример:
Expand Collapse Copy
task.schedule(EventPlayerTick.class, e -> {
                InputUtils.LockMovement();
                return true;
            }).schedule(EventPlayerTick.class, e -> {
                for (Packet<?> p : delayedPackets) NetworkUtils.sendSilentPacket(p);
                delayedPackets.clear();
                processingPackets = false;
                return true;
            }).schedule(EventPlayerTick.class, e -> {
                InputUtils.UnlockMovement();
                return true;
            });
в 1 тике оффни мувмент, в след тике отправь все пакеты что были нажаты когда был открыт инв, в 3 тике анлокни мувмент, хотя можно сразу во 2 и после пакетов
сделал так как ты сказал но у меня выкидывает предмет и фантомит

guiwalk:
Expand Collapse Copy
public final class GuiWalk extends Module {
   public static final GuiWalk INSTANCE = new GuiWalk();
  
   private final List<Packet<?>> delayedPackets = new ArrayList<>();
   private boolean movementLocked = false;
   private int tickState = 0;
  
   private GuiWalk() {
   }

   @EventTarget
   private void onUpdate(EventUpdate event) {
      if (mc.player == null || mc.world == null) return;

      final KeyBinding[] moveKeys = {
         mc.options.forwardKey,
         mc.options.backKey,
         mc.options.leftKey,
         mc.options.rightKey,
         mc.options.jumpKey,
         mc.options.sprintKey
      };

      if (tickState == 1) {
         lockMovement(moveKeys);
         tickState = 2;
         return;
      } else if (tickState == 2) {
         sendDelayedPackets();
         unlockMovement(moveKeys);
         tickState = 0;
         return;
      }

      if (movementLocked) {
         for (KeyBinding keyBinding : moveKeys) {
            keyBinding.setPressed(false);
         }
         return;
      }

      if (mc.currentScreen == null) {
         return;
      }

      if (mc.currentScreen instanceof ChatScreen) {
         return;
      }

      for (KeyBinding keyBinding : moveKeys) {
         long windowHandle = mc.getWindow().getHandle();
         int keyCode = keyBinding.getDefaultKey().getCode();
         boolean isKeyPressed = GLFW.glfwGetKey(windowHandle, keyCode) == GLFW.GLFW_PRESS;
         keyBinding.setPressed(isKeyPressed);
      }
   }

   @EventTarget
   private void onPacket(EventPacket event) {
      if (mc.player == null) return;
      if (!event.isSent()) return;
      if (!(mc.currentScreen instanceof InventoryScreen)) return;

      Packet<?> packet = (Packet<?>) event.getPacket();
      if (packet instanceof ClickSlotC2SPacket) {
         delayedPackets.add(packet);
         event.cancel();
         return;
      }

      if (packet instanceof CloseHandledScreenC2SPacket) {
         if (!delayedPackets.isEmpty()) {
            delayedPackets.add(packet);
            event.cancel();
            tickState = 1;
         }
      }
   }

   private void lockMovement(KeyBinding[] moveKeys) {
      movementLocked = true;
      for (KeyBinding keyBinding : moveKeys) {
         keyBinding.setPressed(false);
      }
   }

   private void unlockMovement(KeyBinding[] moveKeys) {
      movementLocked = false;
      for (KeyBinding keyBinding : moveKeys) {
         long windowHandle = mc.getWindow().getHandle();
         int keyCode = keyBinding.getDefaultKey().getCode();
         boolean isKeyPressed = GLFW.glfwGetKey(windowHandle, keyCode) == GLFW.GLFW_PRESS;
         keyBinding.setPressed(isKeyPressed);
      }
   }

   private void sendDelayedPackets() {
      if (delayedPackets.isEmpty()) return;
      
      if (mc.player != null && mc.player.networkHandler != null) {
         for (Packet<?> packet : delayedPackets) {
            mc.player.networkHandler.sendPacket(packet);
         }
      }
      
      delayedPackets.clear();
   }

   @Override
   public void onDisable() {
      super.onDisable();
      delayedPackets.clear();
      movementLocked = false;
      tickState = 0;
   }
}
 
сделал так как ты сказал но у меня выкидывает предмет и фантомит

guiwalk:
Expand Collapse Copy
public final class GuiWalk extends Module {
   public static final GuiWalk INSTANCE = new GuiWalk();
 
   private final List<Packet<?>> delayedPackets = new ArrayList<>();
   private boolean movementLocked = false;
   private int tickState = 0;
 
   private GuiWalk() {
   }

   @EventTarget
   private void onUpdate(EventUpdate event) {
      if (mc.player == null || mc.world == null) return;

      final KeyBinding[] moveKeys = {
         mc.options.forwardKey,
         mc.options.backKey,
         mc.options.leftKey,
         mc.options.rightKey,
         mc.options.jumpKey,
         mc.options.sprintKey
      };

      if (tickState == 1) {
         lockMovement(moveKeys);
         tickState = 2;
         return;
      } else if (tickState == 2) {
         sendDelayedPackets();
         unlockMovement(moveKeys);
         tickState = 0;
         return;
      }

      if (movementLocked) {
         for (KeyBinding keyBinding : moveKeys) {
            keyBinding.setPressed(false);
         }
         return;
      }

      if (mc.currentScreen == null) {
         return;
      }

      if (mc.currentScreen instanceof ChatScreen) {
         return;
      }

      for (KeyBinding keyBinding : moveKeys) {
         long windowHandle = mc.getWindow().getHandle();
         int keyCode = keyBinding.getDefaultKey().getCode();
         boolean isKeyPressed = GLFW.glfwGetKey(windowHandle, keyCode) == GLFW.GLFW_PRESS;
         keyBinding.setPressed(isKeyPressed);
      }
   }

   @EventTarget
   private void onPacket(EventPacket event) {
      if (mc.player == null) return;
      if (!event.isSent()) return;
      if (!(mc.currentScreen instanceof InventoryScreen)) return;

      Packet<?> packet = (Packet<?>) event.getPacket();
      if (packet instanceof ClickSlotC2SPacket) {
         delayedPackets.add(packet);
         event.cancel();
         return;
      }

      if (packet instanceof CloseHandledScreenC2SPacket) {
         if (!delayedPackets.isEmpty()) {
            delayedPackets.add(packet);
            event.cancel();
            tickState = 1;
         }
      }
   }

   private void lockMovement(KeyBinding[] moveKeys) {
      movementLocked = true;
      for (KeyBinding keyBinding : moveKeys) {
         keyBinding.setPressed(false);
      }
   }

   private void unlockMovement(KeyBinding[] moveKeys) {
      movementLocked = false;
      for (KeyBinding keyBinding : moveKeys) {
         long windowHandle = mc.getWindow().getHandle();
         int keyCode = keyBinding.getDefaultKey().getCode();
         boolean isKeyPressed = GLFW.glfwGetKey(windowHandle, keyCode) == GLFW.GLFW_PRESS;
         keyBinding.setPressed(isKeyPressed);
      }
   }

   private void sendDelayedPackets() {
      if (delayedPackets.isEmpty()) return;
     
      if (mc.player != null && mc.player.networkHandler != null) {
         for (Packet<?> packet : delayedPackets) {
            mc.player.networkHandler.sendPacket(packet);
         }
      }
     
      delayedPackets.clear();
   }

   @Override
   public void onDisable() {
      super.onDisable();
      delayedPackets.clear();
      movementLocked = false;
      tickState = 0;
   }
}
мб инпут пакет перед твоими пакетами кликов в 2 тике успевает отправится
 
сделал так как ты сказал но у меня выкидывает предмет и фантомит

guiwalk:
Expand Collapse Copy
public final class GuiWalk extends Module {
   public static final GuiWalk INSTANCE = new GuiWalk();
 
   private final List<Packet<?>> delayedPackets = new ArrayList<>();
   private boolean movementLocked = false;
   private int tickState = 0;
 
   private GuiWalk() {
   }

   @EventTarget
   private void onUpdate(EventUpdate event) {
      if (mc.player == null || mc.world == null) return;

      final KeyBinding[] moveKeys = {
         mc.options.forwardKey,
         mc.options.backKey,
         mc.options.leftKey,
         mc.options.rightKey,
         mc.options.jumpKey,
         mc.options.sprintKey
      };

      if (tickState == 1) {
         lockMovement(moveKeys);
         tickState = 2;
         return;
      } else if (tickState == 2) {
         sendDelayedPackets();
         unlockMovement(moveKeys);
         tickState = 0;
         return;
      }

      if (movementLocked) {
         for (KeyBinding keyBinding : moveKeys) {
            keyBinding.setPressed(false);
         }
         return;
      }

      if (mc.currentScreen == null) {
         return;
      }

      if (mc.currentScreen instanceof ChatScreen) {
         return;
      }

      for (KeyBinding keyBinding : moveKeys) {
         long windowHandle = mc.getWindow().getHandle();
         int keyCode = keyBinding.getDefaultKey().getCode();
         boolean isKeyPressed = GLFW.glfwGetKey(windowHandle, keyCode) == GLFW.GLFW_PRESS;
         keyBinding.setPressed(isKeyPressed);
      }
   }

   @EventTarget
   private void onPacket(EventPacket event) {
      if (mc.player == null) return;
      if (!event.isSent()) return;
      if (!(mc.currentScreen instanceof InventoryScreen)) return;

      Packet<?> packet = (Packet<?>) event.getPacket();
      if (packet instanceof ClickSlotC2SPacket) {
         delayedPackets.add(packet);
         event.cancel();
         return;
      }

      if (packet instanceof CloseHandledScreenC2SPacket) {
         if (!delayedPackets.isEmpty()) {
            delayedPackets.add(packet);
            event.cancel();
            tickState = 1;
         }
      }
   }

   private void lockMovement(KeyBinding[] moveKeys) {
      movementLocked = true;
      for (KeyBinding keyBinding : moveKeys) {
         keyBinding.setPressed(false);
      }
   }

   private void unlockMovement(KeyBinding[] moveKeys) {
      movementLocked = false;
      for (KeyBinding keyBinding : moveKeys) {
         long windowHandle = mc.getWindow().getHandle();
         int keyCode = keyBinding.getDefaultKey().getCode();
         boolean isKeyPressed = GLFW.glfwGetKey(windowHandle, keyCode) == GLFW.GLFW_PRESS;
         keyBinding.setPressed(isKeyPressed);
      }
   }

   private void sendDelayedPackets() {
      if (delayedPackets.isEmpty()) return;
     
      if (mc.player != null && mc.player.networkHandler != null) {
         for (Packet<?> packet : delayedPackets) {
            mc.player.networkHandler.sendPacket(packet);
         }
      }
     
      delayedPackets.clear();
   }

   @Override
   public void onDisable() {
      super.onDisable();
      delayedPackets.clear();
      movementLocked = false;
      tickState = 0;
   }
}
У тебя на время отправки пакетов не блокается их блок и они заного записываются в список пакетов у меня лично была похожая проблема когда делал
 
мб инпут пакет перед твоими пакетами кликов в 2 тике успевает отправится
У тебя на время отправки пакетов не блокается их блок и они заного записываются в список пакетов у меня лично была похожая проблема когда делал
я написал такой


LegitGuiWalk.java:
Expand Collapse Copy
public final class LegitGuiWalk extends Module {

    public static final LegitGuiWalk INSTANCE = new LegitGuiWalk();

    private final ConcurrentLinkedQueue<ClickSlotC2SPacket> packets = new ConcurrentLinkedQueue<>();
    private final Timer timer = new Timer();
    private boolean isSending;
    private boolean wasInventoryOpen = false;

    private LegitGuiWalk() {
    }

    private boolean isMoving() {
        return PlayerInventoryComponent.moveKeys.stream()
                .anyMatch(key -> key != mc.options.jumpKey && key.isPressed());
    }

    private boolean isMovementKeysPressed() {
        return mc.options.forwardKey.isPressed() ||
                mc.options.backKey.isPressed() ||
                mc.options.leftKey.isPressed() ||
                mc.options.rightKey.isPressed();
    }

    private boolean isPlayerActuallyMoving() {
        if (mc.player == null) return false;

        double dx = mc.player.getX() - mc.player.prevX;
        double dz = mc.player.getZ() - mc.player.prevZ;
        return Math.abs(dx) > 0.001 || Math.abs(dz) > 0.001;
    }

    @EventTarget
    private void onPacket(EventPacket e) {
        if (e.isSent()) {
            if (e.getPacket() instanceof ClickSlotC2SPacket packet) {
                if (!isSending) {
                    e.setCancelled(true);
                    packets.add(packet);
                    timer.reset();
                }
            }
            else if (e.getPacket() instanceof CloseHandledScreenC2SPacket) {
                if (wasInventoryOpen && (isMoving() || isMovementKeysPressed())) {
                    e.setCancelled(true);
                }
            }
        }
    }

    @EventTarget
    private void onTick(EventUpdate e) {
        boolean isInventoryOpen = mc.currentScreen != null && shouldAllowWalking();

        if (isInventoryOpen) {
            wasInventoryOpen = true;
            PlayerInventoryComponent.updateMoveKeys();
        } else {
            wasInventoryOpen = false;
        }

        if (!packets.isEmpty()) {
            PlayerInventoryComponent.disableMoveKeys();
            if (timer.finished(50)) {
                isSending = true;
                while (!packets.isEmpty()) {
                    mc.getNetworkHandler().sendPacket(packets.poll());
                }
                isSending = false;
                PlayerInventoryComponent.updateMoveKeys();
            }
        } else if (PlayerInventoryComponent.shouldSkipExecution()) {
            PlayerInventoryComponent.updateMoveKeys();
        }
    }

    private boolean shouldAllowWalking() {
        if (mc.currentScreen == null) return false;
        return PlayerInventoryComponent.shouldSkipExecution();
    }

    @Override
    public void onEnable() {
        super.onEnable();
        wasInventoryOpen = false;
        packets.clear();
    }

    @Override
    public void onDisable() {
        super.onDisable();
        wasInventoryOpen = false;
        packets.clear();
        PlayerInventoryComponent.updateMoveKeys();
    }
}


он свапает предметы отлично, то есть авто тотем т.д с ним хорошо работает, но если просто перемещать предметы то он выкидывает и фантомит
 
Назад
Сверху Снизу