Начинающий
- Статус
- Оффлайн
- Регистрация
- 27 Мар 2024
- Сообщения
- 7
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
Вот код дорабатывал через чат гпт фулл фикс
код:
{
final BindSetting swapChestKey = new BindSetting("Кнопка свапа", -1);
final BindSetting fireWorkKey = new BindSetting("Кнопка феерверков", -1);
final BooleanSetting autoFly = new BooleanSetting("Авто взлёт", true);
final InventoryUtil.Hand handUtil = new InventoryUtil.Hand();
public ElytraHelper() {
addSettings(swapChestKey, fireWorkKey, autoFly);
}
ItemStack currentStack = ItemStack.EMPTY;
public static StopWatch stopWatch = new StopWatch();
long delay;
boolean fireworkUsed;
@Subscribe
private void onEventKey(EventKey e) {
if (e.getKey() == swapChestKey.get() && stopWatch.isReached(100L)) {
changeChestPlate(currentStack);
stopWatch.reset();
}
if (e.getKey() == fireWorkKey.get() && stopWatch.isReached(200L)) {
fireworkUsed = true;
}
}
@Subscribe
private void onUpdate(EventUpdate e) {
this.currentStack = mc.player.getItemStackFromSlot(EquipmentSlotType.CHEST);
if (autoFly.get() && currentStack.getItem() == Items.ELYTRA) {
if (mc.player.isOnGround()) {
mc.player.jump();
} else if (ElytraItem.isUsable(currentStack) && !mc.player.isElytraFlying()) {
mc.player.startFallFlying();
mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
}
}
if (fireworkUsed) {
int hbSlot = InventoryUtil.getInstance().getSlotInInventoryOrHotbar(Items.FIREWORK_ROCKET, true);
int invSlot = InventoryUtil.getInstance().getSlotInInventoryOrHotbar(Items.FIREWORK_ROCKET, false);
if (invSlot == -1 && hbSlot == -1) {
print("Феерверки не найдены!");
fireworkUsed = false;
return;
}
if (!mc.player.getCooldownTracker().hasCooldown(Items.FIREWORK_ROCKET)) {
int slot = findAndTrowItem(hbSlot, invSlot);
if (slot > 8) {
mc.playerController.pickItem(slot);
}
}
fireworkUsed = false;
}
this.handUtil.handleItemChange(System.currentTimeMillis() - this.delay > 200L);
}
@Subscribe
private void onPacket(EventPacket e) {
handUtil.onEventPacket(e);
}
private int findAndTrowItem(int hbSlot, int invSlot) {
this.handUtil.setOriginalSlot(mc.player.inventory.currentItem);
int targetSlot = hbSlot != -1 ? hbSlot : invSlot;
if (targetSlot != -1) {
if (targetSlot > 8) {
mc.playerController.pickItem(targetSlot);
} else if (targetSlot != mc.player.inventory.currentItem) {
mc.player.connection.sendPacket(new CHeldItemChangePacket(targetSlot));
}
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
mc.player.swingArm(Hand.MAIN_HAND);
this.delay = System.currentTimeMillis();
return targetSlot;
}
return -1;
}
private void changeChestPlate(ItemStack stack) {
if (mc.currentScreen != null) return;
boolean isWearingElytra = stack.getItem() == Items.ELYTRA;
Item targetItem = isWearingElytra ? Items.NETHERITE_CHESTPLATE : Items.ELYTRA;
int swapSlot = getItemSlot(targetItem);
if (swapSlot == -1) {
print((isWearingElytra ? "Нагрудник" : "Элитра") + " не найдены!");
return;
}
int freeSlot = findFreeSlot();
if (freeSlot == -1) {
print("Нет свободного слота в инвентаре!");
return;
}
InventoryUtil.moveItem(6, freeSlot);
InventoryUtil.moveItem(swapSlot, 6);
print(TextFormatting.RED + (isWearingElytra ? "Свапнул на нагрудник!" : "Свапнул на элитру!"));
}
private int getItemSlot(Item input) {
for (int i = 0; i < 36; i++) {
ItemStack s = mc.player.inventory.getStackInSlot(i);
if (s.getItem() == input) {
if (i < 9) return i + 36;
return i;
}
}
return -1;
}
private int findFreeSlot() {
for (int i = 9; i < 36; i++) {
if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
return i;
}
}
for (int i = 0; i < 9; i++) {
if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
return i + 36;
}
}
return -1;
}
@Override
public void onDisable() {
stopWatch.reset();
super.onDisable();
}
}