Начинающий
- Статус
- Оффлайн
- Регистрация
- 10 Авг 2022
- Сообщения
- 15
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
автосвап на хв под еваваре, основная суть в том, что автосвап без стопа для обхода ач, типо стоп 50мс или стоп по времени открытии инва. Вроде не детектит, могут быть изредкие флаги ( в основном из за конфликта с автототемом ). Просто фулл нон стопный автосвап ( считайте как пакетный ).
gemini code
gemini code
ItemSwapModule::
package sweetie.evaware.client.features.modules.combat;
import lombok.Getter;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import sweetie.evaware.api.event.Listener;
import sweetie.evaware.api.event.EventListener;
import sweetie.evaware.api.event.events.client.KeyEvent;
import sweetie.evaware.api.event.events.client.TickEvent;
import sweetie.evaware.api.event.events.player.other.UpdateEvent;
import sweetie.evaware.api.module.Category;
import sweetie.evaware.api.module.Module;
import sweetie.evaware.api.module.ModuleRegister;
import sweetie.evaware.api.module.setting.BindSetting;
import sweetie.evaware.api.module.setting.ModeSetting;
import sweetie.evaware.api.utils.player.InventoryUtil;
@ModuleRegister(name = "Item Swap", category = Category.COMBAT)
public class ItemSwapModule extends Module {
@Getter private static final ItemSwapModule instance = new ItemSwapModule();
private final BindSetting swapKey = new BindSetting("Swap key").value(-999);
private final ModeSetting firstItem = new ModeSetting("First item").value("Shield").values("Shield", "GApple", "Totem", "Ball");
private final ModeSetting secondItem = new ModeSetting("Second item").value("GApple").values("Shield", "GApple", "Totem", "Ball");
private boolean isWaiting = false;
private long waitStartTime = 0L;
private int targetSlot = -1;
public ItemSwapModule() {
addSettings(swapKey, firstItem, secondItem);
}
@Override
public void onEvent() {
EventListener keyEvent = KeyEvent.getInstance().subscribe(new Listener<>(event -> {
if (event.key() == swapKey.getValue() && event.action() == 1 && mc.currentScreen == null) {
startSwapSequence();
}
}));
EventListener tickEvent = TickEvent.getInstance().subscribe(new Listener<>(event -> {
processSwapQueue();
}));
EventListener updateEvent = UpdateEvent.getInstance().subscribe(new Listener<>(event -> {
processSwapQueue();
}));
addEvents(keyEvent, tickEvent, updateEvent);
}
@Override
public void onDisable() {
isWaiting = false;
targetSlot = -1;
}
private void startSwapSequence() {
if (mc.world == null || mc.player == null || mc.interactionManager == null) return;
if (isWaiting) return;
Item item = getItem();
if (item == null) {
print("Предмет не найден");
return;
}
int slot = InventoryUtil.findItem(item);
if (slot == -1) {
print("Предмет не найден в инвентаре");
return;
}
if (mc.player.isSprinting()) {
mc.player.setSprinting(false);
}
this.targetSlot = slot;
this.waitStartTime = System.currentTimeMillis();
this.isWaiting = true;
}
private void processSwapQueue() {
if (!isWaiting || mc.player == null || mc.interactionManager == null) return;
if (System.currentTimeMillis() - waitStartTime >= 50) {
performActualSwap();
}
}
private void performActualSwap() {
if (targetSlot != -1) {
InventoryUtil.swapToOffhand(targetSlot);
Item swappedItem = getItem();
if (swappedItem != null) {
print("Свапнула на \"" + swappedItem.getName().getString() + "\"");
}
}
isWaiting = false;
targetSlot = -1;
}
private Item getItem() {
if (mc.player == null) return null;
Item primary = getItemByMode(firstItem.getValue());
Item secondary = getItemByMode(secondItem.getValue());
return mc.player.getOffHandStack().getItem() == primary ? secondary : primary;
}
private Item getItemByMode(String name) {
return switch (name.toLowerCase()) {
case "shield" -> Items.SHIELD;
case "ball" -> Items.PLAYER_HEAD;
case "totem" -> Items.TOTEM_OF_UNDYING;
case "gapple" -> Items.GOLDEN_APPLE;
default -> null;
};
}
}