Исходник ItemScroller Forge 1.16.5

Начинающий
Статус
Оффлайн
Регистрация
17 Мар 2024
Сообщения
32
Реакции[?]
3
Поинты[?]
3K

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Очень умни itemscroller. Работает через миксины, других способов я не нашел.


MixinContainerScreen.java:
@Mixin(ContainerScreen.class)
public abstract class MixinContainerScreen {
    [USER=8455]@Shadow[/USER]
    [USER=346354]@FINAL[/USER]
    protected Container menu;

    [USER=8455]@Shadow[/USER]
    protected abstract boolean isHovering(Slot p_195362_1_, double p_195362_2_, double p_195362_4_);

    [USER=8455]@Shadow[/USER]
    protected abstract void slotClicked(Slot p_184098_1_, int p_184098_2_, int p_184098_3_, ClickType p_184098_4_);

    @Inject(method = "render", at = @At("HEAD"))
    private void render(MatrixStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_, CallbackInfo ci) {
        if (InputHandler.isMousePressed(GLFW.GLFW_MOUSE_BUTTON_LEFT) && InputHandler.isKeyPressed(GLFW.GLFW_KEY_LEFT_SHIFT)) {
            for (int i1 = 0; i1 < this.menu.slots.size(); ++i1) {
                Slot slot = this.menu.slots.get(i1);
                if (this.isHovering(slot, (double) p_230430_2_, (double) p_230430_3_) && slot.isActive()) {
                    this.slotClicked(slot, slot.index, 0, ClickType.QUICK_MOVE);
                }
            }
        }
    }
}

InputHandler.java:
public class InputHandler {
    private static final HashMap<Integer, Boolean> mouse = new HashMap<>();
    private static final HashMap<Integer, Boolean> keys = new HashMap<>();

    @SubscribeEvent
    public void onMouseInput(InputEvent.MouseInputEvent event) {
        mouse.put(event.getButton(), (event.getAction() == 1));
    }

    @SubscribeEvent
    public void onKeyInput(InputEvent.KeyInputEvent event) {
        if(event.getAction() == 2)
            return;
        keys.put(event.getKey(), (event.getAction() == 1));
    }

    public static boolean isMousePressed(int key) {
        if(!mouse.containsKey(key))
            return false;
        return mouse.get(key);
    }

    public static boolean isKeyPressed(int key) {
        if(!keys.containsKey(key))
            return false;
        return keys.get(key);
    }
}
Не забудьте зарегать эвент:
MinecraftForge.EVENT_BUS.register(new InputHandler());

Задержек на клик нет, и проверки работы модуля тоже, сделаете сами т.к. код зависит от базы
 
Начинающий
Статус
Оффлайн
Регистрация
14 Июл 2024
Сообщения
5
Реакции[?]
0
Поинты[?]
0
Очень умни itemscroller. Работает через миксины, других способов я не нашел.


MixinContainerScreen.java:
@Mixin(ContainerScreen.class)
public abstract class MixinContainerScreen {
    [USER=8455]@Shadow[/USER]
    [USER=346354]@FINAL[/USER]
    protected Container menu;

    [USER=8455]@Shadow[/USER]
    protected abstract boolean isHovering(Slot p_195362_1_, double p_195362_2_, double p_195362_4_);

    [USER=8455]@Shadow[/USER]
    protected abstract void slotClicked(Slot p_184098_1_, int p_184098_2_, int p_184098_3_, ClickType p_184098_4_);

    @Inject(method = "render", at = @At("HEAD"))
    private void render(MatrixStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_, CallbackInfo ci) {
        if (InputHandler.isMousePressed(GLFW.GLFW_MOUSE_BUTTON_LEFT) && InputHandler.isKeyPressed(GLFW.GLFW_KEY_LEFT_SHIFT)) {
            for (int i1 = 0; i1 < this.menu.slots.size(); ++i1) {
                Slot slot = this.menu.slots.get(i1);
                if (this.isHovering(slot, (double) p_230430_2_, (double) p_230430_3_) && slot.isActive()) {
                    this.slotClicked(slot, slot.index, 0, ClickType.QUICK_MOVE);
                }
            }
        }
    }
}

InputHandler.java:
public class InputHandler {
    private static final HashMap<Integer, Boolean> mouse = new HashMap<>();
    private static final HashMap<Integer, Boolean> keys = new HashMap<>();

    @SubscribeEvent
    public void onMouseInput(InputEvent.MouseInputEvent event) {
        mouse.put(event.getButton(), (event.getAction() == 1));
    }

    @SubscribeEvent
    public void onKeyInput(InputEvent.KeyInputEvent event) {
        if(event.getAction() == 2)
            return;
        keys.put(event.getKey(), (event.getAction() == 1));
    }

    public static boolean isMousePressed(int key) {
        if(!mouse.containsKey(key))
            return false;
        return mouse.get(key);
    }

    public static boolean isKeyPressed(int key) {
        if(!keys.containsKey(key))
            return false;
        return keys.get(key);
    }
}
Не забудьте зарегать эвент:
MinecraftForge.EVENT_BUS.register(new InputHandler());

Задержек на клик нет, и проверки работы модуля тоже, сделаете сами т.к. код зависит от базы
Нормально
 
