1
0
forked from Clones/Controlify

✏️ Allow repeat events for drop key + drop stack

This commit is contained in:
isXander
2023-05-16 20:31:48 +01:00
parent 0adbccc498
commit c77f78b00e
5 changed files with 37 additions and 4 deletions

View File

@ -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)

View File

@ -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))

View File

@ -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()) {

View File

@ -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;
}
} }

View File

@ -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",