Начинающий
- Статус
- Оффлайн
- Регистрация
- 11 Мар 2024
- Сообщения
- 34
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
- Прочие моды
Держал этот флай на коврах около недели, ждал фикса спайдера на процессоре но в итоге в нурхуйлане каким то образом это вышло, так что солью вам
Пожалуйста, авторизуйтесь для просмотра ссылки.
сразу скажу гпт код и он местами багается, но на фт работает
Fly:
private void handleGriefCarpet() {
// 1. Поиск слота с ковром
int carpetSlot = -1;
for (int i = 0; i < 9; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (!stack.isEmpty() && stack.getItem() instanceof BlockItem) {
if (((BlockItem) stack.getItem()).getBlock() instanceof CarpetBlock) {
carpetSlot = i;
break;
}
}
}
// Если ковра нет, выходим
if (carpetSlot == -1) return;
BlockPos playerPos = new BlockPos(mc.player.getPositionVec());
BlockPos blockUnder = playerPos.down();
// 2. Логика установки (20 раз в секунду / каждый тик)
// Проверяем: игрок в воздухе, в ногах воздух, под ногами твердый блок
if (!mc.player.isOnGround() && mc.world.isAirBlock(playerPos) && !mc.world.isAirBlock(blockUnder)) {
// Сохраняем текущий слот и переключаемся на ковер
int prevSlot = mc.player.inventory.currentItem;
mc.player.inventory.currentItem = carpetSlot;
// "Сайлент" ротация (смотрим строго вниз для установки)
float prevPitch = mc.player.rotationPitch;
mc.player.rotationPitch = 90f;
// Принудительно ставим блок (это выполняется каждый тик = 20 раз в сек)
mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND,
new BlockRayTraceResult(new Vector3d(blockUnder.getX(), blockUnder.getY(), blockUnder.getZ()), Direction.UP, blockUnder, false));
// Визуальный взмах руки (можно убрать, если мешает)
mc.player.swingArm(Hand.MAIN_HAND);
// Возвращаем ротацию и слот обратно
mc.player.rotationPitch = prevPitch;
mc.player.inventory.currentItem = prevSlot;
}
// 3. Логика прыжка (Grief-snow / HighJump)
// Срабатывает, как только мы приземлились на только что поставленный ковер
if (mc.player.isOnGround()) {
// Проверка, что стоим именно на ковре
if (mc.world.getBlockState(playerPos).getBlock() instanceof CarpetBlock) {
mc.player.jumpMovementFactor = 0f;
// Пакет отмены разрушения (триггер для античита/сервера)
mc.player.connection.sendPacket(new CPlayerDiggingPacket(CPlayerDiggingPacket.Action.ABORT_DESTROY_BLOCK, playerPos.up(), Direction.UP));
// Сам прыжок
mc.player.jump();
// Модификация движения (подлет)
double motionX = mc.player.getMotion().x;
double motionZ = mc.player.getMotion().z;
mc.player.setMotion(motionX, 0.55, motionZ); // 0.6 - высота подлета, можно менять
}
}
}