From f82ee2e24a9a87aa0a1943c1b362d657fd4a83e5 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Wed, 17 Jul 2024 17:05:13 +0200 Subject: [PATCH] Get Fabric working again, various improvements --- common/build.gradle | 35 ++++++++++ .../client/compat/BedrockifyCompat.java | 1 - .../client/compat/EmotecraftCompat.java | 17 ++--- ...Mixin.java => GameOptionsScreenMixin.java} | 31 +++++---- .../architectury.midnightcontrols.json | 3 + common/src/main/resources/fabric.mod.json | 67 ------------------- .../resources/midnightcontrols.accesswidener | 3 +- .../resources/midnightcontrols.mixins.json | 2 +- .../platform/fabric/ItemGroupUtilImpl.java | 9 ++- .../util/platform/fabric/NetworkUtilImpl.java | 6 +- .../fabric/MidnightControlsFabric.java | 11 ++- .../PlayerChangeControlsModeCallback.java | 4 +- fabric/src/main/resources/fabric.mod.json | 1 - gradle.properties | 2 +- 14 files changed, 87 insertions(+), 105 deletions(-) rename common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/{ControlsOptionsScreenMixin.java => GameOptionsScreenMixin.java} (64%) create mode 100644 common/src/main/resources/architectury.midnightcontrols.json delete mode 100644 common/src/main/resources/fabric.mod.json rename fabric/src/main/java/eu/midnightdust/midnightcontrols/{ => client}/util/platform/fabric/ItemGroupUtilImpl.java (81%) rename fabric/src/main/java/eu/midnightdust/midnightcontrols/{ => client}/util/platform/fabric/NetworkUtilImpl.java (79%) rename {common/src/main/java/eu/midnightdust/midnightcontrols => fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric}/event/PlayerChangeControlsModeCallback.java (93%) diff --git a/common/build.gradle b/common/build.gradle index b1a7899..ed8171e 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -4,6 +4,23 @@ architectury { loom { accessWidenerPath = file("src/main/resources/midnightcontrols.accesswidener") } +repositories { + maven { + name 'Gegy' + url 'https://maven.gegy.dev' + } + maven { + name = "CottonMC" + url = "https://server.bbkr.space/artifactory/libs-release" + } + maven { url "https://maven.terraformersmc.com/releases/" } + maven { url 'https://maven.kosmx.dev' } + maven { url 'https://maven.isxander.dev/releases' } + maven { url 'https://maven.shedaniel.me/' } + maven { url 'https://jitpack.io' } + maven { url "https://api.modrinth.com/maven" } + maven { url 'https://maven.quiltmc.org/repository/release'} +} dependencies { // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies @@ -14,6 +31,24 @@ dependencies { modCompileOnlyApi "maven.modrinth:midnightlib:${rootProject.midnightlib_version}-fabric" modCompileOnlyApi "maven.modrinth:obsidianui:${project.obsidianui_version}-fabric" include 'org.aperlambda:lambdajcommon:1.8.1' + modCompileOnlyApi ("com.terraformersmc:modmenu:${project.modmenu_version}") { + exclude(group: "net.fabricmc.fabric-api") + } + + // Compatibility mods + modCompileOnlyApi "io.github.cottonmc:LibGui:${project.libgui_version}" + modCompileOnlyApi "org.quiltmc:quilt-json5:1.0.0" + modCompileOnly "maven.modrinth:sodium:${project.sodium_version}" + modCompileOnlyApi "maven.modrinth:emi:${project.emi_version}" + modCompileOnlyApi "maven.modrinth:emotecraft:${project.emotecraft_version}" + modCompileOnlyApi "io.github.kosmx:bendy-lib:${project.bendylib_version}" + modCompileOnlyApi "dev.isxander:yet-another-config-lib:${project.yacl_version}" + modCompileOnlyApi "maven.modrinth:inventory-tabs-updated:${project.inventorytabs_version}" + modCompileOnlyApi "maven.modrinth:bedrockify:${project.bedrockify_version}" + // Required for Inventory Tabs + modCompileOnlyApi("me.shedaniel.cloth:cloth-config-fabric:${project.clothconfig_version}") { + exclude(group: "net.fabricmc.fabric-api") + } } publishing { diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/BedrockifyCompat.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/BedrockifyCompat.java index 0e5fc49..1e74185 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/BedrockifyCompat.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/BedrockifyCompat.java @@ -10,7 +10,6 @@ package eu.midnightdust.midnightcontrols.client.compat; import me.juancarloscp52.bedrockify.client.BedrockifyClient; -import me.juancarloscp52.bedrockify.client.BedrockifyClientSettings; /** * Represents HQM compatibility handler. diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java index 715cbb7..c434036 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/compat/EmotecraftCompat.java @@ -19,14 +19,15 @@ public class EmotecraftCompat { if (client.currentScreen instanceof FastChosseScreen) { int x = client.getWindow().getWidth() / 2; int y = client.getWindow().getHeight() / 2; - if (index == 0) InputManager.queueMousePosition(x-200, y-200); - if (index == 1) InputManager.queueMousePosition(x, y-200); - if (index == 2) InputManager.queueMousePosition(x+200, y-200); - if (index == 3) InputManager.queueMousePosition(x-200, y); - if (index == 4) InputManager.queueMousePosition(x+200, y); - if (index == 5) InputManager.queueMousePosition(x-200, y+200); - if (index == 6) InputManager.queueMousePosition(x, y+200); - if (index == 7) InputManager.queueMousePosition(x+200, y+200); + switch (index) { + case 0, 3, 5 -> x -= 200; + case 2, 4, 7 -> x += 200; + } + switch (index) { + case 0, 1, 2 -> y -= 200; + case 5, 6, 7 -> y += 200; + } + InputManager.queueMousePosition(x, y); InputManager.INPUT_MANAGER.updateMousePosition(client); } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ControlsOptionsScreenMixin.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameOptionsScreenMixin.java similarity index 64% rename from common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ControlsOptionsScreenMixin.java rename to common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameOptionsScreenMixin.java index e183467..cbb30f7 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/ControlsOptionsScreenMixin.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/mixin/GameOptionsScreenMixin.java @@ -14,30 +14,37 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.ControlsOptionsScreen; import net.minecraft.client.gui.screen.option.GameOptionsScreen; +import net.minecraft.client.gui.widget.OptionListWidget; import net.minecraft.client.gui.widget.TextIconButtonWidget; -import net.minecraft.client.option.GameOptions; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; /** * Injects the new controls settings button. */ -@Mixin(ControlsOptionsScreen.class) -public abstract class ControlsOptionsScreenMixin extends GameOptionsScreen { - - public ControlsOptionsScreenMixin(Screen parent, GameOptions gameOptions, Text title) { - super(parent, gameOptions, title); - } +@Mixin(GameOptionsScreen.class) +public abstract class GameOptionsScreenMixin extends Screen { + @Shadow @Nullable protected OptionListWidget body; @Unique TextIconButtonWidget midnightcontrols$button = TextIconButtonWidget.builder(Text.translatable("midnightcontrols.menu.title.controller"), (button -> this.client.setScreen(new MidnightControlsSettingsScreen(this, false))), true) .dimension(20,20).texture(Identifier.of("midnightcontrols", "icon/controller"), 20, 20).build(); - @Override - public void init() { - super.init(); - this.midnightcontrols$setupButton(); - this.addDrawableChild(midnightcontrols$button); + protected GameOptionsScreenMixin(Text title) { + super(title); + } + + @Inject(method = "initTabNavigation", at = @At("HEAD")) + public void addMidnightButton(CallbackInfo ci) { + if (this.getClass().toString().equals(ControlsOptionsScreen.class.toString())) { + this.midnightcontrols$setupButton(); + this.addDrawableChild(midnightcontrols$button); + } } @Override diff --git a/common/src/main/resources/architectury.midnightcontrols.json b/common/src/main/resources/architectury.midnightcontrols.json new file mode 100644 index 0000000..4721cff --- /dev/null +++ b/common/src/main/resources/architectury.midnightcontrols.json @@ -0,0 +1,3 @@ +{ + "accessWidener": "midnightcontrols.accesswidener" +} \ No newline at end of file diff --git a/common/src/main/resources/fabric.mod.json b/common/src/main/resources/fabric.mod.json deleted file mode 100644 index 39e6555..0000000 --- a/common/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "schemaVersion": 1, - "id": "midnightcontrols", - "name": "MidnightControls", - "version": "${version}", - "description": "Adds controller support and enhanced controls overall.", - "authors": [ - "LambdAurora", - "Motschen" - ], - "contributors": [ - "akemin-dayo", - "DioEgizio", - "dogtopus", - "egeesin", - "EnnuiL", - "FlashyReese", - "gyular", - "Hambaka", - "Ivanoks", - "joaoh1", - "KiskaUWU", - "Madis0", - "RaptaG", - "ronniedude", - "spudpiggy", - "TrueHorse" - ], - "contact": { - "homepage": "https://modrinth.com/mod/midnightcontrols", - "sources": "https://github.com/TeamMidnightDust/MidnightControls", - "issues": "https://github.com/TeamMidnightDust/MidnightControls/issues" - }, - "license": "MIT", - "icon": "assets/midnightcontrols/icon.png", - "environment": "client", - "entrypoints": { - "main": [ - "eu.midnightdust.midnightcontrols.MidnightControls" - ], - "client": [ - "eu.midnightdust.midnightcontrols.client.MidnightControlsClient" - ], - "modmenu": [ - "eu.midnightdust.midnightcontrols.client.MidnightControlsModMenu" - ] - }, - "accessWidener": "midnightcontrols.accesswidener", - "mixins": [ - "midnightcontrols.mixins.json", - "midnightcontrols_compat.mixins.json" - ], - "depends": { - "fabricloader": ">=0.11.3", - "fabric": ">=0.71.0", - "minecraft": ">=1.20.5", - "obsidianui": ">=0.2.5", - "java": ">=17" - }, - "suggests": { - "kontrolo": "*" - }, - "breaks": { - "lambdacontrols": "*", - "modmenu": "<1.12.2" - } -} diff --git a/common/src/main/resources/midnightcontrols.accesswidener b/common/src/main/resources/midnightcontrols.accesswidener index 5c38850..8f887b2 100644 --- a/common/src/main/resources/midnightcontrols.accesswidener +++ b/common/src/main/resources/midnightcontrols.accesswidener @@ -1,4 +1,3 @@ accessWidener v1 named -#accessible class net/minecraft/client/gui/widget/EntryListWidget$MoveDirection -accessible method net/minecraft/util/Identifier (Ljava/lang/String;Ljava/lang/String;)V \ No newline at end of file +#accessible class net/minecraft/client/gui/widget/EntryListWidget$MoveDirection \ No newline at end of file diff --git a/common/src/main/resources/midnightcontrols.mixins.json b/common/src/main/resources/midnightcontrols.mixins.json index 0f78373..9a0ce5c 100644 --- a/common/src/main/resources/midnightcontrols.mixins.json +++ b/common/src/main/resources/midnightcontrols.mixins.json @@ -6,7 +6,7 @@ "ClickableWidgetAccessor", "AdvancementsScreenAccessor", "ClientPlayerEntityMixin", - "ControlsOptionsScreenMixin", + "GameOptionsScreenMixin", "CreativeInventoryScreenAccessor", "GameRendererMixin", "HandledScreenMixin", diff --git a/fabric/src/main/java/eu/midnightdust/midnightcontrols/util/platform/fabric/ItemGroupUtilImpl.java b/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/ItemGroupUtilImpl.java similarity index 81% rename from fabric/src/main/java/eu/midnightdust/midnightcontrols/util/platform/fabric/ItemGroupUtilImpl.java rename to fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/ItemGroupUtilImpl.java index 59e87b7..d607187 100644 --- a/fabric/src/main/java/eu/midnightdust/midnightcontrols/util/platform/fabric/ItemGroupUtilImpl.java +++ b/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/ItemGroupUtilImpl.java @@ -1,14 +1,17 @@ -package eu.midnightdust.midnightcontrols.util.platform.fabric; +package eu.midnightdust.midnightcontrols.client.util.platform.fabric; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; import net.minecraft.client.gui.widget.PressableWidget; import net.minecraft.item.ItemGroup; import java.util.List; +/** + * Implementation of fabric methods for + * @see eu.midnightdust.midnightcontrols.client.util.platform.ItemGroupUtil + */ public class ItemGroupUtilImpl { - public static List getVisibleGroupss(CreativeInventoryScreen screen) { + public static List getVisibleGroups(CreativeInventoryScreen screen) { return (screen.getItemGroupsOnPage(screen.getCurrentPage())); } public static boolean cyclePage(boolean next, CreativeInventoryScreen screen) { diff --git a/fabric/src/main/java/eu/midnightdust/midnightcontrols/util/platform/fabric/NetworkUtilImpl.java b/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/NetworkUtilImpl.java similarity index 79% rename from fabric/src/main/java/eu/midnightdust/midnightcontrols/util/platform/fabric/NetworkUtilImpl.java rename to fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/NetworkUtilImpl.java index 26710e3..f99c5c4 100644 --- a/fabric/src/main/java/eu/midnightdust/midnightcontrols/util/platform/fabric/NetworkUtilImpl.java +++ b/fabric/src/main/java/eu/midnightdust/midnightcontrols/client/util/platform/fabric/NetworkUtilImpl.java @@ -1,4 +1,4 @@ -package eu.midnightdust.midnightcontrols.util.platform.fabric; +package eu.midnightdust.midnightcontrols.client.util.platform.fabric; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.network.packet.CustomPayload; @@ -7,6 +7,10 @@ import net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket; import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client; +/** + * Implementation of fabric methods for + * @see eu.midnightdust.midnightcontrols.client.util.platform.NetworkUtil + */ public class NetworkUtilImpl { private static final ClientPlayNetworkHandler handler = client.getNetworkHandler(); diff --git a/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsFabric.java b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsFabric.java index ee94446..a53f47e 100755 --- a/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsFabric.java +++ b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/MidnightControlsFabric.java @@ -3,7 +3,7 @@ package eu.midnightdust.midnightcontrols.fabric; import eu.midnightdust.midnightcontrols.ControlsMode; import eu.midnightdust.midnightcontrols.MidnightControls; import eu.midnightdust.midnightcontrols.MidnightControlsFeature; -import eu.midnightdust.midnightcontrols.event.PlayerChangeControlsModeCallback; +import eu.midnightdust.midnightcontrols.fabric.event.PlayerChangeControlsModeCallback; import eu.midnightdust.midnightcontrols.packet.ControlsModePayload; import eu.midnightdust.midnightcontrols.packet.FeaturePayload; import eu.midnightdust.midnightcontrols.packet.HelloPayload; @@ -21,12 +21,11 @@ public class MidnightControlsFabric implements ModInitializer { PayloadTypeRegistry.playS2C().register(FeaturePayload.PACKET_ID, FeaturePayload.codec); ServerPlayNetworking.registerGlobalReceiver(HelloPayload.PACKET_ID, (payload, context) -> { - ControlsMode.byId(payload.controlsMode()) - .ifPresent(controlsMode -> PlayerChangeControlsModeCallback.EVENT.invoker().apply(context.player(), controlsMode)); + ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> PlayerChangeControlsModeCallback.EVENT.invoker().apply(context.player(), controlsMode)); context.responseSender().sendPacket(new FeaturePayload(MidnightControlsFeature.HORIZONTAL_REACHAROUND)); }); - ServerPlayNetworking.registerGlobalReceiver(ControlsModePayload.PACKET_ID, - (payload, context) -> ControlsMode.byId(payload.controlsMode()) - .ifPresent(controlsMode -> PlayerChangeControlsModeCallback.EVENT.invoker().apply(context.player(), controlsMode))); + ServerPlayNetworking.registerGlobalReceiver(ControlsModePayload.PACKET_ID, (payload, context) -> { + ControlsMode.byId(payload.controlsMode()).ifPresent(controlsMode -> PlayerChangeControlsModeCallback.EVENT.invoker().apply(context.player(), controlsMode)); + }); } } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/event/PlayerChangeControlsModeCallback.java b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/event/PlayerChangeControlsModeCallback.java similarity index 93% rename from common/src/main/java/eu/midnightdust/midnightcontrols/event/PlayerChangeControlsModeCallback.java rename to fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/event/PlayerChangeControlsModeCallback.java index ab33324..96b2f16 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/event/PlayerChangeControlsModeCallback.java +++ b/fabric/src/main/java/eu/midnightdust/midnightcontrols/fabric/event/PlayerChangeControlsModeCallback.java @@ -7,7 +7,7 @@ * see the LICENSE file. */ -package eu.midnightdust.midnightcontrols.event; +package eu.midnightdust.midnightcontrols.fabric.event; import eu.midnightdust.midnightcontrols.ControlsMode; import net.fabricmc.fabric.api.event.Event; @@ -19,7 +19,7 @@ import org.jetbrains.annotations.NotNull; * Represents an event callback which is fired when a player changes the controls mode. * * @author LambdAurora - * @version 1.1.0 + * @version 1.10.0 * @since 1.1.0 */ @FunctionalInterface diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index e47650b..f561589 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -45,7 +45,6 @@ "eu.midnightdust.midnightcontrols.client.MidnightControlsModMenu" ] }, - "accessWidener": "midnightcontrols.accesswidener", "mixins": [ "midnightcontrols.mixins.json", "midnightcontrols_compat.mixins.json" diff --git a/gradle.properties b/gradle.properties index b21cef0..d146ada 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,7 +25,7 @@ yarn_mappings_patch_neoforge_version = 1.21+build.4 quilt_loader_version=0.19.0-beta.18 quilt_fabric_api_version=7.0.1+0.83.0-1.20 -sodium_version=mc1.19.2-0.4.4 +sodium_version=mc1.21-0.5.11 obsidianui_version=0.2.6+mc1.21 modmenu_version=10.0.0-beta.1 emotecraft_version=2.1.3-SNAPSHOT-build.29-MC1.19-fabric