Files
Meteor-Rejects/src/main/java/anticope/rejects/modules/AutoGrind.java
crazymoose77756 f204244797 1.20.6 Update (#347)
* initial no tests

* Initial 1.20.6 update + tests/fixes

* Initial 1.20.6 update + tests/fixes

* 1.20.6 fixes

* more 1.20.6 updates

* initial port 1.20.6
2024-05-15 11:04:21 +02:00

91 lines
3.2 KiB
Java

package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon;
import meteordevelopment.meteorclient.events.game.OpenScreenEvent;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
import meteordevelopment.meteorclient.utils.player.InvUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.GrindstoneScreenHandler;
import java.util.List;
import java.util.Map;
public class AutoGrind extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final Setting<Integer> delay = sgGeneral.add(new IntSetting.Builder()
.name("delay")
.description("The tick delay between grinding items.")
.defaultValue(50)
.sliderMax(500)
.min(0)
.build()
);
private final Setting<List<Item>> itemBlacklist = sgGeneral.add(new ItemListSetting.Builder()
.name("item-blacklist")
.description("Items that should be ignored.")
.defaultValue()
.filter(Item -> Item.getComponents().get(DataComponentTypes.DAMAGE) != null)
.build()
);
private final Setting<List<Enchantment>> enchantmentBlacklist = sgGeneral.add(new EnchantmentListSetting.Builder()
.name("enchantment-blacklist")
.description("Enchantments that should be ignored.")
.defaultValue()
.build()
);
public AutoGrind() {
super(MeteorRejectsAddon.CATEGORY, "auto-grind", "Automatically disenchants items.");
}
@EventHandler
private void onOpenScreen(OpenScreenEvent event) {
if (!(mc.player.currentScreenHandler instanceof GrindstoneScreenHandler))
return;
MeteorExecutor.execute(() -> {
for (int i = 0; i <= mc.player.getInventory().size(); i++) {
if (canGrind(mc.player.getInventory().getStack(i))) {
try {
Thread.sleep(delay.get());
} catch (InterruptedException e) {
e.printStackTrace();
}
if (mc.currentScreen == null) break;
InvUtils.shiftClick().slot(i);
InvUtils.move().fromId(2).to(i);
}
}
});
}
private boolean canGrind(ItemStack stack) {
if (itemBlacklist.get().contains(stack.getItem())) return false;
Map<Enchantment, Integer> enchantments = (Map<Enchantment, Integer>) EnchantmentHelper.getEnchantments(stack);
int availEnchs = 0;
for (Enchantment enchantment : enchantments.keySet()) {
availEnchs++;
if (enchantment.isCursed())
availEnchs--;
if (enchantmentBlacklist.get().contains(enchantment))
return false;
}
return !enchantments.isEmpty() && availEnchs > 0;
}
}