Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package me.alpha432.oyvey.features.modules.combat;

import me.alpha432.oyvey.features.modules.Module;
import me.alpha432.oyvey.features.settings.Setting;
import me.alpha432.oyvey.util.inventory.InventoryUtil;
import me.alpha432.oyvey.util.inventory.Result;
import net.minecraft.world.item.Items;

import static me.alpha432.oyvey.util.inventory.InventoryUtil.FULL_SCOPE;
import static me.alpha432.oyvey.util.inventory.InventoryUtil.HOTBAR_SCOPE;

public class ClickPearl extends Module {
private final Setting<Boolean> inventory = bool("Inventory", false);

public ClickPearl() {
super("ClickPearl", "Throws a pearl when enabled.", Category.COMBAT);
}

@Override
public void onEnable() {
disable();

if (nullCheck()) return;

int last = InventoryUtil.selected();
Result result = InventoryUtil.find(Items.ENDER_PEARL, inventory.getValue() ? FULL_SCOPE : HOTBAR_SCOPE);
if (!result.found())
return;

InventoryUtil.swap(result);
mc.gameMode.useItem(mc.player, result.hand());
InventoryUtil.swapBack(last, result);
}
}
2 changes: 2 additions & 0 deletions src/main/java/me/alpha432/oyvey/manager/ModuleManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import me.alpha432.oyvey.features.modules.client.ClickGui;
import me.alpha432.oyvey.features.modules.client.HudEditor;
import me.alpha432.oyvey.features.modules.client.Notifications;
import me.alpha432.oyvey.features.modules.combat.ClickPearl;
import me.alpha432.oyvey.features.modules.combat.Criticals;
import me.alpha432.oyvey.features.modules.hud.Coordinates;
import me.alpha432.oyvey.features.modules.hud.Watermark;
Expand Down Expand Up @@ -43,6 +44,7 @@ public void init() {
register(new Velocity());
register(new BlockHighlight());
register(new NoFall());
register(new ClickPearl());
}

public void register(Module module) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/me/alpha432/oyvey/util/EnchantmentUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

