HookStickyKeyBindingState.java 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package chylex.bettercontrols.mixin;
  2. import chylex.bettercontrols.input.ToggleTrackerForStickyKey;
  3. import net.minecraft.client.KeyMapping;
  4. import net.minecraft.client.ToggleKeyMapping;
  5. import org.spongepowered.asm.mixin.Final;
  6. import org.spongepowered.asm.mixin.Mixin;
  7. import org.spongepowered.asm.mixin.Shadow;
  8. import org.spongepowered.asm.mixin.injection.At;
  9. import org.spongepowered.asm.mixin.injection.Inject;
  10. import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
  11. import java.util.function.BooleanSupplier;
  12. @Mixin(ToggleKeyMapping.class)
  13. public abstract class HookStickyKeyBindingState extends KeyMapping {
  14. @Shadow
  15. @Final
  16. private BooleanSupplier needsToggle;
  17. public HookStickyKeyBindingState(final String translationKey, final int code, final String category) {
  18. super(translationKey, code, category);
  19. }
  20. @Inject(method = "setDown", at = @At("HEAD"), cancellable = true)
  21. public void setPressed(final boolean pressed, final CallbackInfo info) {
  22. if (ToggleTrackerForStickyKey.isOverrideEnabled(this)) {
  23. ((AccessKeyBindingFields)this).setPressedField(pressed);
  24. info.cancel();
  25. }
  26. }
  27. @Override
  28. public boolean isDown() {
  29. return super.isDown() || (ToggleTrackerForStickyKey.isOverrideEnabled(this) && needsToggle.getAsBoolean());
  30. }
  31. }