package dev.isxander.controlify.api.bind; import dev.isxander.controlify.bindings.*; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.ControllerState; import net.minecraft.client.KeyMapping; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import java.util.function.BooleanSupplier; public interface ControllerBindingBuilder { static ControllerBindingBuilder create(Controller controller) { return new ControllerBindingImpl.ControllerBindingBuilderImpl<>(controller); } /** * Sets the identifier for the binding. * @param id the identifier for the binding, the namespace should be your modid. */ ControllerBindingBuilder identifier(ResourceLocation id); /** * Sets the identifier for the binding. * @param namespace the namespace for the binding, should be your modid. * @param path the path for the binding. */ ControllerBindingBuilder identifier(String namespace, String path); /** * The default bind for the binding. This is usually inaccessible due to unknown * generics and {@link ControllerBindingBuilder#defaultBind(GamepadBinds)} should be used instead. * @param bind the default bind */ ControllerBindingBuilder defaultBind(IBind bind); /** * Sets the default gamepad bind for the binding. * If the controller is not a gamepad, the default is unbound. * @param gamepadBind the default gamepad bind */ ControllerBindingBuilder defaultBind(GamepadBinds gamepadBind); /** * Sets the name of the binding. *

* If left unset, the default translation location is *

* {@code controlify.binding..}. * * @param name the name of the binding */ ControllerBindingBuilder name(Component name); /** * Sets the description of the binding. *

* If left unset, the default translation location is *

* {@code controlify.binding...desc}. * * @param description the description of the binding */ ControllerBindingBuilder description(Component description); /** * Sets the category of the binding. * Must be set. * * @param category the category of the binding */ ControllerBindingBuilder category(Component category); ControllerBindingBuilder context(BindContext... contexts); ControllerBindingBuilder radialCandidate(ResourceLocation icon); /** * Specifies are vanilla override for the binding. * Will emulate presses of the vanilla keybind when the controller binding is pressed. * Though usage of this is discouraged as it can have funny behaviours. * * @param keyMapping the vanilla keybind to emulate * @param toggleable if the binding should be toggleable */ ControllerBindingBuilder vanillaOverride(KeyMapping keyMapping, BooleanSupplier toggleable); /** * Specifies are vanilla override for the binding. * Will emulate presses of the vanilla keybind when the controller binding is pressed. * Though usage of this is discouraged as it can have funny behaviours. * * @param keyMapping the vanilla keybind to emulate */ ControllerBindingBuilder vanillaOverride(KeyMapping keyMapping); ControllerBinding build(); }