Skip to content

Commit 9440eb0

Browse files
committed
stuff to make splitscreen work with 3.0.0
1 parent 7d1137c commit 9440eb0

13 files changed

Lines changed: 53 additions & 17 deletions

File tree

splitscreen/src/main/java/dev/isxander/splitscreen/client/integrations/ControlifyExtension.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import dev.isxander.controlify.api.bind.InputBinding;
88
import dev.isxander.controlify.api.bind.InputBindingSupplier;
99
import dev.isxander.controlify.api.entrypoint.ControlifyEntrypoint;
10+
import dev.isxander.controlify.api.entrypoint.InitContext;
11+
import dev.isxander.controlify.api.entrypoint.PreInitContext;
1012
import dev.isxander.controlify.api.event.ControlifyEvents;
1113
import dev.isxander.controlify.controller.ControllerEntity;
1214
import dev.isxander.controlify.controller.ControllerUID;
@@ -44,8 +46,8 @@ public void onControllersDiscovered(ControlifyApi controlify) {
4446
}
4547

4648
@Override
47-
public void onControlifyInit(ControlifyApi controlifyApi) {
48-
ADD_PLAYER_BIND = ControlifyBindApi.get().registerBinding(builder -> builder
49+
public void onControlifyPreInit(PreInitContext ctx) {
50+
ADD_PLAYER_BIND = ctx.bindings().registerBinding(builder -> builder
4951
.id(CSUtil.rl("add_player"))
5052
.category(BINDING_CATEGORY));
5153

@@ -56,6 +58,11 @@ public void onControlifyInit(ControlifyApi controlifyApi) {
5658
ClientTickEvents.START_CLIENT_TICK.register(this::onClientTick);
5759
}
5860

61+
@Override
62+
public void onControlifyInit(InitContext ctx) {
63+
64+
}
65+
5966
private void onControllerStateUpdate(ControlifyEvents.ControllerStateUpdate event) {
6067
ControllerEntity controller = event.controller();
6168
Controlify controlify = Controlify.instance();
@@ -69,7 +76,7 @@ private void onControllerStateUpdate(ControlifyEvents.ControllerStateUpdate even
6976

7077
ControllerEntity currentController = controlify.getCurrentController().orElse(null);
7178

72-
if (ADD_PLAYER_BIND.on(controller).longPressed(true)) {
79+
if (ADD_PLAYER_BIND.on(controller).justPressed()) {
7380
if (controllersConnected == 1) {
7481
// in the case where there is only one controller connected, we initialise
7582
// splitscreen as Player 1: KB&M, Player 2: Controller 1

splitscreen/src/main/java/dev/isxander/splitscreen/client/mixins/controlify/ControlifyConfigMixin.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@
22

33
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
44
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
5-
import dev.isxander.controlify.config.ControlifyConfig;
6-
import dev.isxander.splitscreen.client.SplitscreenBootstrapper;
5+
import dev.isxander.controlify.config.ConfigManager;import dev.isxander.splitscreen.client.SplitscreenBootstrapper;
76
import org.spongepowered.asm.mixin.Mixin;
87

9-
@Mixin(ControlifyConfig.class)
8+
@Mixin(ConfigManager.class)
109
public class ControlifyConfigMixin {
1110
/**
1211
* Don't allow saving the config is we're a pawn client,
1312
* only the controller should modify controller config.
13+
*
1414
* @param original the original method call
1515
*/
1616
@WrapMethod(method = "save")
17-
private void preventSaveIfPawn(Operation<Void> original) {
17+
private boolean preventSaveIfPawn(Operation<Boolean> original) {
1818
if (SplitscreenBootstrapper.getPawn().isEmpty()) {
19-
original.call();
19+
return original.call();
2020
}
21+
return true;
2122
}
2223
}

splitscreen/src/main/java/dev/isxander/splitscreen/client/mixins/controlify/ControlifyMixin.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import com.llamalad7.mixinextras.expression.Definition;
44
import com.llamalad7.mixinextras.expression.Expression;
55
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
6+
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
67
import com.llamalad7.mixinextras.sugar.Local;
78
import dev.isxander.controlify.Controlify;
89
import dev.isxander.controlify.api.bind.InputBinding;
910
import dev.isxander.controlify.controller.ControllerEntity;
11+
import dev.isxander.splitscreen.client.SplitscreenBootstrapper;
1012
import dev.isxander.splitscreen.client.integrations.ControlifyExtension;
1113
import net.minecraft.network.chat.Component;
1214
import net.minecraft.network.chat.MutableComponent;
@@ -36,4 +38,15 @@ private MutableComponent modifyHotplugControllerDescription(MutableComponent com
3638
}
3739
return component;
3840
}
41+
42+
@WrapWithCondition(
43+
method = "tickInactiveController",
44+
at = @At(
45+
value = "INVOKE",
46+
target = "Ldev/isxander/controlify/Controlify;setCurrentController(Ldev/isxander/controlify/controller/ControllerEntity;Z)V"
47+
)
48+
)
49+
private boolean preventAutoSwitchIfSplitscreen(Controlify instance, ControllerEntity controller, boolean notify) {
50+
return !SplitscreenBootstrapper.isSplitscreen();
51+
}
3952
}

splitscreen/src/main/resources/assets/controlify_splitscreen/lang/en_us.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@
3434
"controlify.splitscreen.config.basic.music_method.priority": "Priority",
3535
"controlify.splitscreen.open_button": "Splitscreen...",
3636
"controlify.splitscreen.toast.long_press_to_join.title": "Splitscreen",
37-
"controlify.splitscreen.toast.long_press_to_join": "Long-press %s to start splitscreen"
37+
"controlify.splitscreen.toast.long_press_to_join": "Press %s to start splitscreen"
3838
}

splitscreen/versions/1.21.5-fabric/gradle.properties

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
modstitch.platform=loom
1+
modstitch.platform=fabric-loom-remap

src/main/java/dev/isxander/controlify/Controlify.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,10 @@ private void tickInactiveController(ControllerEntity controller) {
547547
if (thisControllerGivingInput && !activeControllerGivingInput) {
548548
this.setCurrentController(controller, true);
549549
}
550+
551+
if (this.currentInputMode().isController()) {
552+
ControlifyEvents.INACTIVE_CONTROLLER_TICKED.invoke(new ControlifyEvents.ControllerStateUpdate(controller));
553+
}
550554
}
551555

552556
public ConfigManager config() {

src/main/java/dev/isxander/controlify/api/event/ControlifyEvents.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public final class ControlifyEvents {
2323
*/
2424
public static final EventHandler<ControllerStateUpdate> ACTIVE_CONTROLLER_TICKED = EventHandler.createPlatformBackedEvent();
2525

26+
/**
27+
* Triggers every tick when a non-active connected controller's state has been updated.
28+
*/
29+
public static final EventHandler<ControllerStateUpdate> INACTIVE_CONTROLLER_TICKED = EventHandler.createPlatformBackedEvent();
30+
2631
/**
2732
* @deprecated Use {@link #ACTIVE_CONTROLLER_TICKED} instead.
2833
*/

src/main/java/dev/isxander/controlify/config/dto/ControlifyConfig.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
55
import dev.isxander.controlify.config.dto.device.DeviceConfig;
66
import dev.isxander.controlify.config.dto.profile.ProfileConfig;
7+
import dev.isxander.controlify.controller.ControllerUID;
78

89
import java.util.List;
910
import java.util.Map;
1011

1112
public record ControlifyConfig(
1213
List<ProfileConfig> profileConfig,
1314
GlobalConfig globalConfig,
14-
Map<String, DeviceConfig> deviceConfig
15+
Map<ControllerUID, DeviceConfig> deviceConfig
1516
) {
1617
public static final Codec<ControlifyConfig> CODEC = RecordCodecBuilder.create(instance -> instance.group(
1718
ProfileConfig.CODEC.listOf().fieldOf("profiles").forGetter(ControlifyConfig::profileConfig),
1819
GlobalConfig.CODEC.fieldOf("global").forGetter(ControlifyConfig::globalConfig),
19-
Codec.unboundedMap(Codec.STRING, DeviceConfig.CODEC).fieldOf("devices").forGetter(ControlifyConfig::deviceConfig)
20+
Codec.unboundedMap(ControllerUID.CODEC, DeviceConfig.CODEC).fieldOf("devices").forGetter(ControlifyConfig::deviceConfig)
2021
).apply(instance, ControlifyConfig::new));
2122
}

src/main/java/dev/isxander/controlify/config/settings/ControlifySettings.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.isxander.controlify.config.dto.ControlifyConfig;
44
import dev.isxander.controlify.config.settings.device.DeviceSettings;
55
import dev.isxander.controlify.config.settings.profile.ProfileSettings;
6+
import dev.isxander.controlify.controller.ControllerUID;
67
import net.minecraft.resources.Identifier;
78

89
import java.util.ArrayList;
@@ -13,7 +14,7 @@
1314
public class ControlifySettings {
1415
private final List<ProfileSettings> profileSettings;
1516
private final GlobalSettings globalSettings;
16-
private final Map<String, DeviceSettings> deviceSettings;
17+
private final Map<ControllerUID, DeviceSettings> deviceSettings;
1718

1819
private ControlifySettings() {
1920
this.profileSettings = new ArrayList<>();
@@ -24,7 +25,7 @@ private ControlifySettings() {
2425
public ControlifySettings(
2526
List<ProfileSettings> controllerSettings,
2627
GlobalSettings globalSettings,
27-
Map<String, DeviceSettings> deviceSettings
28+
Map<ControllerUID, DeviceSettings> deviceSettings
2829
) {
2930
this.profileSettings = new ArrayList<>(controllerSettings);
3031
this.globalSettings = globalSettings;
@@ -59,7 +60,7 @@ public ProfileSettings getOrCreateProfileSettings(Identifier controllerType) {
5960
return settings;
6061
}
6162

62-
public DeviceSettings getOrCreateDeviceSettings(String uid) {
63+
public DeviceSettings getOrCreateDeviceSettings(ControllerUID uid) {
6364
return deviceSettings.computeIfAbsent(uid, id -> DeviceSettings.defaults());
6465
}
6566

0 commit comments

Comments
 (0)