diff --git a/.editorconfig b/.editorconfig index baf4174..c609e56 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,5 +9,4 @@ insert_final_newline = true max_line_length = 120 [*.json] -indent_style = space insert_final_newline = false diff --git a/build.gradle b/build.gradle deleted file mode 100644 index e947f67..0000000 --- a/build.gradle +++ /dev/null @@ -1,75 +0,0 @@ -plugins { - id 'fabric-loom' version '1.6-SNAPSHOT' - id 'maven-publish' -} - -version = project.mod_version -group = project.maven_group - -base { - archivesName = project.archives_base_name -} - -repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. -} - -dependencies { - // To change the versions see the gradle.properties file - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - // Fabric API. This is technically optional, but you probably want it anyway. - //modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" -} - -processResources { - inputs.property "version", project.version - - filesMatching("fabric.mod.json") { - expand "version": project.version - } -} - -tasks.withType(JavaCompile).configureEach { - it.options.release = 21 -} - -java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. - withSourcesJar() - - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 -} - -jar { - from("LICENSE") { - rename { "${it}_${project.base.archivesName.get()}"} - } -} - -// configure the maven publication -publishing { - publications { - create("mavenJava", MavenPublication) { - artifactId = project.archives_base_name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. - } -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..420b198 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,43 @@ +plugins { + id("java") + id("fabric-loom") version "1.6-SNAPSHOT" + id("idea") +} + +java { + withSourcesJar() + sourceCompatibility = JavaVersion.valueOf("VERSION_${properties["java_version"]}") + targetCompatibility = JavaVersion.valueOf("VERSION_${properties["java_version"]}") +} + +dependencies { + minecraft("com.mojang:minecraft:${properties["minecraft_version"]}") + mappings(loom.officialMojangMappings()) + modImplementation("net.fabricmc:fabric-loader:${properties["fabric_version"]}") +} + +base { + archivesName = "${properties["mod_id"]}-fabric" + version = "v${properties["mod_version"]}+mc${properties["minecraft_version"]}" +} + +tasks { + processResources { + filesMatching("fabric.mod.json") { + expand(project.properties) + } + } + + jar { + from("LICENSE") { + rename { "${it}_${project.properties["mod_id"]}" } + } + } +} + +idea { + module { + isDownloadSources = true + isDownloadJavadoc = true + } +} diff --git a/gradle.properties b/gradle.properties index 049963c..677190b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,16 +2,14 @@ org.gradle.jvmargs=-Xmx1G org.gradle.parallel=true -# Fabric Properties -# check these on https://fabricmc.net/develop +# Environment Properties +java_version=21 minecraft_version=1.20.6 -yarn_mappings=1.20.6+build.1 -loader_version=0.15.11 +fabric_version=0.15.11 # Mod Properties -mod_version=0.1.0-alpha2 -maven_group=icu.puqns67.skintypefix -archives_base_name=skintypefix-fabric - -# Dependencies -fabric_version=0.98.0+1.20.6 +mod_id=skintypefix +mod_name=Skin type fix +mod_version=0.1.0-alpha.3 +mod_license=GPL-3.0-or-later +mod_description=Fix wrong skin type for some players. diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 75c4d72..0000000 --- a/settings.gradle +++ /dev/null @@ -1,10 +0,0 @@ -pluginManagement { - repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } - mavenCentral() - gradlePluginPortal() - } -} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..902f1ad --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + maven { + name = "Fabric" + url = uri("https://maven.fabricmc.net/") + } + mavenCentral() + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} + +rootProject.name = "SkinTypeFix" diff --git a/src/main/java/icu/puqns67/skintypefix/SkinTypeFix.java b/src/main/java/icu/puqns67/skintypefix/SkinTypeFix.java index ee86be2..578d125 100644 --- a/src/main/java/icu/puqns67/skintypefix/SkinTypeFix.java +++ b/src/main/java/icu/puqns67/skintypefix/SkinTypeFix.java @@ -8,14 +8,13 @@ import net.fabricmc.api.Environment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - @Environment(EnvType.CLIENT) public class SkinTypeFix implements ClientModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger("SkinTypeFix"); - public static final Config CONFIG = ConfigLoader.load(); + public static final Config CONFIG = ConfigLoader.get(); @Override public void onInitializeClient() { - LOGGER.info("Loaded!"); + LOGGER.info("[SkinTypeFix] Loaded!"); } } diff --git a/src/main/java/icu/puqns67/skintypefix/accessor/PlayerSkinTextureAccessor.java b/src/main/java/icu/puqns67/skintypefix/accessor/PlayerSkinTextureAccessor.java deleted file mode 100644 index 97c0bea..0000000 --- a/src/main/java/icu/puqns67/skintypefix/accessor/PlayerSkinTextureAccessor.java +++ /dev/null @@ -1,10 +0,0 @@ -package icu.puqns67.skintypefix.accessor; - -import net.minecraft.client.texture.NativeImage; - - -public interface PlayerSkinTextureAccessor { - void skinTypeFix$joinLoader(); - - NativeImage skinTypeFix$getImage(); -} diff --git a/src/main/java/icu/puqns67/skintypefix/config/Config.java b/src/main/java/icu/puqns67/skintypefix/config/Config.java index d9083ae..1eb38ec 100644 --- a/src/main/java/icu/puqns67/skintypefix/config/Config.java +++ b/src/main/java/icu/puqns67/skintypefix/config/Config.java @@ -1,6 +1,5 @@ package icu.puqns67.skintypefix.config; - public class Config { public boolean skipFixForSlimPlayers = true; } diff --git a/src/main/java/icu/puqns67/skintypefix/config/ConfigLoader.java b/src/main/java/icu/puqns67/skintypefix/config/ConfigLoader.java index 2fe52cc..06c386a 100644 --- a/src/main/java/icu/puqns67/skintypefix/config/ConfigLoader.java +++ b/src/main/java/icu/puqns67/skintypefix/config/ConfigLoader.java @@ -5,25 +5,19 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import icu.puqns67.skintypefix.SkinTypeFix; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; - public class ConfigLoader { private static final Path PATH = Path.of("config", "skintypefix.json"); private static final Gson GSON = new GsonBuilder() - .setPrettyPrinting() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) + .setPrettyPrinting() .create(); public static Config load() { - if (!Files.exists(PATH)) { - SkinTypeFix.LOGGER.info("[SkinTypeFix] Config file does not exist, create a new one!"); - var result = new Config(); - save(result); - return result; - } try (var reader = Files.newBufferedReader(PATH)) { return GSON.fromJson(reader, Config.class); } catch (Exception e) { @@ -33,10 +27,27 @@ public class ConfigLoader { } public static void save(Config config) { + if (!Files.exists(PATH.getParent())) { + try { + Files.createDirectories(PATH.getParent()); + } catch (IOException e) { + SkinTypeFix.LOGGER.warn("[SkinTypeFix] Can't create config dir, changes may not be saved!", e); + } + } try (var writer = Files.newBufferedWriter(PATH, StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING)) { GSON.toJson(config, writer); } catch (Exception e) { SkinTypeFix.LOGGER.warn("[SkinTypeFix] Can't save config file, changes may not be saved!", e); } } + + public static Config get() { + if (!Files.exists(PATH)) { + SkinTypeFix.LOGGER.info("[SkinTypeFix] Config file does not exist, create a new one!"); + var result = new Config(); + save(result); + return result; + } + return load(); + } } diff --git a/src/main/java/icu/puqns67/skintypefix/mixin/accessor/HttpTextureAccessor.java b/src/main/java/icu/puqns67/skintypefix/mixin/accessor/HttpTextureAccessor.java new file mode 100644 index 0000000..0cc1d65 --- /dev/null +++ b/src/main/java/icu/puqns67/skintypefix/mixin/accessor/HttpTextureAccessor.java @@ -0,0 +1,9 @@ +package icu.puqns67.skintypefix.mixin.accessor; + +import com.mojang.blaze3d.platform.NativeImage; + +public interface HttpTextureAccessor { + void skinTypeFix$joinLoader(); + + NativeImage skinTypeFix$getImage(); +} diff --git a/src/main/java/icu/puqns67/skintypefix/mixin/PlayerSkinTextureMixin.java b/src/main/java/icu/puqns67/skintypefix/mixin/patch/HttpTextureMixin.java similarity index 51% rename from src/main/java/icu/puqns67/skintypefix/mixin/PlayerSkinTextureMixin.java rename to src/main/java/icu/puqns67/skintypefix/mixin/patch/HttpTextureMixin.java index b4c5dce..8702227 100644 --- a/src/main/java/icu/puqns67/skintypefix/mixin/PlayerSkinTextureMixin.java +++ b/src/main/java/icu/puqns67/skintypefix/mixin/patch/HttpTextureMixin.java @@ -1,46 +1,45 @@ -package icu.puqns67.skintypefix.mixin; +package icu.puqns67.skintypefix.mixin.patch; +import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.TextureUtil; import icu.puqns67.skintypefix.SkinTypeFix; -import icu.puqns67.skintypefix.accessor.PlayerSkinTextureAccessor; +import icu.puqns67.skintypefix.mixin.accessor.HttpTextureAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.texture.NativeImage; -import net.minecraft.client.texture.PlayerSkinTexture; -import net.minecraft.client.texture.ResourceTexture; -import net.minecraft.util.Identifier; +import net.minecraft.client.renderer.texture.HttpTexture; +import net.minecraft.client.renderer.texture.SimpleTexture; +import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.*; import java.io.InputStream; import java.util.concurrent.CompletableFuture; - @Environment(EnvType.CLIENT) -@Mixin(PlayerSkinTexture.class) -public abstract class PlayerSkinTextureMixin extends ResourceTexture implements PlayerSkinTextureAccessor { +@Mixin(HttpTexture.class) +public abstract class HttpTextureMixin extends SimpleTexture implements HttpTextureAccessor { @Unique @Nullable protected NativeImage image = null; @Shadow @Nullable - private CompletableFuture loader; + private CompletableFuture future; @Shadow @Final - private boolean convertLegacy; + private boolean processLegacySkin; - public PlayerSkinTextureMixin(Identifier location) { + public HttpTextureMixin(ResourceLocation location) { super(location); } @Shadow @Nullable - protected abstract NativeImage remapTexture(NativeImage image); + protected abstract NativeImage processLegacySkin(NativeImage image); @Unique public void skinTypeFix$joinLoader() { - if (this.loader != null) { - this.loader.join(); + if (this.future != null) { + this.future.join(); } } @@ -51,20 +50,20 @@ public abstract class PlayerSkinTextureMixin extends ResourceTexture implements /** * @author Puqns67 - * @reason test + * @reason Overwrite the load() function to create another NativeImage at loading, using for check skin. */ @Nullable @Overwrite - private NativeImage loadTexture(InputStream stream) { + private NativeImage load(InputStream stream) { try { var buffer = TextureUtil.readResource(stream); buffer.rewind(); this.image = NativeImage.read(buffer); buffer.rewind(); var result = NativeImage.read(buffer); - if (this.convertLegacy) { - this.image = this.remapTexture(this.image); - result = this.remapTexture(result); + if (this.processLegacySkin) { + this.image = this.processLegacySkin(this.image); + result = this.processLegacySkin(result); } return result; } catch (Exception exception) { diff --git a/src/main/java/icu/puqns67/skintypefix/mixin/PlayerSkinProviderMixin.java b/src/main/java/icu/puqns67/skintypefix/mixin/patch/SkinManagerMixin.java similarity index 64% rename from src/main/java/icu/puqns67/skintypefix/mixin/PlayerSkinProviderMixin.java rename to src/main/java/icu/puqns67/skintypefix/mixin/patch/SkinManagerMixin.java index 3ed4edb..9260f05 100644 --- a/src/main/java/icu/puqns67/skintypefix/mixin/PlayerSkinProviderMixin.java +++ b/src/main/java/icu/puqns67/skintypefix/mixin/patch/SkinManagerMixin.java @@ -1,19 +1,19 @@ -package icu.puqns67.skintypefix.mixin; +package icu.puqns67.skintypefix.mixin.patch; import com.llamalad7.mixinextras.sugar.Local; import com.mojang.authlib.SignatureState; import com.mojang.authlib.minecraft.MinecraftProfileTexture; import com.mojang.authlib.minecraft.MinecraftProfileTextures; import icu.puqns67.skintypefix.SkinTypeFix; -import icu.puqns67.skintypefix.accessor.PlayerSkinTextureAccessor; +import icu.puqns67.skintypefix.mixin.accessor.HttpTextureAccessor; import icu.puqns67.skintypefix.util.Utils; import icu.puqns67.skintypefix.util.image.Places; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.texture.PlayerSkinProvider; -import net.minecraft.client.util.SkinTextures; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.PlayerSkin; +import net.minecraft.client.resources.SkinManager; +import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -22,20 +22,19 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.UUID; import java.util.concurrent.CompletableFuture; - @Environment(EnvType.CLIENT) -@Mixin(PlayerSkinProvider.class) -public class PlayerSkinProviderMixin { - @Inject(method = "fetchSkinTextures(Ljava/util/UUID;Lcom/mojang/authlib/minecraft/MinecraftProfileTextures;)Ljava/util/concurrent/CompletableFuture;", at = @At("TAIL"), cancellable = true) - private void onFetchSkinTexturesPrivate( +@Mixin(SkinManager.class) +public class SkinManagerMixin { + @Inject(method = "registerTextures", at = @At("TAIL"), cancellable = true) + private void onRegisterTextures( UUID uuid, MinecraftProfileTextures textures, - CallbackInfoReturnable> cir, + CallbackInfoReturnable> cir, @Local(ordinal = 0) MinecraftProfileTexture skinTextureOrigin, - @Local(ordinal = 0) CompletableFuture skinFuture, - @Local(ordinal = 1) CompletableFuture capeFuture, - @Local(ordinal = 2) CompletableFuture elytraFuture, - @Local SkinTextures.Model skinModelOrigin, + @Local(ordinal = 0) CompletableFuture skinFuture, + @Local(ordinal = 1) CompletableFuture capeFuture, + @Local(ordinal = 2) CompletableFuture elytraFuture, + @Local PlayerSkin.Model skinModelOrigin, @Local String skinUrl ) { // Skip fix if using internal skin or uuid is invalid uuid @@ -45,15 +44,15 @@ public class PlayerSkinProviderMixin { // If model is defaults to SLIM, and config `skipFixForSlimPlayers` is set to true, // checks are skipped because some skins have bad pixels - if (skinModelOrigin == SkinTextures.Model.SLIM && SkinTypeFix.CONFIG.skipFixForSlimPlayers) { + if (skinModelOrigin == PlayerSkin.Model.SLIM && SkinTypeFix.CONFIG.skipFixForSlimPlayers) { return; } - var textureManager = MinecraftClient.getInstance().getTextureManager(); + var textureManager = Minecraft.getInstance().getTextureManager(); - CompletableFuture modelFuture = skinFuture.thenApply(v -> { + CompletableFuture modelFuture = skinFuture.thenApply(v -> { // Get texture from TextureManager - var skinTexture = (PlayerSkinTextureAccessor) textureManager.getTexture(skinFuture.join()); + var skinTexture = (HttpTextureAccessor) textureManager.getTexture(skinFuture.join()); // Wait skin loading if it needed fetch from web skinTexture.skinTypeFix$joinLoader(); @@ -84,7 +83,7 @@ public class PlayerSkinProviderMixin { cir.setReturnValue( CompletableFuture .allOf(skinFuture, capeFuture, elytraFuture, modelFuture) - .thenApply(v -> new SkinTextures( + .thenApply(v -> new PlayerSkin( skinFuture.join(), skinUrl, capeFuture.join(), diff --git a/src/main/java/icu/puqns67/skintypefix/util/Utils.java b/src/main/java/icu/puqns67/skintypefix/util/Utils.java index 42a5f3f..9052fe8 100644 --- a/src/main/java/icu/puqns67/skintypefix/util/Utils.java +++ b/src/main/java/icu/puqns67/skintypefix/util/Utils.java @@ -1,18 +1,16 @@ package icu.puqns67.skintypefix.util; -import net.minecraft.client.util.SkinTextures; -import org.jetbrains.annotations.NotNull; +import net.minecraft.client.resources.PlayerSkin; import java.util.UUID; - public class Utils { private static final UUID INVALID_UUID = new UUID(0, 0); - public static @NotNull SkinTextures.Model reverseModelType(SkinTextures.Model type) { + public static PlayerSkin.Model reverseModelType(PlayerSkin.Model type) { return switch (type) { - case SLIM -> SkinTextures.Model.WIDE; - case WIDE -> SkinTextures.Model.SLIM; + case SLIM -> PlayerSkin.Model.WIDE; + case WIDE -> PlayerSkin.Model.SLIM; }; } diff --git a/src/main/java/icu/puqns67/skintypefix/util/image/Places.java b/src/main/java/icu/puqns67/skintypefix/util/image/Places.java index 6561166..6573304 100644 --- a/src/main/java/icu/puqns67/skintypefix/util/image/Places.java +++ b/src/main/java/icu/puqns67/skintypefix/util/image/Places.java @@ -1,10 +1,9 @@ package icu.puqns67.skintypefix.util.image; -import net.minecraft.client.texture.NativeImage; +import com.mojang.blaze3d.platform.NativeImage; import java.util.ArrayList; - public class Places { public static final Places PLAYER = Places.forPlayer(); private final ArrayList squares = new ArrayList<>(); diff --git a/src/main/java/icu/puqns67/skintypefix/util/image/Point.java b/src/main/java/icu/puqns67/skintypefix/util/image/Point.java index bd69649..9d43b2d 100644 --- a/src/main/java/icu/puqns67/skintypefix/util/image/Point.java +++ b/src/main/java/icu/puqns67/skintypefix/util/image/Point.java @@ -1,7 +1,6 @@ package icu.puqns67.skintypefix.util.image; -import net.minecraft.client.texture.NativeImage; - +import com.mojang.blaze3d.platform.NativeImage; public record Point(int x, int y) { public Point { @@ -11,6 +10,6 @@ public record Point(int x, int y) { } public boolean isBlack(NativeImage image) { - return image.getColor(x, y) == 0xff000000; + return image.getPixelRGBA(x, y) == 0xff000000; } } diff --git a/src/main/java/icu/puqns67/skintypefix/util/image/Square.java b/src/main/java/icu/puqns67/skintypefix/util/image/Square.java index 5430573..45c8c1b 100644 --- a/src/main/java/icu/puqns67/skintypefix/util/image/Square.java +++ b/src/main/java/icu/puqns67/skintypefix/util/image/Square.java @@ -1,10 +1,9 @@ package icu.puqns67.skintypefix.util.image; -import net.minecraft.client.texture.NativeImage; +import com.mojang.blaze3d.platform.NativeImage; import java.util.ArrayList; - public record Square(Point p1, Point p2) { public Square { // The point close to (0,0) is p1 diff --git a/src/main/resources/assets/skintypefix/lang/zh_cn.json b/src/main/resources/assets/skintypefix/lang/zh_cn.json index c9a764a..130f646 100644 --- a/src/main/resources/assets/skintypefix/lang/zh_cn.json +++ b/src/main/resources/assets/skintypefix/lang/zh_cn.json @@ -1,5 +1,5 @@ { "modmenu.nameTranslation.skintypefix": "皮肤类型修复", "modmenu.summaryTranslation.skintypefix": "为部分玩家修复错误的皮肤类型。", - "modmenu.descriptionTranslation.skintypefix": "修复部分玩家的皮肤类型与实际皮肤文件的皮肤类型不匹配的问题。" + "modmenu.descriptionTranslation.skintypefix": "修复部分玩家的皮肤类型与实际皮肤文件的实际皮肤类型不匹配的问题。" } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 793180c..2f26524 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,36 +1,36 @@ { - "schemaVersion": 1, - "id": "skintypefix", - "version": "${version}", - "name": "Skin Type Fix", - "description": "Fix wrong skin type for some players.", - "authors": [ - "Puqns67" - ], - "contact": { - "homepage": "https://modrinth.com/project/skintypefix", - "sources": "https://github.com/Puqns67/SkinTypeFix" - }, - "license": "GPL-3.0-or-later", - "icon": "assets/skintypefix/icon.png", - "environment": "client", - "entrypoints": { - "client": [ - "icu.puqns67.skintypefix.SkinTypeFix" - ] - }, - "mixins": [ - { - "config": "skintypefix.mixins.json", - "environment": "client" - } - ], - "depends": { - "fabricloader": ">=0.15.11", - "minecraft": "~1.20.6", - "java": ">=21" - }, - "suggests": { - "another-mod": "*" + "schemaVersion": 1, + "id": "${mod_id}", + "name": "${mod_name}", + "version": "${mod_version}", + "description": "${mod_description}", + "authors": [ + "Puqns67" + ], + "contact": { + "homepage": "https://modrinth.com/project/skintypefix", + "sources": "https://github.com/Puqns67/SkinTypeFix" + }, + "license": "${mod_license}", + "icon": "assets/skintypefix/icon.png", + "environment": "client", + "entrypoints": { + "client": [ + "icu.puqns67.skintypefix.SkinTypeFix" + ] + }, + "mixins": [ + { + "config": "skintypefix.mixins.json", + "environment": "client" } + ], + "depends": { + "java": ">=${java_version}", + "minecraft": "~${minecraft_version}", + "fabricloader": ">=${fabric_version}" + }, + "suggests": { + "another-mod": "*" + } } \ No newline at end of file diff --git a/src/main/resources/skintypefix.mixins.json b/src/main/resources/skintypefix.mixins.json index a3e01c4..e85c430 100644 --- a/src/main/resources/skintypefix.mixins.json +++ b/src/main/resources/skintypefix.mixins.json @@ -1,12 +1,12 @@ { - "required": true, - "package": "icu.puqns67.skintypefix.mixin", - "compatibilityLevel": "JAVA_21", - "injectors": { - "defaultRequire": 1 - }, - "client": [ - "PlayerSkinProviderMixin", - "PlayerSkinTextureMixin" - ] + "package": "icu.puqns67.skintypefix.mixin.patch", + "client": [ + "HttpTextureMixin", + "SkinManagerMixin" + ], + "compatibilityLevel": "JAVA_21", + "injectors": { + "defaultRequire": 1 + }, + "required": true } \ No newline at end of file