public final class EnchantmentUtil implements Util {
private EnchantmentUtil() {
throw new IllegalArgumentException("пошел нахуй");
throw new IllegalArgumentException();
}

public static int getLevel(ResourceKey<Enchantment> key, ItemStack stack) {
Expand Down
98 changes: 98 additions & 0 deletions src/main/java/me/alpha432/oyvey/util/inventory/InventoryUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package me.alpha432.oyvey.util.inventory;

import me.alpha432.oyvey.util.inventory.strategy.HoldingStrategy;
import me.alpha432.oyvey.util.inventory.strategy.HotbarStrategy;
import me.alpha432.oyvey.util.inventory.strategy.InventoryStrategy;
import me.alpha432.oyvey.util.inventory.strategy.SwapStrategy;
import me.alpha432.oyvey.util.traits.Util;
import net.minecraft.world.inventory.ClickType;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;

import java.util.EnumSet;
import java.util.List;
import java.util.function.BiPredicate;
import java.util.function.Predicate;

public final class InventoryUtil implements Util {
public static final Result NONE = new Result(-1, ItemStack.EMPTY, ResultType.NONE);

public static final EnumSet<ResultType> HOTBAR_SCOPE = EnumSet.of(ResultType.OFFHAND, ResultType.HOTBAR);
public static final EnumSet<ResultType> INVENTORY_SCOPE = EnumSet.of(ResultType.OFFHAND, ResultType.INVENTORY);
public static final EnumSet<ResultType> FULL_SCOPE = EnumSet.of(ResultType.OFFHAND, ResultType.HOTBAR, ResultType.INVENTORY);

private static final List<SwapStrategy> STRATEGIES = List.of(
HoldingStrategy.INSTANCE,
HotbarStrategy.INSTANCE,
InventoryStrategy.INSTANCE
);


private InventoryUtil() {
throw new AssertionError();
}

public static ItemStack cursor() {
return mc.player.containerMenu.getCarried();
}

public static int selected() {
return mc.player.getInventory().getSelectedSlot();
}

public static void click(int slot, int button, ClickType type) {
int id = mc.player.containerMenu.containerId;
mc.gameMode.handleInventoryMouseClick(id, slot, button, type, mc.player);
}

public static void swap(int to) {
if (to < 0 || to > 8) return;
mc.player.getInventory().setSelectedSlot(to);
mc.gameMode.ensureHasSentCarriedItem();
}

public static void swap(Result result) {
for (SwapStrategy strategy : STRATEGIES) {
if (strategy.swap(result))
return;
}
}

public static void swapBack(int last, Result result) {
for (SwapStrategy strategy : STRATEGIES) {
if (strategy.swapBack(last, result))
return;
}
}

public static Result find(Item target, EnumSet<ResultType> scopes) {
return find(stack -> stack.is(target), scopes);
}

public static Result find(Predicate<ItemStack> predicate, EnumSet<ResultType> scopes) {
return find((item, scope) -> scopes.contains(scope) && predicate.test(item));
}

public static Result find(BiPredicate<ItemStack, ResultType> predicate) {
ItemStack offhand = mc.player.getOffhandItem();
if (predicate.test(offhand, ResultType.OFFHAND)) {
return Result.fromOffhand(offhand);
}

for (int i = 0; i < 9; i++) {
ItemStack item = mc.player.getInventory().getItem(i);
if (predicate.test(item, ResultType.HOTBAR)) {
return new Result(i, item, ResultType.HOTBAR);
}
}

for (int i = 9; i < 36; i++) {
ItemStack item = mc.player.getInventory().getItem(i);
if (predicate.test(item, ResultType.INVENTORY)) {
return new Result(i, item, ResultType.INVENTORY);
}
}

return NONE;
}
}
26 changes: 26 additions & 0 deletions src/main/java/me/alpha432/oyvey/util/inventory/Result.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.alpha432.oyvey.util.inventory;

import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.ItemStack;

public record Result(int slot, ItemStack stack, ResultType type, boolean holding) {
public Result(int slot, ItemStack stack, ResultType type) {
this(slot, stack, type, isHolding(type, slot));
}

static Result fromOffhand(ItemStack stack) {
return new Result(-1, stack, ResultType.OFFHAND);
}

public InteractionHand hand() {
return type == ResultType.OFFHAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND;
}

public boolean found() {
return type != ResultType.NONE;
}

private static boolean isHolding(ResultType type, int slot) {
return type == ResultType.OFFHAND || type == ResultType.HOTBAR && slot == InventoryUtil.selected();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package me.alpha432.oyvey.util.inventory;

public enum ResultType {
HOTBAR,
INVENTORY,
OFFHAND,
NONE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package me.alpha432.oyvey.util.inventory.strategy;

import me.alpha432.oyvey.util.inventory.Result;

public final class HoldingStrategy implements SwapStrategy{
public static final HoldingStrategy INSTANCE = new HoldingStrategy();

private HoldingStrategy() {
}

@Override
public boolean swap(Result result) {
return result.holding();
}

@Override
public boolean swapBack(int last, Result result) {
return result.holding();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package me.alpha432.oyvey.util.inventory.strategy;

import me.alpha432.oyvey.util.inventory.InventoryUtil;
import me.alpha432.oyvey.util.inventory.Result;
import me.alpha432.oyvey.util.inventory.ResultType;

public final class HotbarStrategy implements SwapStrategy {
public static final HotbarStrategy INSTANCE = new HotbarStrategy();

private HotbarStrategy() {
}

@Override
public boolean swap(Result result) {
if (result.type() == ResultType.HOTBAR) {
InventoryUtil.swap(result.slot());
return true;
}
return false;
}

@Override
public boolean swapBack(int last, Result result) {
if (result.type() == ResultType.HOTBAR) {
InventoryUtil.swap(last);
return true;
}
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package me.alpha432.oyvey.util.inventory.strategy;

import me.alpha432.oyvey.util.inventory.InventoryUtil;
import me.alpha432.oyvey.util.inventory.Result;
import me.alpha432.oyvey.util.inventory.ResultType;
import net.minecraft.world.inventory.ClickType;

public final class InventoryStrategy implements SwapStrategy {
public static final InventoryStrategy INSTANCE = new InventoryStrategy();

private InventoryStrategy() {
}

@Override
public boolean swap(Result result) {
if (result.type() != ResultType.INVENTORY && result.type() != ResultType.HOTBAR)
return false;
int slot = inventorySlot(result);
InventoryUtil.click(slot, InventoryUtil.selected(), ClickType.SWAP);
return true;
}

@Override
public boolean swapBack(int last, Result result) {
return swap(result);
}

private static int inventorySlot(Result result) {
return result.type() == ResultType.HOTBAR ? result.slot() + 36 : result.slot();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package me.alpha432.oyvey.util.inventory.strategy;

import me.alpha432.oyvey.util.inventory.Result;

public interface SwapStrategy {
boolean swap(Result result);

boolean swapBack(int last, Result result);
}
1 change: 1 addition & 0 deletions src/main/resources/oyvey.accesswidener
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ accessible field net/minecraft/network/protocol/game/ServerboundInteractPacket e
accessible method net/minecraft/network/protocol/game/ServerboundInteractPacket$Action getType ()Lnet/minecraft/network/protocol/game/ServerboundInteractPacket$ActionType;
accessible class net/minecraft/network/protocol/game/ServerboundInteractPacket$ActionType
accessible field net/minecraft/network/protocol/game/ServerboundInteractPacket action Lnet/minecraft/network/protocol/game/ServerboundInteractPacket$Action;
accessible method net/minecraft/client/multiplayer/MultiPlayerGameMode ensureHasSentCarriedItem ()V