forked from Clones/Controlify
✏️ Allow repeat events for drop key + drop stack
This commit is contained in:
@ -44,7 +44,7 @@ public class ControllerBindings<T extends ControllerState> {
|
|||||||
JUMP, SNEAK,
|
JUMP, SNEAK,
|
||||||
ATTACK, USE,
|
ATTACK, USE,
|
||||||
SPRINT,
|
SPRINT,
|
||||||
DROP,
|
DROP, DROP_STACK,
|
||||||
NEXT_SLOT, PREV_SLOT,
|
NEXT_SLOT, PREV_SLOT,
|
||||||
PAUSE,
|
PAUSE,
|
||||||
INVENTORY,
|
INVENTORY,
|
||||||
@ -172,6 +172,12 @@ public class ControllerBindings<T extends ControllerState> {
|
|||||||
.category(GAMEPLAY_CATEGORY)
|
.category(GAMEPLAY_CATEGORY)
|
||||||
.context(BindContexts.INGAME, BindContexts.INVENTORY)
|
.context(BindContexts.INGAME, BindContexts.INVENTORY)
|
||||||
.build());
|
.build());
|
||||||
|
register(DROP_STACK = ControllerBindingBuilder.create(controller)
|
||||||
|
.identifier("controlify", "drop_stack")
|
||||||
|
.defaultBind(new EmptyBind<>())
|
||||||
|
.category(GAMEPLAY_CATEGORY)
|
||||||
|
.context(BindContexts.INGAME)
|
||||||
|
.build());
|
||||||
register(NEXT_SLOT = ControllerBindingBuilder.create(controller)
|
register(NEXT_SLOT = ControllerBindingBuilder.create(controller)
|
||||||
.identifier("controlify", "next_slot")
|
.identifier("controlify", "next_slot")
|
||||||
.defaultBind(GamepadBinds.RIGHT_BUMPER)
|
.defaultBind(GamepadBinds.RIGHT_BUMPER)
|
||||||
|
@ -187,6 +187,12 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
|||||||
return Optional.of(Component.translatable("controlify.guide.ingame.drop"));
|
return Optional.of(Component.translatable("controlify.guide.ingame.drop"));
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
});
|
});
|
||||||
|
registerGuideAction(controller.bindings().DROP_STACK, ActionLocation.RIGHT, ctx -> {
|
||||||
|
var holdingItem = ctx.player().getInventory().getSelected();
|
||||||
|
if (!holdingItem.isEmpty() && holdingItem.getCount() > 1)
|
||||||
|
return Optional.of(Component.translatable("controlify.binding.controlify.drop_stack"));
|
||||||
|
return Optional.empty();
|
||||||
|
});
|
||||||
registerGuideAction(controller.bindings().SWAP_HANDS, ActionLocation.RIGHT, (ctx) -> {
|
registerGuideAction(controller.bindings().SWAP_HANDS, ActionLocation.RIGHT, (ctx) -> {
|
||||||
var player = ctx.player();
|
var player = ctx.player();
|
||||||
if (player.hasItemInSlot(EquipmentSlot.MAINHAND) || player.hasItemInSlot(EquipmentSlot.OFFHAND))
|
if (player.hasItemInSlot(EquipmentSlot.MAINHAND) || player.hasItemInSlot(EquipmentSlot.OFFHAND))
|
||||||
|
@ -6,6 +6,7 @@ import dev.isxander.controlify.api.ingameinput.LookInputModifier;
|
|||||||
import dev.isxander.controlify.controller.Controller;
|
import dev.isxander.controlify.controller.Controller;
|
||||||
import dev.isxander.controlify.api.event.ControlifyEvents;
|
import dev.isxander.controlify.api.event.ControlifyEvents;
|
||||||
import dev.isxander.controlify.controller.gamepad.GamepadController;
|
import dev.isxander.controlify.controller.gamepad.GamepadController;
|
||||||
|
import dev.isxander.controlify.utils.NavigationHelper;
|
||||||
import net.minecraft.client.CameraType;
|
import net.minecraft.client.CameraType;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
|
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
|
||||||
@ -24,9 +25,12 @@ public class InGameInputHandler {
|
|||||||
private double lookInputX, lookInputY;
|
private double lookInputX, lookInputY;
|
||||||
private boolean shouldShowPlayerList;
|
private boolean shouldShowPlayerList;
|
||||||
|
|
||||||
|
private final NavigationHelper dropRepeatHelper;
|
||||||
|
|
||||||
public InGameInputHandler(Controller<?, ?> controller) {
|
public InGameInputHandler(Controller<?, ?> controller) {
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
this.minecraft = Minecraft.getInstance();
|
this.minecraft = Minecraft.getInstance();
|
||||||
|
this.dropRepeatHelper = new NavigationHelper(20, 1);
|
||||||
|
|
||||||
ControlifyEvents.INPUT_MODE_CHANGED.register(mode -> {
|
ControlifyEvents.INPUT_MODE_CHANGED.register(mode -> {
|
||||||
if (minecraft.player != null) {
|
if (minecraft.player != null) {
|
||||||
@ -60,9 +64,15 @@ public class InGameInputHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!minecraft.player.isSpectator()) {
|
if (!minecraft.player.isSpectator()) {
|
||||||
if (controller.bindings().DROP.justPressed()) {
|
if (controller.bindings().DROP_STACK.justPressed()) {
|
||||||
minecraft.player.drop(false);
|
if (minecraft.player.drop(true)) {
|
||||||
minecraft.player.swing(InteractionHand.MAIN_HAND);
|
minecraft.player.swing(InteractionHand.MAIN_HAND);
|
||||||
|
}
|
||||||
|
} else if (dropRepeatHelper.shouldAction(controller.bindings().DROP)) {
|
||||||
|
if (minecraft.player.drop(false)) {
|
||||||
|
dropRepeatHelper.onNavigate();
|
||||||
|
minecraft.player.swing(InteractionHand.MAIN_HAND);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (controller.bindings().SWAP_HANDS.justPressed()) {
|
if (controller.bindings().SWAP_HANDS.justPressed()) {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package dev.isxander.controlify.utils;
|
package dev.isxander.controlify.utils;
|
||||||
|
|
||||||
|
import dev.isxander.controlify.api.bind.ControllerBinding;
|
||||||
|
|
||||||
public class NavigationHelper {
|
public class NavigationHelper {
|
||||||
private final int initialDelay, repeatDelay;
|
private final int initialDelay, repeatDelay;
|
||||||
private int currentDelay;
|
private int currentDelay;
|
||||||
@ -32,4 +34,12 @@ public class NavigationHelper {
|
|||||||
hasResetThisTick = false;
|
hasResetThisTick = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldAction(ControllerBinding binding) {
|
||||||
|
boolean shouldAction = binding.held() && (canNavigate() || !binding.prevHeld());
|
||||||
|
if (shouldAction && !binding.prevHeld()) {
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
return shouldAction;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,6 +173,7 @@
|
|||||||
"controlify.binding.controlify.inv_quick_move": "Quick Move",
|
"controlify.binding.controlify.inv_quick_move": "Quick Move",
|
||||||
"controlify.binding.controlify.inv_take_half": "Take Half",
|
"controlify.binding.controlify.inv_take_half": "Take Half",
|
||||||
"controlify.binding.controlify.drop": "Drop Item",
|
"controlify.binding.controlify.drop": "Drop Item",
|
||||||
|
"controlify.binding.controlify.drop_stack": "Drop Stack",
|
||||||
"controlify.binding.controlify.pick_block": "Pick Block",
|
"controlify.binding.controlify.pick_block": "Pick Block",
|
||||||
"controlify.binding.controlify.toggle_hud_visibility": "Toggle HUD Visibility",
|
"controlify.binding.controlify.toggle_hud_visibility": "Toggle HUD Visibility",
|
||||||
"controlify.binding.controlify.show_player_list": "Show Player List",
|
"controlify.binding.controlify.show_player_list": "Show Player List",
|
||||||
|
Reference in New Issue
Block a user