Начинающий
- Статус
- Оффлайн
- Регистрация
- 12 Июн 2025
- Сообщения
- 73
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
видел эту штуку в арбузе решил сделать, немного баганая
LockSlot:
package by.oblamovvv.client.managers.module.impl.player;
import by.oblamovvv.client.api.events.orbit.EventHandler;
import by.oblamovvv.client.managers.events.input.KeyboardPressEvent;
import by.oblamovvv.client.managers.events.other.PacketEvent;
import by.oblamovvv.client.managers.events.player.UpdateEvent;
import by.oblamovvv.client.managers.module.Category;
import by.oblamovvv.client.managers.module.Module;
import by.oblamovvv.client.managers.module.ModuleInfo;
import by.oblamovvv.client.managers.module.settings.impl.BooleanSetting;
import by.oblamovvv.client.managers.module.settings.impl.MultiBooleanSetting;
import by.oblamovvv.client.managers.module.settings.impl.SliderSetting;
import by.oblamovvv.client.utils.other.Instance;
import net.minecraft.client.Minecraft;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.item.ItemStack;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.client.CClickWindowPacket;
import net.minecraft.network.play.client.CPlayerDiggingPacket;
@ModuleInfo(name = "LockSlot", category = Category.PLAYER)
public class LockSlot extends Module {
public static LockSlot getInstance() {
return Instance.get(LockSlot.class);
}
private final MultiBooleanSetting lockedSlots = new MultiBooleanSetting(this, "Залоченные слоты",
BooleanSetting.of("1", false),
BooleanSetting.of("2", false),
BooleanSetting.of("3", false),
BooleanSetting.of("4", false),
BooleanSetting.of("5", false),
BooleanSetting.of("6", false),
BooleanSetting.of("7", false),
BooleanSetting.of("8", false),
BooleanSetting.of("9", false)
);
private final BooleanSetting autoRestore = new BooleanSetting(this, "Авто-восстановление", true);
private final BooleanSetting blockQDrop = new BooleanSetting(this, "Блокировать Q", true);
private final BooleanSetting blockInventoryDrop = new BooleanSetting(this, "Блокировать инвентарь", true);
private final BooleanSetting visualIndicator = new BooleanSetting(this, "Визуальный индикатор", false);
private final SliderSetting restoreDelay = new SliderSetting(this, "Задержка восстановления", 5, 1, 20, 1).setVisible(autoRestore::getValue);
private final ItemStack[] lastLockedStacks = new ItemStack[9];
@EventHandler
public void onKeyPress(KeyboardPressEvent event) {
// Проверяем, нажата ли клавиша выброса (Q)
if (blockQDrop.getValue() && event.getKey() == Minecraft.getInstance().gameSettings.keyBindDrop.keyCode.getKeyCode()) {
int slot = Minecraft.getInstance().player.inventory.currentItem;
if (lockedSlots.getValue(String.valueOf(slot + 1))) {
event.setCancelled(true);
Minecraft.getInstance().gameSettings.keyBindDrop.setPressed(false);
}
}
}
private int restoreTicks = 0;
@EventHandler
public void onUpdate(UpdateEvent event) {
if (autoRestore.getValue()) {
restoreTicks++;
if (restoreTicks >= restoreDelay.getValue()) {
restoreTicks = 0;
for (int i = 0; i < 9; i++) {
if (lockedSlots.getValue(String.valueOf(i + 1))) {
ItemStack stack = Minecraft.getInstance().player.inventory.getStackInSlot(i);
if (!stack.isEmpty()) {
lastLockedStacks[i] = stack.copy();
}
else if (lastLockedStacks[i] != null && !lastLockedStacks[i].isEmpty()) {
Minecraft.getInstance().player.inventory.setInventorySlotContents(i, lastLockedStacks[i].copy());
}
}
}
}
}
}
@EventHandler
public void onPacket(PacketEvent event) {
if (!event.isSend()) return;
IPacket<?> packet = event.getPacket();
if (packet instanceof CPlayerDiggingPacket diggingPacket) {
CPlayerDiggingPacket.Action action = diggingPacket.getAction();
if (action == CPlayerDiggingPacket.Action.DROP_ITEM || action == CPlayerDiggingPacket.Action.DROP_ALL_ITEMS) {
int slot = Minecraft.getInstance().player.inventory.currentItem; // 0-8
if (lockedSlots.getValue(String.valueOf(slot + 1))) {
event.setCancelled(true);
}
}
}
if (blockInventoryDrop.getValue() && packet instanceof CClickWindowPacket clickPacket) {
if (clickPacket.getClickType() == ClickType.THROW) {
int slot = clickPacket.getSlotId();
if (slot >= 36 && slot <= 44) {
int hotbarSlot = slot - 36 + 1; // 1-9
if (lockedSlots.getValue(String.valueOf(hotbarSlot))) {
event.setCancelled(true);
}
}
}
}
}
}