diff --git a/build.gradle b/build.gradle index cc342f1..6a7c5b4 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "0.12.0-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.3-SNAPSHOT" apply false id "org.ajoberstar.grgit" version "5.0.0" apply false id "com.matthewprenger.cursegradle" version "1.4.0" apply false id "com.modrinth.minotaur" version "2.+" apply false diff --git a/common/src/main/java/me/cael/capes/mixins/AccessorPlayerListEntry.java b/common/src/main/java/me/cael/capes/mixins/AccessorPlayerListEntry.java deleted file mode 100644 index 31e2283..0000000 --- a/common/src/main/java/me/cael/capes/mixins/AccessorPlayerListEntry.java +++ /dev/null @@ -1,10 +0,0 @@ -package me.cael.capes.mixins; - -import net.minecraft.client.network.PlayerListEntry; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(PlayerListEntry.class) -public interface AccessorPlayerListEntry { - @Accessor void setTexturesLoaded(boolean texturesLoaded); -} diff --git a/common/src/main/java/me/cael/capes/mixins/MixinCapeFeatureRenderer.java b/common/src/main/java/me/cael/capes/mixins/MixinCapeFeatureRenderer.java index a8cb1c6..6ee1f6e 100644 --- a/common/src/main/java/me/cael/capes/mixins/MixinCapeFeatureRenderer.java +++ b/common/src/main/java/me/cael/capes/mixins/MixinCapeFeatureRenderer.java @@ -13,13 +13,13 @@ @Mixin(CapeFeatureRenderer.class) public class MixinCapeFeatureRenderer { - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getEntitySolid(Lnet/minecraft/util/Identifier;)Lnet/minecraft/client/render/RenderLayer;")) + @Redirect(method = "render*", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getEntitySolid(Lnet/minecraft/util/Identifier;)Lnet/minecraft/client/render/RenderLayer;")) private RenderLayer fixCapeTransparency(Identifier texture) { return RenderLayer.getArmorCutoutNoCull(texture); } // Fixes https://bugs.mojang.com/browse/MC-127749 - @ModifyVariable(method = "render", at = @At("STORE"), ordinal = 6) + @ModifyVariable(method = "render*", at = @At("STORE"), ordinal = 6) private float fixCapeInterpolation(float bodyRotation, @Local(argsOnly = true) AbstractClientPlayerEntity playerEntity, @Local(ordinal = 2, argsOnly = true) float partialTicks) { return playerEntity.prevBodyYaw + (playerEntity.bodyYaw - playerEntity.prevBodyYaw) * partialTicks; } diff --git a/common/src/main/java/me/cael/capes/mixins/MixinElytraFeatureRenderer.java b/common/src/main/java/me/cael/capes/mixins/MixinElytraFeatureRenderer.java deleted file mode 100644 index 532054a..0000000 --- a/common/src/main/java/me/cael/capes/mixins/MixinElytraFeatureRenderer.java +++ /dev/null @@ -1,23 +0,0 @@ -package me.cael.capes.mixins; - -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.sugar.Local; -import me.cael.capes.CapeConfig; -import me.cael.capes.Capes; -import me.cael.capes.handler.PlayerHandler; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.render.entity.feature.ElytraFeatureRenderer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(ElytraFeatureRenderer.class) -public class MixinElytraFeatureRenderer { - - @ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;canRenderCapeTexture()Z")) - private boolean toggleCustomElytra(boolean canRenderCapeTexture, @Local AbstractClientPlayerEntity abstractClientPlayerEntity) { - CapeConfig config = Capes.INSTANCE.getCONFIG(); - PlayerHandler handler = PlayerHandler.Companion.fromProfile(abstractClientPlayerEntity.getGameProfile()); - return canRenderCapeTexture && handler.getHasElytraTexture() && config.getEnableElytraTexture(); - } - -} diff --git a/common/src/main/java/me/cael/capes/mixins/MixinPlayerListEntry.java b/common/src/main/java/me/cael/capes/mixins/MixinPlayerListEntry.java index e2977df..bd5d6d3 100644 --- a/common/src/main/java/me/cael/capes/mixins/MixinPlayerListEntry.java +++ b/common/src/main/java/me/cael/capes/mixins/MixinPlayerListEntry.java @@ -1,36 +1,46 @@ package me.cael.capes.mixins; import com.mojang.authlib.GameProfile; +import me.cael.capes.CapeConfig; +import me.cael.capes.Capes; import me.cael.capes.handler.PlayerHandler; import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.client.util.SkinTextures; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.function.Supplier; + @Mixin(PlayerListEntry.class) public class MixinPlayerListEntry { @Shadow @Final private GameProfile profile; - @Shadow private boolean texturesLoaded; - @Inject(method = "loadTextures", at = @At("HEAD")) - private void loadTextures(CallbackInfo ci) { - if (!texturesLoaded) { - PlayerHandler.Companion.onLoadTexture(profile); - } + @Inject(method = "texturesSupplier", at = @At("HEAD")) + private static void loadTextures(GameProfile profile, CallbackInfoReturnable> cir) { + PlayerHandler.Companion.onLoadTexture(profile); } - @Inject(method = "getCapeTexture", at = @At("TAIL"), cancellable = true) - private void getCapeTexture(CallbackInfoReturnable cir) { + @Inject(method = "getSkinTextures", at = @At("TAIL"), cancellable = true) + private void getCapeTexture(CallbackInfoReturnable cir) { PlayerHandler handler = PlayerHandler.Companion.fromProfile(profile); if (handler.getHasCape()) { - cir.setReturnValue(handler.getCape()); + CapeConfig config = Capes.INSTANCE.getCONFIG(); + SkinTextures oldTextures = cir.getReturnValue(); + Identifier capeTexture = handler.getCape(); + Identifier elytraTexture = handler.getHasElytraTexture() && config.getEnableElytraTexture() ? capeTexture : new Identifier("textures/entity/elytra.png"); + SkinTextures newTextures = new SkinTextures( + oldTextures.texture(), oldTextures.textureUrl(), + capeTexture, elytraTexture, + oldTextures.model(), oldTextures.secure()); + cir.setReturnValue(newTextures); } } + } diff --git a/common/src/main/java/me/cael/capes/mixins/MixinSkinOptionsScreen.java b/common/src/main/java/me/cael/capes/mixins/MixinSkinOptionsScreen.java index 92c08c9..d2a4064 100644 --- a/common/src/main/java/me/cael/capes/mixins/MixinSkinOptionsScreen.java +++ b/common/src/main/java/me/cael/capes/mixins/MixinSkinOptionsScreen.java @@ -4,11 +4,12 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.GameOptionsScreen; import net.minecraft.client.gui.screen.option.SkinOptionsScreen; -import net.minecraft.client.gui.widget.TexturedButtonWidget; +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.spongepowered.asm.mixin.Mixin; +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; @@ -16,7 +17,9 @@ @Mixin(SkinOptionsScreen.class) public class MixinSkinOptionsScreen extends GameOptionsScreen { - private static final Identifier CAPE_OPTIONS_ICON_TEXTURE = new Identifier("capes","textures/gui/options.png"); + @Unique + private static final Identifier CAPE_OPTIONS_ICON_TEXTURE = new Identifier("capes","icon/cape_options"); + @Unique private final SelectorMenu selectorMenu = new SelectorMenu(this, this.gameOptions); public MixinSkinOptionsScreen(Screen parent, GameOptions gameOptions, Text title) { @@ -25,6 +28,6 @@ public MixinSkinOptionsScreen(Screen parent, GameOptions gameOptions, Text title @Inject(method = "init", at = @At("RETURN")) protected void init(CallbackInfo info) { - this.addDrawableChild(new TexturedButtonWidget(this.width / 2 - 179, this.height / 6, 20, 20, 0, 0, 20, CAPE_OPTIONS_ICON_TEXTURE,32, 64, (buttonWidget) -> this.client.setScreen(selectorMenu))); + this.addDrawableChild(TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> this.client.setScreen(selectorMenu), true).dimension(20, 20).texture(CAPE_OPTIONS_ICON_TEXTURE, 16, 16).build()).setPosition(this.width / 2 - 179, this.height / 6); } } diff --git a/common/src/main/kotlin/me/cael/capes/handler/PlayerHandler.kt b/common/src/main/kotlin/me/cael/capes/handler/PlayerHandler.kt index ddff3d5..b16208b 100644 --- a/common/src/main/kotlin/me/cael/capes/handler/PlayerHandler.kt +++ b/common/src/main/kotlin/me/cael/capes/handler/PlayerHandler.kt @@ -42,7 +42,7 @@ class PlayerHandler(var profile: GameProfile) { fun onLoadTexture(profile: GameProfile) { val playerHandler = fromProfile(profile) - if (profile == MinecraftClient.getInstance().session.profile) { + if (profile == MinecraftClient.getInstance().gameProfile) { playerHandler.hasCape = false playerHandler.hasAnimatedCape = false val config = Capes.CONFIG diff --git a/common/src/main/kotlin/me/cael/capes/menu/MainMenu.kt b/common/src/main/kotlin/me/cael/capes/menu/MainMenu.kt index 10c2184..a4060ec 100644 --- a/common/src/main/kotlin/me/cael/capes/menu/MainMenu.kt +++ b/common/src/main/kotlin/me/cael/capes/menu/MainMenu.kt @@ -32,7 +32,7 @@ open class MainMenu(parent: Screen, gameOptions: GameOptions) : GameOptionsScree } override fun render(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) { - this.renderBackground(context) + this.renderBackground(context, mouseX, mouseY, delta) context.drawCenteredTextWithShadow(textRenderer, title, width / 2, 20, 16777215) super.render(context, mouseX, mouseY, delta) } diff --git a/common/src/main/kotlin/me/cael/capes/menu/OtherMenu.kt b/common/src/main/kotlin/me/cael/capes/menu/OtherMenu.kt index d67bcbc..a190445 100644 --- a/common/src/main/kotlin/me/cael/capes/menu/OtherMenu.kt +++ b/common/src/main/kotlin/me/cael/capes/menu/OtherMenu.kt @@ -23,8 +23,8 @@ class OtherMenu(parent: Screen, gameOptions: GameOptions) : MainMenu(parent, gam val random1Bi = BigInteger(128, Random()) val random2Bi = BigInteger(128, Random(System.identityHashCode(Object()).toLong())) val serverId = random1Bi.xor(random2Bi).toString(16) - client!!.sessionService.joinServer(client!!.session.profile, client!!.session.accessToken, serverId) - val url = "https://optifine.net/capeChange?u=${client!!.session.uuid}&n=${client!!.session.username}&s=$serverId" + client!!.sessionService.joinServer(client!!.gameProfile.id, client!!.session.accessToken, serverId) + val url = "https://optifine.net/capeChange?u=${client!!.gameProfile.id}&n=${client!!.session.username}&s=$serverId" client!!.setScreen(ConfirmLinkScreen({ bool: Boolean -> if (bool) { Util.getOperatingSystem().open(url) diff --git a/common/src/main/kotlin/me/cael/capes/menu/SelectorMenu.kt b/common/src/main/kotlin/me/cael/capes/menu/SelectorMenu.kt index 34930ce..d5160e7 100644 --- a/common/src/main/kotlin/me/cael/capes/menu/SelectorMenu.kt +++ b/common/src/main/kotlin/me/cael/capes/menu/SelectorMenu.kt @@ -2,7 +2,6 @@ package me.cael.capes.menu import com.mojang.blaze3d.systems.RenderSystem import me.cael.capes.Capes -import me.cael.capes.mixins.AccessorPlayerListEntry import me.cael.capes.render.DisplayPlayerEntityRenderer import me.cael.capes.render.PlaceholderEntity import net.minecraft.client.MinecraftClient @@ -32,10 +31,6 @@ class SelectorMenu(parent: Screen, gameOptions: GameOptions) : MainMenu(parent, config.save() it.message = config.clientCapeType.getText() PlaceholderEntity.capeLoaded = false - if (this.client?.player != null) { - val playerListEntry = this.client!!.networkHandler!!.getPlayerListEntry(this.client!!.player!!.uuid) as AccessorPlayerListEntry - playerListEntry.setTexturesLoaded(false) - } }.position((width / 2) - (buttonW / 2), 60).size(buttonW, 20).build()) addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE) { @@ -113,7 +108,7 @@ class SelectorMenu(parent: Screen, gameOptions: GameOptions) : MainMenu(parent, override fun mouseDragged(mouseX: Double, mouseY: Double, button: Int, deltaX: Double, deltaY: Double): Boolean { super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY) PlaceholderEntity.prevYaw = PlaceholderEntity.yaw - PlaceholderEntity.yaw = PlaceholderEntity.yaw - deltaX.toFloat() + PlaceholderEntity.yaw -= deltaX.toFloat() return true } diff --git a/common/src/main/kotlin/me/cael/capes/render/PlaceholderEntity.kt b/common/src/main/kotlin/me/cael/capes/render/PlaceholderEntity.kt index 78c48b9..156c33f 100644 --- a/common/src/main/kotlin/me/cael/capes/render/PlaceholderEntity.kt +++ b/common/src/main/kotlin/me/cael/capes/render/PlaceholderEntity.kt @@ -1,21 +1,20 @@ package me.cael.capes.render -import com.google.common.collect.Maps -import com.mojang.authlib.minecraft.MinecraftProfileTexture import me.cael.capes.Capes import me.cael.capes.handler.PlayerHandler import net.minecraft.client.MinecraftClient import net.minecraft.client.util.DefaultSkinHelper +import net.minecraft.client.util.SkinTextures import net.minecraft.util.Identifier -import java.util.* import kotlin.math.sqrt object PlaceholderEntity { - private val textures: EnumMap = Maps.newEnumMap(MinecraftProfileTexture.Type::class.java) + val gameProfile = MinecraftClient.getInstance().gameProfile - val gameProfile = MinecraftClient.getInstance().session.profile + var skin: SkinTextures = DefaultSkinHelper.getTexture(gameProfile) var slim = false + var showBody = true var showElytra = false var capeLoaded = false @@ -28,15 +27,10 @@ object PlaceholderEntity { var prevX = 0.0 init { - MinecraftClient.getInstance().skinProvider.loadSkin(gameProfile, - { type: MinecraftProfileTexture.Type, identifier: Identifier, texture: MinecraftProfileTexture -> - this.textures[type] = identifier - if (type == MinecraftProfileTexture.Type.SKIN) { - slim = texture.getMetadata("model") == "slim" - } - }, - true - ) + MinecraftClient.getInstance().skinProvider.fetchSkinTextures(gameProfile).thenAccept { + skin = it + slim = skin.model == SkinTextures.Model.SLIM + } } fun updateLimbs() { @@ -56,7 +50,7 @@ object PlaceholderEntity { PlayerHandler.onLoadTexture(gameProfile) } val handler = PlayerHandler.fromProfile(gameProfile) - return if (handler.hasCape) handler.getCape() else textures[MinecraftProfileTexture.Type.CAPE] + return if (handler.hasCape) handler.getCape() else skin.capeTexture } fun getElytraTexture(): Identifier { @@ -65,5 +59,5 @@ object PlaceholderEntity { return if (handler.hasElytraTexture && Capes.CONFIG.enableElytraTexture && capeTexture != null) capeTexture else Identifier("textures/entity/elytra.png") } - fun getSkinTexture(): Identifier = textures.getOrDefault(MinecraftProfileTexture.Type.SKIN, DefaultSkinHelper.getTexture()) + fun getSkinTexture(): Identifier = skin.texture } \ No newline at end of file diff --git a/common/src/main/resources/assets/capes/textures/gui/options.png b/common/src/main/resources/assets/capes/textures/gui/options.png deleted file mode 100644 index 20ff9e7..0000000 Binary files a/common/src/main/resources/assets/capes/textures/gui/options.png and /dev/null differ diff --git a/common/src/main/resources/assets/capes/textures/gui/sprites/icon/cape_options.png b/common/src/main/resources/assets/capes/textures/gui/sprites/icon/cape_options.png new file mode 100644 index 0000000..bfc7632 Binary files /dev/null and b/common/src/main/resources/assets/capes/textures/gui/sprites/icon/cape_options.png differ diff --git a/common/src/main/resources/capes-common.mixins.json b/common/src/main/resources/capes-common.mixins.json index b16f4e7..8572ea9 100644 --- a/common/src/main/resources/capes-common.mixins.json +++ b/common/src/main/resources/capes-common.mixins.json @@ -6,9 +6,7 @@ "mixins": [ ], "client": [ - "AccessorPlayerListEntry", "MixinCapeFeatureRenderer", - "MixinElytraFeatureRenderer", "MixinPlayerListEntry", "MixinSkinOptionsScreen" ], diff --git a/fabric/build.gradle b/fabric/build.gradle index 6674b63..f8cb420 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -34,7 +34,7 @@ dependencies { include(implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-fabric:${rootProject.mixinextras_version}"))) - modImplementation "com.ptsmods:devlogin:3.1.1" + modImplementation "com.ptsmods:devlogin:3.4.1" common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } @@ -52,20 +52,20 @@ shadowJar { exclude "architectury.common.json" configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { injectAccessWidener = true input.set shadowJar.archiveFile dependsOn shadowJar - classifier "fabric" + archiveClassifier.set "fabric" from rootProject.file("LICENSE") } jar { - classifier "dev" + archiveClassifier.set "dev" } sourcesJar { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index eae62fd..70057ee 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -40,7 +40,7 @@ "fabricloader": ">=0.14.21", "fabric": "*", "fabric-language-kotlin": "*", - "minecraft": ">=1.20", + "minecraft": ">=1.20.2", "java": ">=17" } } diff --git a/forge/build.gradle b/forge/build.gradle index 60fc579..57a734d 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -50,12 +50,12 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive false } - modImplementation "thedarkcolour:kotlinforforge:${forge_kotlin_version}" + implementation "thedarkcolour:kotlinforforge:${forge_kotlin_version}" implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-common:${mixinextras_version}")) implementation(include("com.github.llamalad7.mixinextras:mixinextras-forge:${mixinextras_version}")) -// modImplementation "com.ptsmods:devlogin:3.1.1" + modImplementation "com.ptsmods:devlogin:3.4.1" } processResources { @@ -73,19 +73,19 @@ shadowJar { mergeServiceFiles() configurations = [project.configurations.shadowCommon] - classifier "dev-shadow" + archiveClassifier.set "dev-shadow" } remapJar { input.set shadowJar.archiveFile dependsOn shadowJar - classifier "forge" + archiveClassifier.set "forge" from rootProject.file("LICENSE") } jar { - classifier "dev" + archiveClassifier.set "dev" } sourcesJar { diff --git a/forge/src/main/java/me/cael/capes/forge/ForgedCapesPlugin.java b/forge/src/main/java/me/cael/capes/forge/mixins/ForgedCapesPlugin.java similarity index 96% rename from forge/src/main/java/me/cael/capes/forge/ForgedCapesPlugin.java rename to forge/src/main/java/me/cael/capes/forge/mixins/ForgedCapesPlugin.java index 25cc513..a9156ba 100644 --- a/forge/src/main/java/me/cael/capes/forge/ForgedCapesPlugin.java +++ b/forge/src/main/java/me/cael/capes/forge/mixins/ForgedCapesPlugin.java @@ -1,4 +1,4 @@ -package me.cael.capes.forge; +package me.cael.capes.forge.mixins; import com.llamalad7.mixinextras.MixinExtrasBootstrap; import org.objectweb.asm.tree.ClassNode; diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 505f19c..2521932 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -15,13 +15,13 @@ A mod that lets you use capes from Optifine, LabyMod, Cosmetica, Wynntils, Capes [[dependencies.capes]] modId = "forge" mandatory = true -versionRange = "[46,)" +versionRange = "[48,)" ordering = "NONE" -side = "BOTH" +side = "CLIENT" [[dependencies.capes]] modId = "minecraft" mandatory = true -versionRange = "[1.20,)" +versionRange = "[1.20.2,)" ordering = "NONE" -side = "BOTH" +side = "CLIENT" diff --git a/forge/src/main/resources/capes-forge.mixins.json b/forge/src/main/resources/capes-forge.mixins.json index 41638b9..d31cdfe 100644 --- a/forge/src/main/resources/capes-forge.mixins.json +++ b/forge/src/main/resources/capes-forge.mixins.json @@ -3,7 +3,7 @@ "minVersion": "0.8", "package": "me.cael.capes.forge.mixins", "compatibilityLevel": "JAVA_17", - "plugin": "me.cael.capes.forge.ForgedCapesPlugin", + "plugin": "me.cael.capes.forge.mixins.ForgedCapesPlugin", "mixins": [ ], "client": [ diff --git a/gradle.properties b/gradle.properties index 3ef9ea0..876bb01 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,22 +1,22 @@ org.gradle.jvmargs=-Xmx8G -minecraft_version=1.20 -yarn_mappings=1.20+build.1 +minecraft_version=1.20.2 +yarn_mappings=1.20.2+build.2 enabled_platforms=fabric,forge archives_base_name=capes -mod_version=1.5.2+1.20 +mod_version=1.5.3+1.20.2 maven_group=me.capes -fabric_loader_version=0.14.21 -fabric_api_version=0.83.0+1.20 +fabric_loader_version=0.14.22 +fabric_api_version=0.89.3+1.20.2 -forge_version=1.20-46.0.1 +forge_version=1.20.2-48.0.13 # Other APIs -fabric_kotlin_version=1.9.4+kotlin.1.8.21 -forge_kotlin_version=4.3.0 -modmenu_version=7.+ +fabric_kotlin_version=1.10.10+kotlin.1.9.10 +forge_kotlin_version=4.+ +modmenu_version=8.+ mixinextras_version=0.2.+ # Publishing diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41dfb87..59bc51a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists