Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

ItemScroller Forge 1.16.5

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
17 Мар 2024
Сообщения
32
Реакции
3
Очень умни itemscroller. Работает через миксины, других способов я не нашел.


MixinContainerScreen.java:
Expand Collapse Copy
@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:
Expand Collapse Copy
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());

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


MixinContainerScreen.java:
Expand Collapse Copy
@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:
Expand Collapse Copy
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());

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


MixinContainerScreen.java:
Expand Collapse Copy
@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:
Expand Collapse Copy
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());

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


MixinContainerScreen.java:
Expand Collapse Copy
@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:
Expand Collapse Copy
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"
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Годно
 
что то новое на forge
 
Назад
Сверху Снизу