Начинающий
Статус
Оффлайн
Регистрация
20 Июн 2024
Сообщения
233
Реакции[?]
1
Поинты[?]
1K
Очень умни itemscroller. Работает через миксины, других способов я не нашел.


MixinContainerScreen.java:
@Mixin(ContainerScreen.class)
public abstract class MixinContainerScreen {
    [USER=8455]@Shadow[/USER]
    [USER=346354]@FINAL[/USER]
    protected Container menu;

    [USER=8455]@Shadow[/USER]
    protected abstract boolean isHovering(Slot p_195362_1_, double p_195362_2_, double p_195362_4_);

    [USER=8455]@Shadow[/USER]
    protected abstract void slotClicked(Slot p_184098_1_, int p_184098_2_, int p_184098_3_, ClickType p_184098_4_);

    @Inject(method = "render", at = @At("HEAD"))
    private void render(MatrixStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_, CallbackInfo ci) {
        if (InputHandler.isMousePressed(GLFW.GLFW_MOUSE_BUTTON_LEFT) && InputHandler.isKeyPressed(GLFW.GLFW_KEY_LEFT_SHIFT)) {
            for (int i1 = 0; i1 < this.menu.slots.size(); ++i1) {
                Slot slot = this.menu.slots.get(i1);
                if (this.isHovering(slot, (double) p_230430_2_, (double) p_230430_3_) && slot.isActive()) {
                    this.slotClicked(slot, slot.index, 0, ClickType.QUICK_MOVE);
                }
            }
        }
    }
}

InputHandler.java:
public class InputHandler {
    private static final HashMap<Integer, Boolean> mouse = new HashMap<>();
    private static final HashMap<Integer, Boolean> keys = new HashMap<>();

    @SubscribeEvent
    public void onMouseInput(InputEvent.MouseInputEvent event) {
        mouse.put(event.getButton(), (event.getAction() == 1));
    }

    @SubscribeEvent
    public void onKeyInput(InputEvent.KeyInputEvent event) {
        if(event.getAction() == 2)
            return;
        keys.put(event.getKey(), (event.getAction() == 1));
    }

    public static boolean isMousePressed(int key) {
        if(!mouse.containsKey(key))
            return false;
        return mouse.get(key);
    }

    public static boolean isKeyPressed(int key) {
        if(!keys.containsKey(key))
            return false;
        return keys.get(key);
    }
}
Не забудьте зарегать эвент:
MinecraftForge.EVENT_BUS.register(new InputHandler());

Задержек на клик нет, и проверки работы модуля тоже, сделаете сами т.к. код зависит от базы
Не работает, всё сделал
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2023
Сообщения
124
Реакции[?]
0
Поинты[?]
0
Очень умни itemscroller. Работает через миксины, других способов я не нашел.


MixinContainerScreen.java:
@Mixin(ContainerScreen.class)
public abstract class MixinContainerScreen {
    [USER=8455]@Shadow[/USER]
    [USER=346354]@FINAL[/USER]
    protected Container menu;

    [USER=8455]@Shadow[/USER]
    protected abstract boolean isHovering(Slot p_195362_1_, double p_195362_2_, double p_195362_4_);

    [USER=8455]@Shadow[/USER]
    protected abstract void slotClicked(Slot p_184098_1_, int p_184098_2_, int p_184098_3_, ClickType p_184098_4_);

    @Inject(method = "render", at = @At("HEAD"))
    private void render(MatrixStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_, CallbackInfo ci) {
        if (InputHandler.isMousePressed(GLFW.GLFW_MOUSE_BUTTON_LEFT) && InputHandler.isKeyPressed(GLFW.GLFW_KEY_LEFT_SHIFT)) {
            for (int i1 = 0; i1 < this.menu.slots.size(); ++i1) {
                Slot slot = this.menu.slots.get(i1);
                if (this.isHovering(slot, (double) p_230430_2_, (double) p_230430_3_) && slot.isActive()) {
                    this.slotClicked(slot, slot.index, 0, ClickType.QUICK_MOVE);
                }
            }
        }
    }
}

InputHandler.java:
public class InputHandler {
    private static final HashMap<Integer, Boolean> mouse = new HashMap<>();
    private static final HashMap<Integer, Boolean> keys = new HashMap<>();

    @SubscribeEvent
    public void onMouseInput(InputEvent.MouseInputEvent event) {
        mouse.put(event.getButton(), (event.getAction() == 1));
    }

    @SubscribeEvent
    public void onKeyInput(InputEvent.KeyInputEvent event) {
        if(event.getAction() == 2)
            return;
        keys.put(event.getKey(), (event.getAction() == 1));
    }

    public static boolean isMousePressed(int key) {
        if(!mouse.containsKey(key))
            return false;
        return mouse.get(key);
    }

    public static boolean isKeyPressed(int key) {
        if(!keys.containsKey(key))
            return false;
        return keys.get(key);
    }
}
Не забудьте зарегать эвент:
MinecraftForge.EVENT_BUS.register(new InputHandler());

Задержек на клик нет, и проверки работы модуля тоже, сделаете сами т.к. код зависит от базы
1730634012893.png"slots"
 
Сверху Снизу