Skip to content

Commit

Permalink
fix!: Add Kuma to handle advanced modifier key mappings (shipped JiJ …
Browse files Browse the repository at this point in the history
…via Balm)
  • Loading branch information
BlayTheNinth committed Jun 3, 2024
1 parent 3e3ebf9 commit 13db296
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 61 deletions.
1 change: 1 addition & 0 deletions fabric/dependencies.gradle
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
dependencies {
modImplementation("net.blay09.mods:kuma-api-fabric:20.6.1-SNAPSHOT")
}
1 change: 1 addition & 0 deletions forge/dependencies.gradle
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
dependencies {
implementation("net.blay09.mods:kuma-api-forge:20.6.1-SNAPSHOT")
}
4 changes: 1 addition & 3 deletions shared/dependencies.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
repositories {
}

dependencies {
implementation("net.blay09.mods:kuma-api-common:[20.1.0,20.2.0)")
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import com.mojang.blaze3d.platform.Window;
import net.blay09.mods.balm.api.Balm;
import net.blay09.mods.balm.api.client.BalmClient;
import net.blay09.mods.balm.api.client.keymappings.BalmKeyMappings;
import net.blay09.mods.balm.api.event.ItemCraftedEvent;
import net.blay09.mods.balm.api.event.client.ConnectedToServerEvent;
import net.blay09.mods.balm.api.event.client.screen.ScreenDrawEvent;
Expand Down Expand Up @@ -55,7 +54,7 @@ public static void initialize() {
//noinspection unchecked
CraftingTweaksClientAPI.registerCraftingGridGuiHandler(AbstractContainerScreen.class, new DefaultGridGuiHandler());

ModKeyMappings.initialize(BalmClient.getKeyMappings());
ModKeyMappings.initialize();

Balm.getEvents().onEvent(ItemCraftedEvent.class, CraftingTweaksClient::onItemCrafted);

Expand Down Expand Up @@ -101,20 +100,19 @@ public static boolean screenKeyPressed(ScreenKeyEvent event) {
}

CraftingGrid grid = CraftingTweaksProviderManager.getDefaultCraftingGrid(menu).orElse(null);
CompressType compressType = ModKeyMappings.getCompressTypeForKey(key, scanCode);
CompressType compressType = ModKeyMappings.getCompressTypeForKey(key, scanCode, event.getModifiers());
if (grid != null) {
String modId = grid.getId().getNamespace();
CraftingTweaksMode config = CraftingTweaksConfig.getActive().getCraftingTweaksMode(modId);
if (config == CraftingTweaksMode.DEFAULT || config == CraftingTweaksMode.HOTKEYS) {
BalmKeyMappings keyMappings = BalmClient.getKeyMappings();
boolean isRotate = keyMappings.isActiveAndMatches(ModKeyMappings.keyRotate, key, scanCode);
boolean isRotateCCW = keyMappings.isActiveAndMatches(ModKeyMappings.keyRotateCounterClockwise, key, scanCode);
boolean isBalance = keyMappings.isActiveAndMatches(ModKeyMappings.keyBalance, key, scanCode);
boolean isSpread = keyMappings.isActiveAndMatches(ModKeyMappings.keySpread, key, scanCode);
boolean isClear = keyMappings.isActiveAndMatches(ModKeyMappings.keyClear, key, scanCode);
boolean isForceClear = keyMappings.isActiveAndMatches(ModKeyMappings.keyForceClear, key, scanCode);
boolean isRefill = keyMappings.isActiveAndMatches(ModKeyMappings.keyRefillLast, key, scanCode);
boolean isRefillStack = keyMappings.isActiveAndMatches(ModKeyMappings.keyRefillLastStack, key, scanCode);
boolean isRotate = ModKeyMappings.keyRotate.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
boolean isRotateCCW = ModKeyMappings.keyRotateCounterClockwise.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
boolean isBalance = ModKeyMappings.keyBalance.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
boolean isSpread = ModKeyMappings.keySpread.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
boolean isClear = ModKeyMappings.keyClear.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
boolean isForceClear = ModKeyMappings.keyForceClear.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
boolean isRefill = ModKeyMappings.keyRefillLast.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
boolean isRefillStack = ModKeyMappings.keyRefillLastStack.isActiveAndMatchesKey(key, scanCode, event.getModifiers());
if (isRotate || isRotateCCW) {
if (CraftingTweaks.isServerSideInstalled) {
Balm.getNetworking().sendToServer(new RotateMessage(grid.getId(), isRotateCCW));
Expand Down Expand Up @@ -206,7 +204,7 @@ public static boolean screenMouseClick(ScreenMouseEvent event) {
Slot mouseSlot = screen instanceof AbstractContainerScreen<?> ? ((AbstractContainerScreenAccessor) screen).getHoveredSlot() : null;
CraftingGrid grid = CraftingTweaksProviderManager.getDefaultCraftingGrid(menu).orElse(null);
if (grid != null) {
if (BalmClient.getKeyMappings().isKeyDownIgnoreContext(ModKeyMappings.keyTransferStack)) {
if (ModKeyMappings.keyTransferStack.isActiveAndDown()) {
if (mouseSlot != null && mouseSlot.hasItem()) {
List<Slot> transferSlots = Lists.newArrayList();
transferSlots.add(mouseSlot);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,64 +1,112 @@
package net.blay09.mods.craftingtweaks.client;

import com.mojang.blaze3d.platform.InputConstants;
import net.blay09.mods.balm.api.client.BalmClient;
import net.blay09.mods.balm.api.client.keymappings.BalmKeyMappings;
import net.blay09.mods.balm.api.client.keymappings.KeyConflictContext;
import net.blay09.mods.balm.api.client.keymappings.KeyModifier;
import net.blay09.mods.craftingtweaks.CompressType;
import net.minecraft.client.KeyMapping;
import net.blay09.mods.craftingtweaks.CraftingTweaks;
import net.blay09.mods.kuma.api.*;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;

public class ModKeyMappings {

public static KeyMapping keyRotate;
public static KeyMapping keyRotateCounterClockwise;
public static KeyMapping keyBalance;
public static KeyMapping keySpread;
public static KeyMapping keyClear;
public static KeyMapping keyForceClear;
public static KeyMapping keyCompressOne;
public static KeyMapping keyCompressStack;
public static KeyMapping keyCompressAll;
public static KeyMapping keyDecompressOne;
public static KeyMapping keyDecompressStack;
public static KeyMapping keyDecompressAll;
public static KeyMapping keyRefillLast;
public static KeyMapping keyRefillLastStack;
public static KeyMapping keyTransferStack;

public static void initialize(BalmKeyMappings keyMappings) {
keyRotate = keyMappings.registerKeyMapping("key.craftingtweaks.rotate", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyRotateCounterClockwise = keyMappings.registerKeyMapping("key.craftingtweaks.rotate_counter_clockwise", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyBalance = keyMappings.registerKeyMapping("key.craftingtweaks.balance", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keySpread = keyMappings.registerKeyMapping("key.craftingtweaks.spread", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyClear = keyMappings.registerKeyMapping("key.craftingtweaks.clear", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyForceClear = keyMappings.registerKeyMapping("key.craftingtweaks.force_clear", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyCompressOne = keyMappings.registerKeyMapping("key.craftingtweaks.compressOne", KeyConflictContext.GUI, KeyModifier.CONTROL, GLFW.GLFW_KEY_K, "key.categories.craftingtweaks");
keyCompressStack = keyMappings.registerKeyMapping("key.craftingtweaks.compressStack", KeyConflictContext.GUI, KeyModifier.NONE, GLFW.GLFW_KEY_K, "key.categories.craftingtweaks");
keyCompressAll = keyMappings.registerKeyMapping("key.craftingtweaks.compressAll", KeyConflictContext.GUI, KeyModifier.SHIFT, GLFW.GLFW_KEY_K, "key.categories.craftingtweaks");
keyDecompressOne = keyMappings.registerKeyMapping("key.craftingtweaks.decompressOne", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyDecompressStack = keyMappings.registerKeyMapping("key.craftingtweaks.decompressStack", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyDecompressAll = keyMappings.registerKeyMapping("key.craftingtweaks.decompressAll", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
keyRefillLast = keyMappings.registerKeyMapping("key.craftingtweaks.refill_last", KeyConflictContext.GUI, KeyModifier.CONTROL, GLFW.GLFW_KEY_TAB, "key.categories.craftingtweaks");
keyRefillLastStack = keyMappings.registerKeyMapping("key.craftingtweaks.refill_last_stack", KeyConflictContext.GUI, KeyModifier.NONE, GLFW.GLFW_KEY_TAB, "key.categories.craftingtweaks");
keyTransferStack = keyMappings.registerKeyMapping("key.craftingtweaks.transfer_stack", KeyConflictContext.GUI, KeyModifier.NONE, InputConstants.UNKNOWN.getValue(), "key.categories.craftingtweaks");
public static ManagedKeyMapping keyRotate;
public static ManagedKeyMapping keyRotateCounterClockwise;
public static ManagedKeyMapping keyBalance;
public static ManagedKeyMapping keySpread;
public static ManagedKeyMapping keyClear;
public static ManagedKeyMapping keyForceClear;
public static ManagedKeyMapping keyCompressOne;
public static ManagedKeyMapping keyCompressStack;
public static ManagedKeyMapping keyCompressAll;
public static ManagedKeyMapping keyDecompressOne;
public static ManagedKeyMapping keyDecompressStack;
public static ManagedKeyMapping keyDecompressAll;
public static ManagedKeyMapping keyRefillLast;
public static ManagedKeyMapping keyRefillLastStack;
public static ManagedKeyMapping keyTransferStack;

public static void initialize() {
keyRotate = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "rotate"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyRotateCounterClockwise = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "rotate_counter_clockwise"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyBalance = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "balance"))
.withContext(KeyConflictContext.SCREEN)
.build();

keySpread = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "spread"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyClear = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "clear"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyForceClear = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "force_clear"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyCompressOne = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "compress_one"))
.withDefault(InputBinding.key(InputConstants.KEY_K, KeyModifiers.of(KeyModifier.CONTROL)))
.withFallbackDefault(InputBinding.none()) // TODO we avoid a virtual binding for now until Kuma#1 is fixed
.withContext(KeyConflictContext.SCREEN)
.build();

keyCompressStack = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "compress_stack"))
.withDefault(InputBinding.key(InputConstants.KEY_K))
.withContext(KeyConflictContext.SCREEN)
.build();

keyCompressAll = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "compress_all"))
.withDefault(InputBinding.key(InputConstants.KEY_K, KeyModifiers.of(KeyModifier.SHIFT)))
.withFallbackDefault(InputBinding.none()) // TODO we avoid a virtual binding for now until Kuma#1 is fixed
.withContext(KeyConflictContext.SCREEN)
.build();

keyDecompressOne = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "decompress_one"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyDecompressStack = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "decompress_stack"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyDecompressAll = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "decompress_all"))
.withContext(KeyConflictContext.SCREEN)
.build();

keyRefillLast = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "refill_last"))
.withDefault(InputBinding.key(InputConstants.KEY_TAB, KeyModifiers.of(KeyModifier.CONTROL)))
.withContext(KeyConflictContext.SCREEN)
.build();

keyRefillLastStack = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "refill_last_stack"))
.withDefault(InputBinding.key(InputConstants.KEY_TAB))
.withContext(KeyConflictContext.SCREEN)
.build();

keyTransferStack = Kuma.createKeyMapping(new ResourceLocation(CraftingTweaks.MOD_ID, "transfer_stack"))
.withContext(KeyConflictContext.SCREEN)
.build();
}

@Nullable
public static CompressType getCompressTypeForKey(int keyCode, int scanCode) {
if (BalmClient.getKeyMappings().isActiveAndMatches(keyCompressOne, keyCode, scanCode)) {
public static CompressType getCompressTypeForKey(int keyCode, int scanCode, int modifiers) {
if (keyCompressOne.isActiveAndMatchesKey(keyCode, scanCode, modifiers)) {
return CompressType.COMPRESS_ONE;
} else if (BalmClient.getKeyMappings().isActiveAndMatches(keyCompressStack, keyCode, scanCode)) {
} else if (keyCompressStack.isActiveAndMatchesKey(keyCode, scanCode, modifiers)) {
return CompressType.COMPRESS_STACK;
} else if (BalmClient.getKeyMappings().isActiveAndMatches(keyCompressAll, keyCode, scanCode)) {
} else if (keyCompressAll.isActiveAndMatchesKey(keyCode, scanCode, modifiers)) {
return CompressType.COMPRESS_ALL;
} else if (BalmClient.getKeyMappings().isActiveAndMatches(keyDecompressOne, keyCode, scanCode)) {
} else if (keyDecompressOne.isActiveAndMatchesKey(keyCode, scanCode, modifiers)) {
return CompressType.DECOMPRESS_ONE;
} else if (BalmClient.getKeyMappings().isActiveAndMatches(keyDecompressStack, keyCode, scanCode)) {
} else if (keyDecompressStack.isActiveAndMatchesKey(keyCode, scanCode, modifiers)) {
return CompressType.DECOMPRESS_STACK;
} else if (BalmClient.getKeyMappings().isActiveAndMatches(keyDecompressAll, keyCode, scanCode)) {
} else if (keyDecompressAll.isActiveAndMatchesKey(keyCode, scanCode, modifiers)) {
return CompressType.DECOMPRESS_ALL;
}

Expand Down

0 comments on commit 13db296

Please sign in to comment.