Если че обычный декомпил, работает нормально, тестил.
Expensive Ready.
Работает только на втором виде Gui(Beta)
захотите переделаете
там ещё утилка нужна типо, вот она
Expensive Ready.
Работает только на втором виде Gui(Beta)
захотите переделаете
AutoTransfer.java:
package ru.elysium.modules.impl.player;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.inventory.container.ChestContainer;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import ru.elysium.events.Event;
import ru.elysium.modules.Function;
import ru.elysium.modules.FunctionAnnotation;
import ru.elysium.modules.Type;
import ru.elysium.modules.impl.player.Multithreading;
import ru.elysium.modules.settings.imp.SliderSetting;
import ru.elysium.modules.settings.imp.TextSetting;
import ru.elysium.util.ClientUtil;
import ru.elysium.util.math.MathUtil;
@FunctionAnnotation(name="AutoTransfer", type=Type.Player)
public class AutoTransfer
extends Function {
public TextSetting anarchy = new TextSetting("Анархия", "101");
private final SliderSetting itemCount = new SliderSetting("Кол-во предметов", 1.0f, 3.0f, 10.0f, 1.0f);
private final SliderSetting coldown = new SliderSetting("Кулдаун", 500.0f, 10.0f, 1000.0f, 10.0f);
public TextSetting sellCommand = new TextSetting("Команда для продажи", "/ah dsell 10");
private boolean buyAction = false;
private boolean isClicking = false;
private long lastTransferTime = 0L;
private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
public AutoTransfer() {
this.addSettings(this.anarchy, this.itemCount, this.sellCommand, this.coldown);
}
@Override
public void onEnable() {
if (Minecraft.player != null && AutoTransfer.mc.world != null) {
if (Minecraft.player.ticksExisted < 500) {
float f = (float)(500 - Minecraft.player.ticksExisted) / 20.0f;
ClientUtil.sendMesage("Подождите " + MathUtil.round(f, 2) + " секунд");
super.onEnable();
} else {
String string = this.anarchy.get();
if (!this.isNumbers(string)) {
ClientUtil.sendMesage("AutoTransfer - Введите номер анархии! (Только числа).");
super.onEnable();
} else {
int n = Integer.parseInt(this.anarchy.get());
if (n >= 0 && n <= 600) {
this.transfer(n);
super.onEnable();
} else {
ClientUtil.sendMesage("AutoTransfer - Введите номер анархии от 0 до 600!");
super.onEnable();
}
}
}
} else {
super.onEnable();
}
}
@Override
public void onEvent(Event event) {
}
public void onEvent(org.w3c.dom.events.Event event) {
this.onMotion();
}
private boolean isNumbers(String string) {
return string.matches("\\d+");
}
private void transfer(int n) {
Multithreading.runAsync(this::lambda$transfer$0);
}
private void lambda$transfer$0() {
}
private void onMotion() {
if (this.buyAction && AutoTransfer.mc.currentScreen instanceof ContainerScreen) {
ContainerScreen containerScreen = (ContainerScreen)AutoTransfer.mc.currentScreen;
int n = this.itemCount.getValue().intValue();
int n2 = 0;
for (Slot slot : ((Container)containerScreen.getContainer()).inventorySlots) {
if (slot.getStack().isEmpty() || System.currentTimeMillis() - this.lastTransferTime < this.coldown.getValue().longValue()) continue;
if (!this.isClicking) {
this.isClicking = true;
AutoTransfer.mc.playerController.windowClick(((Container)containerScreen.getContainer()).windowId, slot.slotNumber, 0, ClickType.QUICK_MOVE, Minecraft.player);
++n2;
this.lastTransferTime = System.currentTimeMillis();
CompletableFuture.runAsync(this::lambda$onMotion$1);
this.executor.schedule(AutoTransfer::lambda$onMotion$2, this.coldown.getValue().longValue(), TimeUnit.MILLISECONDS);
}
if (n2 < n) continue;
Minecraft.player.closeScreen();
break;
}
}
}
@Override
public void onDisable() {
super.onDisable();
}
private static void lambda$onMotion$2() {
}
private void lambda$onMotion$1() {
try {
Thread.sleep(500L);
}
catch (InterruptedException interruptedException) {
interruptedException.printStackTrace();
}
finally {
this.isClicking = false;
}
}
private void lambda$transfer$0(int n) {
Minecraft.player.inventory.currentItem = 0;
int n2 = 0;
for (Slot slot : Minecraft.player.container.inventorySlots) {
if (slot.getStack().isEmpty()) continue;
if (n2 >= this.itemCount.getValue().intValue()) break;
if (Minecraft.player.inventory.getStackInSlot(0).isEmpty() && slot.slotNumber != 0) {
AutoTransfer.mc.playerController.windowClick(Minecraft.player.container.windowId, slot.slotNumber, 0, ClickType.PICKUP, Minecraft.player);
AutoTransfer.mc.playerController.windowClick(Minecraft.player.container.windowId, 36, 0, ClickType.PICKUP, Minecraft.player);
}
Multithreading.awaitMillis(100L);
if (!Minecraft.player.inventory.getStackInSlot(0).isEmpty()) {
Minecraft.player.sendChatMessage(this.sellCommand.get());
++n2;
Multithreading.awaitMillis(250L);
}
Multithreading.awaitMillis(100L);
}
Minecraft.player.sendChatMessage("/an" + n);
Multithreading.awaitMillis(400L);
Minecraft.player.sendChatMessage("/ah " + mc.getSession().getUsername());
Multithreading.awaitMillis(200L);
int n3 = 0;
do {
if (Minecraft.player.openContainer instanceof ChestContainer) break;
Multithreading.awaitMillis(50L);
} while (++n3 <= 100);
Multithreading.awaitMillis(150L);
this.buyAction = true;
}
}
Multithreading.java:
package ru.elysium.modules.impl.player;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import lombok.NonNull;
public class Multithreading {
private static final ScheduledExecutorService RUNNABLE_EXECUTOR = Executors.newScheduledThreadPool(20, new ThreadFactory(){
private final AtomicInteger COUNTER = new AtomicInteger(0);
@Override
public Thread newThread(@NonNull Runnable runnable) {
if (runnable == null) {
throw new NullPointerException("r is marked non-null but is null");
}
return new Thread(runnable, "Multithreading Thread " + this.COUNTER.incrementAndGet());
}
});
public static ExecutorService EXECUTOR = Executors.newCachedThreadPool(new ThreadFactory(){
private final AtomicInteger COUNTER = new AtomicInteger(0);
@Override
public Thread newThread(@NonNull Runnable runnable) {
if (runnable == null) {
throw new NullPointerException("r is marked non-null but is null");
}
return new Thread(runnable, "Multithreading Thread " + this.COUNTER.incrementAndGet());
}
});
public static void awaitMillis(long l) {
try {
EXECUTOR.awaitTermination(l, TimeUnit.MILLISECONDS);
}
catch (Exception exception) {
// empty catch block
}
}
public static void schedule(Runnable runnable, long l, long l2, TimeUnit timeUnit) {
RUNNABLE_EXECUTOR.scheduleAtFixedRate(runnable, l, l2, timeUnit);
}
public static ScheduledFuture<?> schedule(Runnable runnable, long l, TimeUnit timeUnit) {
return RUNNABLE_EXECUTOR.schedule(runnable, l, timeUnit);
}
public static int getTotal() {
return ((ThreadPoolExecutor)EXECUTOR).getActiveCount();
}
public static void runAsync(Runnable runnable) {
EXECUTOR.execute(runnable);
}
}