From da467619cb217d5f7b265d7307e870d2790b0977 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Thu, 18 Jul 2024 14:28:30 +0200 Subject: [PATCH] Working Neoforge support Yay! --- .../client/MidnightControlsClient.java | 16 +++ .../client/MidnightInput.java | 8 +- .../client/util/platform/ItemGroupUtil.java | 20 +++- .../platform/fabric/ItemGroupUtilImpl.java | 19 ---- .../fabric/MidnightControlsClientFabric.java | 10 +- .../platform/neoforge/ItemGroupUtilImpl.java | 16 +++ .../platform/neoforge/NetworkUtilImpl.java | 25 +++++ .../MidnightControlsClientNeoforge.java | 99 +++++++++++++++++++ .../neoforge/MidnightControlsNeoForge.java | 22 ----- .../neoforge/MidnightControlsNeoforge.java | 42 ++++++++ .../event/PlayerChangeControlsModeEvent.java | 12 +++ 11 files changed, 233 insertions(+), 56 deletions(-) create mode 100644 neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/ItemGroupUtilImpl.java create mode 100644 neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/NetworkUtilImpl.java create mode 100644 neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsClientNeoforge.java delete mode 100644 neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoForge.java create mode 100644 neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoforge.java create mode 100644 neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/event/PlayerChangeControlsModeEvent.java diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index 39af99b..36f5805 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -21,10 +21,12 @@ import eu.midnightdust.midnightcontrols.client.controller.Controller; import eu.midnightdust.midnightcontrols.client.controller.InputManager; import eu.midnightdust.midnightcontrols.client.gui.MidnightControlsHud; import eu.midnightdust.midnightcontrols.client.gui.RingScreen; +import eu.midnightdust.midnightcontrols.client.gui.TouchscreenOverlay; import eu.midnightdust.midnightcontrols.client.mixin.KeyBindingIDAccessor; import eu.midnightdust.midnightcontrols.client.ring.ButtonBindingRingAction; import eu.midnightdust.midnightcontrols.client.ring.MidnightRing; import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil; +import net.minecraft.client.gui.screen.Screen; import org.thinkingstudio.obsidianui.hud.HudManager; import eu.midnightdust.midnightcontrols.client.touch.TouchInput; import eu.midnightdust.midnightcontrols.client.util.RainbowColor; @@ -166,6 +168,7 @@ public class MidnightControlsClient extends MidnightControls { public static void onTick(@NotNull MinecraftClient client) { initKeybindings(); input.tick(client); + reacharound.tick(client); if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) input.tickController(client); @@ -183,6 +186,19 @@ public class MidnightControlsClient extends MidnightControls { RainbowColor.tick(); TouchInput.tick(); } + /** + * Called when opening a screen. + */ + public static void onScreenOpen(Screen screen) { + if (screen == null && MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN) { + screen = new TouchscreenOverlay(); + screen.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); + client.skipGameRender = false; + client.currentScreen = screen; + } else if (screen != null) { + MidnightControlsClient.input.onScreenOpen(client, client.getWindow().getWidth(), client.getWindow().getHeight()); + } + } /** * Called when leaving a server. diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java index 877020e..d138520 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightInput.java @@ -10,6 +10,7 @@ package eu.midnightdust.midnightcontrols.client; import com.google.common.collect.ImmutableSet; +import eu.midnightdust.lib.util.PlatformFunctions; import eu.midnightdust.midnightcontrols.client.util.storage.AxisStorage; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.util.Pair; @@ -35,7 +36,6 @@ import org.thinkingstudio.obsidianui.widget.SpruceElement; import org.thinkingstudio.obsidianui.widget.SpruceLabelWidget; import org.thinkingstudio.obsidianui.widget.container.SpruceParentWidget; import eu.midnightdust.midnightcontrols.client.enums.ButtonState; -import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.ParentElement; @@ -376,7 +376,7 @@ public class MidnightInput { return; } } - else if (FabricLoader.getInstance().isModLoaded("libgui")) LibGuiCompat.handlePress(client.currentScreen); + else if (PlatformFunctions.isModLoaded("libgui")) LibGuiCompat.handlePress(client.currentScreen); } } } @@ -697,7 +697,7 @@ public class MidnightInput { var childFocused = widget.getFocused(); if (childFocused != null) return this.handleAButton(screen, childFocused); - } else if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib") && YACLCompat.handleAButton(screen, focused)) { + } else if (PlatformFunctions.isModLoaded("yet-another-config-lib") && YACLCompat.handleAButton(screen, focused)) { return true; } else pressKeyboardKey(screen, GLFW_KEY_ENTER); @@ -716,7 +716,7 @@ public class MidnightInput { this.actionGuiCooldown = 5; return false; } - if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib") && YACLCompat.handleLeftRight(screen, right)) { + if (PlatformFunctions.isModLoaded("yet-another-config-lib") && YACLCompat.handleLeftRight(screen, right)) { this.actionGuiCooldown = 5; return false; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java index 64b1890..ca48f1c 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/ItemGroupUtil.java @@ -4,6 +4,7 @@ import dev.architectury.injectables.annotations.ExpectPlatform; import eu.midnightdust.midnightcontrols.client.mixin.CreativeInventoryScreenAccessor; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +import net.minecraft.client.gui.widget.PressableWidget; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroups; import org.jetbrains.annotations.NotNull; @@ -15,9 +16,24 @@ public class ItemGroupUtil { public static List getVisibleGroups(CreativeInventoryScreen screen) { throw new AssertionError(); } - @ExpectPlatform + public static boolean cyclePage(boolean next, CreativeInventoryScreen screen) { - throw new AssertionError(); + try { + return screen.children().stream().filter(element -> element instanceof PressableWidget) + .map(element -> (PressableWidget) element) + .filter(element -> element.getMessage() != null && element.getMessage().getContent() != null) + .anyMatch(element -> { + if (next && element.getMessage().getString().equals(">")) { + element.onPress(); + return true; + } else if (element.getMessage().getString().equals("<")) { + element.onPress(); + return true; + } + return false; + }); + } catch (Exception ignored) {} + return false; } public static @NotNull ItemGroup cycleTab(boolean next, MinecraftClient client) { diff --git a/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/ItemGroupUtilImpl.java b/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/ItemGroupUtilImpl.java index d607187..043a9c0 100644 --- a/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/ItemGroupUtilImpl.java +++ b/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/ItemGroupUtilImpl.java @@ -1,7 +1,6 @@ package eu.midnightdust.midnightcontrols.client.util.platform.fabric; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; -import net.minecraft.client.gui.widget.PressableWidget; import net.minecraft.item.ItemGroup; import java.util.List; @@ -14,22 +13,4 @@ public class ItemGroupUtilImpl { public static List getVisibleGroups(CreativeInventoryScreen screen) { return (screen.getItemGroupsOnPage(screen.getCurrentPage())); } - public static boolean cyclePage(boolean next, CreativeInventoryScreen screen) { - try { - return screen.children().stream().filter(element -> element instanceof PressableWidget) - .map(element -> (PressableWidget) element) - .filter(element -> element.getMessage() != null && element.getMessage().getContent() != null) - .anyMatch(element -> { - if (next && element.getMessage().getString().equals(">")) { - element.onPress(); - return true; - } else if (element.getMessage().getString().equals("<")) { - element.onPress(); - return true; - } - return false; - }); - } catch (Exception ignored) {} - return false; - } } \ No newline at end of file diff --git a/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsClientFabric.java b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsClientFabric.java index e5e10de..257d030 100644 --- a/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsClientFabric.java +++ b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsClientFabric.java @@ -52,18 +52,10 @@ public class MidnightControlsClientFabric implements ClientModInitializer { }); ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> MidnightControlsClient.onLeave()); - ClientTickEvents.START_CLIENT_TICK.register(MidnightControlsClient.reacharound::tick); ClientTickEvents.START_CLIENT_TICK.register(MidnightControlsClient::onTick); OpenScreenCallback.POST.register((client, screen) -> { - if (screen == null && MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN) { - screen = new TouchscreenOverlay(); - screen.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); - client.skipGameRender = false; - client.currentScreen = screen; - } else if (screen != null) { - MidnightControlsClient.input.onScreenOpen(client, client.getWindow().getWidth(), client.getWindow().getHeight()); - } + MidnightControlsClient.onScreenOpen(screen); }); FabricLoader.getInstance().getModContainer(MidnightControlsConstants.NAMESPACE).ifPresent(modContainer -> { ResourceManagerHelper.registerBuiltinResourcePack(id("bedrock"), modContainer, ResourcePackActivationType.NORMAL); diff --git a/neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/ItemGroupUtilImpl.java b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/ItemGroupUtilImpl.java new file mode 100644 index 0000000..55793f5 --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/ItemGroupUtilImpl.java @@ -0,0 +1,16 @@ +package eu.midnightdust.midnightcontrols.client.util.platform.neoforge; + +import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +import net.minecraft.item.ItemGroup; + +import java.util.List; + +/** + * Implementation of neoforge methods for + * @see eu.midnightdust.midnightcontrols.client.util.platform.ItemGroupUtil + */ +public class ItemGroupUtilImpl { + public static List getVisibleGroups(CreativeInventoryScreen screen) { + return (screen.getCurrentPage().getVisibleTabs()); + } +} \ No newline at end of file diff --git a/neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/NetworkUtilImpl.java b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/NetworkUtilImpl.java new file mode 100644 index 0000000..3a2ac95 --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/neoforge/NetworkUtilImpl.java @@ -0,0 +1,25 @@ +package eu.midnightdust.midnightcontrols.client.util.platform.neoforge; + +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket; + +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client; + +/** + * Implementation of neoforge methods for + * @see eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil + */ +public class NetworkUtilImpl { + private static final ClientPlayNetworkHandler handler = client.getNetworkHandler(); + + public static void sendPacketC2S(Packet packet) { + if (handler != null) + handler.send(packet); + } + public static void sendPayloadC2S(CustomPayload payload) { + if (handler != null && client.world != null) + handler.send(new CustomPayloadC2SPacket(payload)); + } +} \ No newline at end of file diff --git a/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsClientNeoforge.java b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsClientNeoforge.java new file mode 100644 index 0000000..a0004fc --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsClientNeoforge.java @@ -0,0 +1,99 @@ +package eu.midnightdust.midnightcontrols.neoforge; + +import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; +import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; +import eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil; +import eu.midnightdust.midnightcontrols.packet.ControlsModePayload; +import eu.midnightdust.midnightcontrols.packet.HelloPayload; +import net.minecraft.resource.DirectoryResourcePack; +import net.minecraft.resource.ResourcePackInfo; +import net.minecraft.resource.ResourcePackPosition; +import net.minecraft.resource.ResourcePackProfile; +import net.minecraft.resource.ResourcePackSource; +import net.minecraft.resource.ResourceType; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModList; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.event.ScreenEvent; +import net.neoforged.neoforge.event.AddPackFindersEvent; +import net.neoforged.neoforgespi.locating.IModFile; + +import java.util.Optional; + +import static eu.midnightdust.midnightcontrols.MidnightControls.id; +import static eu.midnightdust.midnightcontrols.MidnightControlsConstants.NAMESPACE; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_DOWN; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_LEFT; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_RIGHT; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_LOOK_UP; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.BINDING_RING; +import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client; + +@Mod(value = NAMESPACE, dist = Dist.CLIENT) +public class MidnightControlsClientNeoforge { + public MidnightControlsClientNeoforge() { + MidnightControlsClient.initClient(); + } + + @EventBusSubscriber(modid = NAMESPACE, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) + public class ClientEvents { + @SubscribeEvent + public static void registerKeybinding(RegisterKeyMappingsEvent event) { + event.register(BINDING_RING); + event.register(BINDING_LOOK_UP); + event.register(BINDING_LOOK_DOWN); + event.register(BINDING_LOOK_LEFT); + event.register(BINDING_LOOK_RIGHT); + } + @SubscribeEvent + public static void addPackFinders(AddPackFindersEvent event) { + if (event.getPackType() == ResourceType.CLIENT_RESOURCES) { + registerResourcePack(event, id("bedrock"), false); + registerResourcePack(event, id("legacy"), false); + } + } + private static void registerResourcePack(AddPackFindersEvent event, Identifier id, boolean alwaysEnabled) { + event.addRepositorySource(((profileAdder) -> { + IModFile file = ModList.get().getModFileById(id.getNamespace()).getFile(); + try { + ResourcePackProfile.PackFactory pack = new DirectoryResourcePack.DirectoryBackedFactory(file.findResource("resourcepacks/" + id.getPath())); + ResourcePackInfo info = new ResourcePackInfo(id.toString(), Text.of(id.getNamespace()+"/"+id.getPath()), ResourcePackSource.BUILTIN, Optional.empty()); + ResourcePackProfile packProfile = ResourcePackProfile.create(info, pack, ResourceType.CLIENT_RESOURCES, new ResourcePackPosition(alwaysEnabled, ResourcePackProfile.InsertionPosition.TOP, false)); + if (packProfile != null) { + profileAdder.accept(packProfile); + } + } catch (NullPointerException e) {e.fillInStackTrace();} + })); + } + } + + @EventBusSubscriber(modid = NAMESPACE, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) + public class ClientGameEvents { + @SubscribeEvent + public static void sendPacketOnLogin(ClientPlayerNetworkEvent.LoggingIn event) { + var version = ModList.get().getModFileById(NAMESPACE).versionString(); + var controlsMode = MidnightControlsConfig.controlsMode.getName(); + NetworkUtil.sendPayloadC2S(new HelloPayload(version, controlsMode)); + NetworkUtil.sendPayloadC2S(new ControlsModePayload(controlsMode)); + } + @SubscribeEvent + public static void onDisconnect(ClientPlayerNetworkEvent.LoggingOut event) { + MidnightControlsClient.onLeave(); + } + @SubscribeEvent + public static void startClientTick(ClientTickEvent.Pre event) { + MidnightControlsClient.onTick(client); + } + @SubscribeEvent + public static void onScreenOpen(ScreenEvent.Opening event) { + MidnightControlsClient.onScreenOpen(event.getNewScreen()); + } + } +} diff --git a/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoForge.java b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoForge.java deleted file mode 100644 index 51fa1f3..0000000 --- a/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoForge.java +++ /dev/null @@ -1,22 +0,0 @@ -package eu.midnightdust.midnightcontrols.neoforge; - -import eu.midnightdust.midnightcontrols.MidnightControls; -import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.fml.common.Mod; - -import static eu.midnightdust.midnightcontrols.MidnightControlsConstants.NAMESPACE; - -@Mod(value = NAMESPACE) -public class MidnightControlsNeoForge { - public MidnightControlsNeoForge() { - MidnightControls.init(); - } - - @Mod(value = NAMESPACE, dist = Dist.CLIENT) - public static class YourModClientNeoforge { - public YourModClientNeoforge() { - MidnightControlsClient.initClient(); - } - } -} \ No newline at end of file diff --git a/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoforge.java b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoforge.java new file mode 100644 index 0000000..6e748a8 --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/MidnightControlsNeoforge.java @@ -0,0 +1,42 @@ +package eu.midnightdust.midnightcontrols.neoforge; + +import eu.midnightdust.midnightcontrols.ControlsMode; +import eu.midnightdust.midnightcontrols.MidnightControls; +import eu.midnightdust.midnightcontrols.MidnightControlsFeature; +import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; +import eu.midnightdust.midnightcontrols.neoforge.event.PlayerChangeControlsModeEvent; +import eu.midnightdust.midnightcontrols.packet.ControlsModePayload; +import eu.midnightdust.midnightcontrols.packet.FeaturePayload; +import eu.midnightdust.midnightcontrols.packet.HelloPayload; +import net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket; +import net.minecraft.network.packet.s2c.common.CustomPayloadS2CPacket; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; + +import static eu.midnightdust.midnightcontrols.MidnightControlsConstants.NAMESPACE; + +@Mod(value = NAMESPACE) +public class MidnightControlsNeoforge { + public MidnightControlsNeoforge() { + MidnightControls.init(); + } + @EventBusSubscriber(modid = NAMESPACE, bus = EventBusSubscriber.Bus.MOD) + public class CommonEvents { + @SubscribeEvent + public static void registerPayloads(RegisterPayloadHandlersEvent event) { + PayloadRegistrar registrar = event.registrar("1"); + registrar.playToServer(HelloPayload.PACKET_ID, HelloPayload.codec, (payload, context) -> { + ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> new PlayerChangeControlsModeEvent(context.player(), controlsMode)); + context.connection().send(new CustomPayloadS2CPacket(new FeaturePayload(MidnightControlsFeature.HORIZONTAL_REACHAROUND))); + }); + registrar.playBidirectional(ControlsModePayload.PACKET_ID, ControlsModePayload.codec, (payload, context) -> { + if (context.flow().isServerbound()) ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> new PlayerChangeControlsModeEvent(context.player(), controlsMode)); + else context.connection().send(new CustomPayloadC2SPacket(new ControlsModePayload(MidnightControlsConfig.controlsMode.getName()))); + }); + registrar.playToClient(FeaturePayload.PACKET_ID, FeaturePayload.codec, (payload, context) -> {}); + } + } +} \ No newline at end of file diff --git a/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/event/PlayerChangeControlsModeEvent.java b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/event/PlayerChangeControlsModeEvent.java new file mode 100644 index 0000000..e2bf7fd --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/midnightcontrols/neoforge/event/PlayerChangeControlsModeEvent.java @@ -0,0 +1,12 @@ +package eu.midnightdust.midnightcontrols.neoforge.event; + +import eu.midnightdust.midnightcontrols.ControlsMode; +import net.minecraft.entity.player.PlayerEntity; +import net.neoforged.bus.api.Event; +import net.neoforged.fml.event.IModBusEvent; + +public class PlayerChangeControlsModeEvent extends Event implements IModBusEvent { + public PlayerChangeControlsModeEvent(PlayerEntity player, ControlsMode controlsMode) { + + } +}