Skip to content

Commit cecea72

Browse files
committed
#3774 Clean up AMECS implementation
1 parent d8ad227 commit cecea72

File tree

6 files changed

+102
-58
lines changed

6 files changed

+102
-58
lines changed

Fabric/src/main/java/mezz/jei/fabric/input/AbstractJeiKeyMapping.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package mezz.jei.fabric.input;
22

3-
import com.mojang.blaze3d.platform.InputConstants;
4-
import java.util.function.Consumer;
53
import mezz.jei.common.input.keys.IJeiKeyMappingInternal;
64
import mezz.jei.common.input.keys.JeiKeyConflictContext;
75
import net.minecraft.client.KeyMapping;
86
import net.minecraft.network.chat.Component;
97

8+
import java.util.function.Consumer;
9+
1010
public abstract class AbstractJeiKeyMapping implements IJeiKeyMappingInternal {
1111
protected final JeiKeyConflictContext context;
1212

@@ -16,19 +16,6 @@ public AbstractJeiKeyMapping(JeiKeyConflictContext context) {
1616

1717
protected abstract KeyMapping getMapping();
1818

19-
protected abstract InputConstants.Key getMappedKey();
20-
21-
@Override
22-
public boolean isActiveAndMatches(InputConstants.Key key) {
23-
if (isUnbound()) {
24-
return false;
25-
}
26-
if (!this.getMappedKey().equals(key)) {
27-
return false;
28-
}
29-
return context.isActive();
30-
}
31-
3219
@Override
3320
public boolean isUnbound() {
3421
return this.getMapping().isUnbound();
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package mezz.jei.fabric.input;
2+
3+
import de.siphalor.amecs.api.KeyModifier;
4+
import de.siphalor.amecs.api.KeyModifiers;
5+
import mezz.jei.common.input.keys.JeiKeyModifier;
6+
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
public class AmecsHelper {
11+
private AmecsHelper() {}
12+
13+
public static KeyModifier getJeiModifier(JeiKeyModifier modifier) {
14+
return switch (modifier) {
15+
case CONTROL_OR_COMMAND -> KeyModifier.CONTROL;
16+
case SHIFT -> KeyModifier.SHIFT;
17+
case ALT -> KeyModifier.ALT;
18+
case NONE -> KeyModifier.NONE;
19+
};
20+
}
21+
22+
public static List<JeiKeyModifier> getJeiModifiers(KeyModifiers modifiers) {
23+
if (modifiers.isUnset()) {
24+
return List.of(JeiKeyModifier.NONE);
25+
}
26+
List<JeiKeyModifier> modifiersList = new ArrayList<>();
27+
if (modifiers.getAlt()) {
28+
modifiersList.add(JeiKeyModifier.ALT);
29+
}
30+
if (modifiers.getControl()) {
31+
modifiersList.add(JeiKeyModifier.CONTROL_OR_COMMAND);
32+
}
33+
if (modifiers.getShift()) {
34+
modifiersList.add(JeiKeyModifier.SHIFT);
35+
}
36+
return modifiersList;
37+
}
38+
}

Fabric/src/main/java/mezz/jei/fabric/input/AmecsJeiKeyMapping.java

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,46 @@
11
package mezz.jei.fabric.input;
22

3-
import de.siphalor.amecs.api.AmecsKeyBinding;
3+
import com.mojang.blaze3d.platform.InputConstants;
44
import de.siphalor.amecs.api.KeyBindingUtils;
55
import de.siphalor.amecs.api.KeyModifiers;
6-
import com.mojang.blaze3d.platform.InputConstants;
76
import mezz.jei.common.input.keys.JeiKeyConflictContext;
87
import mezz.jei.common.input.keys.JeiKeyModifier;
98
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
9+
import net.minecraft.client.KeyMapping;
10+
11+
import java.util.List;
1012

1113
public class AmecsJeiKeyMapping extends AbstractJeiKeyMapping {
12-
protected final AmecsKeyBinding amecsMapping;
14+
protected final KeyMapping amecsMapping;
1315

14-
public AmecsJeiKeyMapping(AmecsKeyBinding amecsMapping, JeiKeyConflictContext context) {
16+
public AmecsJeiKeyMapping(AmecsKeyBindingWithContext amecsMapping, JeiKeyConflictContext context) {
1517
super(context);
1618
this.amecsMapping = amecsMapping;
1719
}
1820

19-
protected AmecsKeyBinding getMapping() {
21+
@Override
22+
protected KeyMapping getMapping() {
2023
return this.amecsMapping;
2124
}
2225

23-
protected InputConstants.Key getMappedKey() {
24-
return KeyBindingHelper.getBoundKeyOf(this.amecsMapping);
25-
}
26-
2726
@Override
2827
public boolean isActiveAndMatches(InputConstants.Key key) {
2928
if (isUnbound()) {
3029
return false;
3130
}
32-
if (!this.getMappedKey().equals(key)) {
31+
if (!KeyBindingHelper.getBoundKeyOf(this.amecsMapping).equals(key)) {
3332
return false;
3433
}
3534
if (!context.isActive()) {
3635
return false;
3736
}
3837

39-
KeyModifiers modifier = KeyBindingUtils.getBoundModifiers(this.amecsMapping);
40-
if (modifier.getControl() && !JeiKeyModifier.CONTROL_OR_COMMAND.isActive(context)) {
41-
return false;
42-
}
43-
if (modifier.getShift() && !JeiKeyModifier.SHIFT.isActive(context)) {
44-
return false;
45-
}
46-
if (modifier.getAlt() && !JeiKeyModifier.ALT.isActive(context)) {
47-
return false;
48-
}
49-
if (modifier.isUnset() && !JeiKeyModifier.NONE.isActive(context)) {
50-
return false;
38+
KeyModifiers modifiers = KeyBindingUtils.getBoundModifiers(this.amecsMapping);
39+
List<JeiKeyModifier> jeiKeyModifiers = AmecsHelper.getJeiModifiers(modifiers);
40+
for (JeiKeyModifier jeiKeyModifier : jeiKeyModifiers) {
41+
if (!jeiKeyModifier.isActive(context)) {
42+
return false;
43+
}
5144
}
5245
return true;
5346
}
Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,34 @@
11
package mezz.jei.fabric.input;
22

3-
import de.siphalor.amecs.api.AmecsKeyBinding;
4-
import de.siphalor.amecs.api.KeyModifiers;
53
import com.mojang.blaze3d.platform.InputConstants;
6-
import mezz.jei.common.input.keys.IJeiKeyMappingInternal;
4+
import de.siphalor.amecs.api.KeyModifiers;
75
import mezz.jei.common.input.keys.IJeiKeyMappingBuilder;
6+
import mezz.jei.common.input.keys.IJeiKeyMappingInternal;
87
import mezz.jei.common.input.keys.JeiKeyModifier;
98

109
public class AmecsJeiKeyMappingBuilder extends FabricJeiKeyMappingBuilder {
11-
protected KeyModifiers modifier = new KeyModifiers();
10+
private final KeyModifiers modifier = new KeyModifiers();
1211

1312
public AmecsJeiKeyMappingBuilder(String category, String description) {
1413
super(category, description);
15-
this.modifier = new KeyModifiers();
1614
}
1715

1816
@Override
1917
public IJeiKeyMappingBuilder setModifier(JeiKeyModifier modifier) {
20-
this.modifier.unset();
21-
switch (modifier) {
22-
case CONTROL_OR_COMMAND:
23-
this.modifier.setControl(true);
24-
break;
25-
case SHIFT:
26-
this.modifier.setShift(true);
27-
break;
28-
case ALT:
29-
this.modifier.setAlt(true);
30-
break;
31-
}
18+
var amecsModifier = AmecsHelper.getJeiModifier(modifier);
19+
this.modifier.set(amecsModifier, true);
3220
return this;
3321
}
3422

3523
@Override
3624
protected IJeiKeyMappingInternal buildMouse(int mouseButton) {
37-
AmecsKeyBinding keyMapping = new AmecsKeyBinding(description, InputConstants.Type.MOUSE, mouseButton, category, modifier);
25+
var keyMapping = new AmecsKeyBindingWithContext(description, InputConstants.Type.MOUSE, mouseButton, category, modifier, context);
3826
return new AmecsJeiKeyMapping(keyMapping, context);
3927
}
4028

4129
@Override
4230
public IJeiKeyMappingInternal buildKeyboardKey(int key) {
43-
AmecsKeyBinding keyMapping = new AmecsKeyBinding(description, InputConstants.Type.KEYSYM, key, category, modifier);
31+
var keyMapping = new AmecsKeyBindingWithContext(description, InputConstants.Type.KEYSYM, key, category, modifier, context);
4432
return new AmecsJeiKeyMapping(keyMapping, context);
4533
}
4634
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package mezz.jei.fabric.input;
2+
3+
import com.mojang.blaze3d.platform.InputConstants;
4+
import de.siphalor.amecs.api.AmecsKeyBinding;
5+
import de.siphalor.amecs.api.KeyModifiers;
6+
import mezz.jei.common.input.keys.JeiKeyConflictContext;
7+
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
8+
import net.minecraft.client.KeyMapping;
9+
10+
public class AmecsKeyBindingWithContext extends AmecsKeyBinding {
11+
private final JeiKeyConflictContext context;
12+
13+
public AmecsKeyBindingWithContext(String id, InputConstants.Type type, int code, String category, KeyModifiers defaultModifiers, JeiKeyConflictContext context) {
14+
super(id, type, code, category, defaultModifiers);
15+
this.context = context;
16+
}
17+
18+
@Override
19+
public boolean same(KeyMapping binding) {
20+
// Special implementation which is aware of the key conflict context.
21+
if (binding instanceof AmecsKeyBindingWithContext other) {
22+
return KeyBindingHelper.getBoundKeyOf(this).equals(KeyBindingHelper.getBoundKeyOf(other)) &&
23+
(context.conflicts(other.context) || other.context.conflicts(context));
24+
} else {
25+
// This ensures symmetry between conflicts, as regular keybinds see this one as
26+
// being unbound and not conflicting.
27+
return false;
28+
}
29+
}
30+
}

Fabric/src/main/java/mezz/jei/fabric/input/FabricJeiKeyMapping.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,19 @@ public FabricJeiKeyMapping(FabricKeyMapping fabricMapping, JeiKeyConflictContext
1111
this.fabricMapping = fabricMapping;
1212
}
1313

14+
@Override
1415
protected FabricKeyMapping getMapping() {
1516
return this.fabricMapping;
1617
}
1718

18-
protected InputConstants.Key getMappedKey() {
19-
return this.fabricMapping.realKey;
19+
@Override
20+
public boolean isActiveAndMatches(InputConstants.Key key) {
21+
if (isUnbound()) {
22+
return false;
23+
}
24+
if (!this.fabricMapping.realKey.equals(key)) {
25+
return false;
26+
}
27+
return context.isActive();
2028
}
2129
}

0 commit comments

Comments
 (0)