diff --git a/.gitignore b/.gitignore index 001d86c..8e68661 100644 --- a/.gitignore +++ b/.gitignore @@ -21,10 +21,14 @@ hs_err_pid* */.project .project .settings/ +*.launch # gradle .gradle/ build/ +gradle/ +gradlew* +run/ # IDEA .idea/ diff --git a/Common/source/customskinloader/utils/JavaUtil.java b/Common/source/customskinloader/utils/JavaUtil.java index 6e2f5c6..e6e9593 100644 --- a/Common/source/customskinloader/utils/JavaUtil.java +++ b/Common/source/customskinloader/utils/JavaUtil.java @@ -28,7 +28,7 @@ public class JavaUtil { } catch (Exception ignored) { } } - return (URL[]) urls.toArray(); + return urls.toArray(new URL[0]); } } } diff --git a/Fabric/Fabric.srg b/Fabric/Fabric.srg new file mode 100644 index 0000000..6894b8c --- /dev/null +++ b/Fabric/Fabric.srg @@ -0,0 +1,40 @@ +CL: net/minecraft/client/Minecraft net/minecraft/class_310 +CL: net/minecraft/client/multiplayer/ServerData net/minecraft/class_642 +CL: net/minecraft/client/renderer/IImageBuffer net/minecraft/class_760 +CL: net/minecraft/client/renderer/ThreadDownloadImageData net/minecraft/class_1046 +CL: net/minecraft/client/renderer/texture/ITextureObject net/minecraft/class_1062 +CL: net/minecraft/client/renderer/texture/NativeImage net/minecraft/class_1011 +CL: net/minecraft/client/renderer/texture/SimpleTexture net/minecraft/class_1049 +CL: net/minecraft/client/renderer/texture/TextureManager net/minecraft/class_1060 +CL: net/minecraft/client/resources/DefaultPlayerSkin net/minecraft/class_1068 +CL: net/minecraft/client/resources/SkinManager net/minecraft/class_1071 +CL: net/minecraft/client/resources/SkinManager$SkinAvailableCallback net/minecraft/class_1071$class_1072 +CL: net/minecraft/util/ResourceLocation net/minecraft/class_2960 +CL: net/minecraft/util/Session net/minecraft/class_320 +CL: net/minecraft/util/StringUtils net/minecraft/class_3544 +FD: net/minecraft/client/Minecraft/field_71412_D net/minecraft/class_310/field_1697 +FD: net/minecraft/client/multiplayer/ServerData/field_78845_b net/minecraft/class_642/field_3761 +MD: net/minecraft/client/Minecraft/addScheduledTask (Ljava/lang/Runnable;)V net/minecraft/class_310/execute (Ljava/lang/Runnable;)V +MD: net/minecraft/client/Minecraft/func_110432_I ()Lnet/minecraft/util/Session; net/minecraft/class_310/method_1548 ()Lnet/minecraft/class_320; +MD: net/minecraft/client/Minecraft/func_110434_K ()Lnet/minecraft/client/renderer/texture/TextureManager; net/minecraft/class_310/method_1531 ()Lnet/minecraft/class_1060; +MD: net/minecraft/client/Minecraft/func_147104_D ()Lnet/minecraft/client/multiplayer/ServerData; net/minecraft/class_310/method_1558 ()Lnet/minecraft/class_642; +MD: net/minecraft/client/Minecraft/func_152342_ad ()Lnet/minecraft/client/resources/SkinManager; net/minecraft/class_310/method_1582 ()Lnet/minecraft/class_1071; +MD: net/minecraft/client/Minecraft/func_152347_ac ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; net/minecraft/class_310/method_1495 ()Lcom/mojang/authlib/minecraft/MinecraftSessionService; +MD: net/minecraft/client/Minecraft/func_71410_x ()Lnet/minecraft/client/Minecraft; net/minecraft/class_310/method_1551 ()Lnet/minecraft/class_310; +MD: net/minecraft/client/renderer/IImageBuffer/func_152634_a ()V net/minecraft/class_760/method_3238 ()V +MD: net/minecraft/client/renderer/IImageBuffer/func_195786_a (Lnet/minecraft/client/renderer/texture/NativeImage;)Lnet/minecraft/client/renderer/texture/NativeImage; net/minecraft/class_760/method_3237 (Lnet/minecraft/class_1011;)Lnet/minecraft/class_1011; +MD: net/minecraft/client/renderer/texture/NativeImage/func_195699_a (IIIIIIZZ)V net/minecraft/class_1011/method_4304 (IIIIIIZZ)V +MD: net/minecraft/client/renderer/texture/NativeImage/func_195700_a (III)V net/minecraft/class_1011/method_4305 (III)V +MD: net/minecraft/client/renderer/texture/NativeImage/func_195702_a ()I net/minecraft/class_1011/method_4307 ()I +MD: net/minecraft/client/renderer/texture/NativeImage/func_195703_a (Lnet/minecraft/client/renderer/texture/NativeImage;)V net/minecraft/class_1011/method_4317 (Lnet/minecraft/class_1011;)V +MD: net/minecraft/client/renderer/texture/NativeImage/func_195709_a (II)I net/minecraft/class_1011/method_4315 (II)I +MD: net/minecraft/client/renderer/texture/NativeImage/func_195714_b ()I net/minecraft/class_1011/method_4323 ()I +MD: net/minecraft/client/renderer/texture/NativeImage/func_195715_a (IIIII)V net/minecraft/class_1011/method_4326 (IIIII)V +MD: net/minecraft/client/renderer/texture/TextureManager/func_110579_a (Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/client/renderer/texture/ITextureObject;)Z net/minecraft/class_1060/method_4616 (Lnet/minecraft/class_2960;Lnet/minecraft/class_1062;)Z +MD: net/minecraft/client/renderer/texture/TextureManager/func_110581_b (Lnet/minecraft/util/ResourceLocation;)Lnet/minecraft/client/renderer/texture/ITextureObject; net/minecraft/class_1060/method_4619 (Lnet/minecraft/class_2960;)Lnet/minecraft/class_1062; +MD: net/minecraft/client/resources/DefaultPlayerSkin/func_177334_a (Ljava/util/UUID;)Lnet/minecraft/util/ResourceLocation; net/minecraft/class_1068/method_4648 (Ljava/util/UUID;)Lnet/minecraft/class_2960; +MD: net/minecraft/client/resources/DefaultPlayerSkin/func_177335_a ()Lnet/minecraft/util/ResourceLocation; net/minecraft/class_1068/method_4649 ()Lnet/minecraft/class_2960; +MD: net/minecraft/client/resources/SkinManager/func_152790_a (Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V net/minecraft/class_1071/method_4652 (Lcom/mojang/authlib/GameProfile;Lnet/minecraft/class_1071$class_1072;Z)V +MD: net/minecraft/client/resources/SkinManager$SkinAvailableCallback/func_180521_a (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/util/ResourceLocation;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V net/minecraft/class_1071$class_1072/onSkinTextureAvailable (Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/class_2960;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V +MD: net/minecraft/util/Session/func_148256_e ()Lcom/mojang/authlib/GameProfile; net/minecraft/class_320/method_1677 ()Lcom/mojang/authlib/GameProfile; +MD: net/minecraft/util/StringUtils/func_76338_a (Ljava/lang/String;)Ljava/lang/String; net/minecraft/class_3544/method_15440 (Ljava/lang/String;)Ljava/lang/String; \ No newline at end of file diff --git a/Fabric/build.gradle b/Fabric/build.gradle new file mode 100644 index 0000000..618a80b --- /dev/null +++ b/Fabric/build.gradle @@ -0,0 +1,100 @@ +//apply plugin: 'fabric-loom' +apply from: project.file("fabric.compact.gradle") +apply plugin: 'net.minecraftforge.gradle.forge' +apply from: rootProject.file("BuildScripts/version.gradle") + +archivesBaseName = project.archives_base_name +version = getCSLVersion() +group = project.maven_group +project.extensions.getByName("minecraftfabric").refmapName = "customskinloader.refmap.json" + +ext.MINECRAFT_VERSION = "1.12.2" +ext.FORGE_VERSION = "14.23.5.2768" +ext.MAPPING_VERSION = "stable_39" +ext.MINECRAFT_FULL_VERSIONS = "1.14,1.14.1" + +sourceCompatibility = targetCompatibility = 1.6 +compileJava { + sourceCompatibility = targetCompatibility = 1.6 +} + +sourceSets { + main { + java { + //Common + srcDir '../Common/source' + //Fabric + srcDir 'source' + } + resources { + //Common + srcDir '../Common/resource' + exclude 'Profile.json' + //Fabric + srcDir 'resource' + } + } +} + +minecraft { + version = MINECRAFT_VERSION + "-" + FORGE_VERSION + runDir = "run" + mappings = MAPPING_VERSION + + replace '@MOD_VERSION@', rootProject.ext.config.version + replace '@MOD_FULL_VERSION@', project.version + replaceIn 'CustomSkinLoader.java' +} + +dependencies { + minecraft "com.mojang:minecraft:${project.minecraft_version}" + mappings "net.fabricmc:yarn:${project.yarn_mappings}" + modCompile "net.fabricmc:fabric-loader:${project.loader_version}" + modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" +} + +jar { + exclude 'net/**' +} + +processResources { + expand([ + modVersion : rootProject.ext.config.version, + modFullVersion: project.version, + mcVersion : MINECRAFT_VERSION, + mcFullVersions: MINECRAFT_FULL_VERSIONS, + forgeVersion : FORGE_VERSION, + gitVersion : System.getenv("CIRCLE_SHA1"), + buildUrl : System.getenv("CIRCLE_BUILD_URL") + ]) +} + +apply from: rootProject.file("BuildScripts/remap.gradle") +ext.configFile = file "gradle.properties" +configFile.withReader { + def prop = new Properties() + prop.load(it) + project.ext.config = new ConfigSlurper().parse prop +} +task afterBuild { + doLast { + //renameSrgJar + def file0 = file("build/libs/${archivesBaseName}-${version}.jar") + def file1 = file("build/libs/${archivesBaseName}-${version}-srg.jar") + file0.renameTo(file1) + + //reobfSrgToNotch + reobfSrgToNotch() + + //copyBuildFile + copy { + from 'build/libs' + into '../build/libs' + include '**/*.jar' + exclude '**/*-dev.jar' + exclude '**/*-srg.jar' + exclude '**/*-sources.jar' + } + } +} +build.finalizedBy afterBuild \ No newline at end of file diff --git a/Fabric/fabric.compact.gradle b/Fabric/fabric.compact.gradle new file mode 100644 index 0000000..4e0307d --- /dev/null +++ b/Fabric/fabric.compact.gradle @@ -0,0 +1,216 @@ +buildscript { + repositories { + mavenCentral() + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + } + dependencies { + classpath 'fabric-loom:fabric-loom.gradle.plugin:0.2.2-SNAPSHOT' + } +} + +import java.nio.file.Path; + +import com.google.common.collect.ImmutableMap; +import net.fabricmc.loom.AbstractPlugin; +import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.LoomGradlePlugin; +import net.fabricmc.loom.providers.MappingsProvider; +import net.fabricmc.loom.providers.MinecraftLibraryProvider; +import net.fabricmc.loom.task.*; +import net.fabricmc.loom.task.fernflower.FernFlowerTask; +import net.fabricmc.loom.util.Constants; + +// From: https://github.com/FabricMC/fabric-loom/blob/dev/0.2.2/src/main/java/net/fabricmc/loom/AbstractPlugin.java +// https://github.com/FabricMC/fabric-loom/blob/dev/0.2.2/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java +public class Fabric_Compact extends LoomGradlePlugin { + @Override + public void apply(Project target) { + // AbstractPlugin.java: + this.project = target; + + project.getLogger().lifecycle("Fabric Loom: " + AbstractPlugin.class.getPackage().getImplementationVersion()); + + // Apply default plugins + project.apply(ImmutableMap.of("plugin", "java")); + project.apply(ImmutableMap.of("plugin", "eclipse")); + project.apply(ImmutableMap.of("plugin", "idea")); + + //project.getExtensions().create("minecraft", LoomGradleExtension.class, project); + project.getExtensions().create("minecraftfabric", LoomGradleExtension.class, project); + + LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); + // Force add Mojang repository + addMavenRepo(target, "Mojang", "https://libraries.minecraft.net/"); + + Configuration compileModsConfig = project.getConfigurations().maybeCreate(Constants.COMPILE_MODS); + compileModsConfig.setTransitive(true); + Configuration compileModsMappedConfig = project.getConfigurations().maybeCreate(Constants.COMPILE_MODS_MAPPED); + compileModsMappedConfig.setTransitive(false); // Don't get transitive deps of already remapped mods + Configuration minecraftNamedConfig = project.getConfigurations().maybeCreate(Constants.MINECRAFT_NAMED); + minecraftNamedConfig.setTransitive(false); // The launchers do not recurse dependencies + Configuration minecraftIntermediaryConfig = project.getConfigurations().maybeCreate(Constants.MINECRAFT_INTERMEDIARY); + minecraftIntermediaryConfig.setTransitive(false); + Configuration minecraftDependenciesConfig = project.getConfigurations().maybeCreate(Constants.MINECRAFT_DEPENDENCIES); + minecraftDependenciesConfig.setTransitive(false); + Configuration minecraftConfig = project.getConfigurations().maybeCreate(Constants.MINECRAFT); + minecraftConfig.setTransitive(false); + + Configuration includeConfig = project.getConfigurations().maybeCreate(Constants.INCLUDE); + includeConfig.setTransitive(false); // Dont get transitive deps + + project.getConfigurations().maybeCreate(Constants.MAPPINGS); + + configureIDEs(); + configureCompile(); + + extendsFrom(Constants.MINECRAFT_NAMED, Constants.MINECRAFT_DEPENDENCIES); + extendsFrom(Constants.MINECRAFT_INTERMEDIARY, Constants.MINECRAFT_DEPENDENCIES); + + extendsFrom(Constants.COMPILE_MODS_MAPPED, Constants.MINECRAFT_NAMED); + extendsFrom("compile", Constants.COMPILE_MODS_MAPPED); + extendsFrom("compile", Constants.MAPPINGS); + extendsFrom("annotationProcessor", Constants.COMPILE_MODS_MAPPED); + extendsFrom("annotationProcessor", Constants.MAPPINGS); + + Map> taskMap = project.getAllTasks(true); + for (Map.Entry> entry : taskMap.entrySet()) { + Project project = entry.getKey(); + Set taskSet = entry.getValue(); + for (Task task : taskSet) { + if (task instanceof JavaCompile && !(task.getName().contains("Test")) && !(task.getName().contains("test"))) { + JavaCompile javaCompileTask = (JavaCompile) task; + javaCompileTask.doFirst({ task1 -> + project.getLogger().lifecycle(":setting java compiler args"); + try { + javaCompileTask.getOptions().getCompilerArgs().add("-AinMapFileNamedIntermediary=" + extension.getMappingsProvider().MAPPINGS_TINY.getCanonicalPath()); + javaCompileTask.getOptions().getCompilerArgs().add("-AoutMapFileNamedIntermediary=" + extension.getMappingsProvider().MAPPINGS_MIXIN_EXPORT.getCanonicalPath()); + javaCompileTask.getOptions().getCompilerArgs().add("-AoutRefMapFile=" + new File(javaCompileTask.getDestinationDir(), extension.getRefmapName()).getCanonicalPath()); + javaCompileTask.getOptions().getCompilerArgs().add("-AdefaultObfuscationEnv=named:intermediary"); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + } + } + + configureMaven(); + + // LoomGradlePlugin.java: + TaskContainer tasks = target.getTasks(); + + tasks.register("cleanLoomBinaries", CleanLoomBinaries.class); + tasks.register("cleanLoomMappings", CleanLoomMappings.class); + + tasks.register("migrateMappings", MigrateMappingsTask.class, { t -> + t.getOutputs().upToDateWhen({ o -> false }); + }); + + tasks.register("remapJar", RemapJar.class); + + tasks.register("genSourcesDecompile", FernFlowerTask.class, { t -> + t.getOutputs().upToDateWhen({ o -> false }); + }); + + tasks.register("genSourcesRemapLineNumbers", RemapLineNumbersTask.class, { t -> + t.getOutputs().upToDateWhen({ o -> false }); + }); + + tasks.register("genSources", { t -> + t.getOutputs().upToDateWhen({ o -> false }); + }); + + project.afterEvaluate({ p -> + AbstractDecompileTask decompileTask = (AbstractDecompileTask) p.getTasks().getByName("genSourcesDecompile"); + RemapLineNumbersTask remapLineNumbersTask = (RemapLineNumbersTask) p.getTasks().getByName("genSourcesRemapLineNumbers"); + Task genSourcesTask = p.getTasks().getByName("genSources"); + + genSourcesTask.dependsOn(remapLineNumbersTask); + remapLineNumbersTask.dependsOn(decompileTask); + + Project project = this.getProject(); + LoomGradleExtension loomGradleExtension = project.getExtensions().getByType(LoomGradleExtension.class); + MinecraftLibraryProvider libraryProvider = loomGradleExtension.getMinecraftProvider().libraryProvider; + MappingsProvider mappingsProvider = loomGradleExtension.getMappingsProvider(); + File mappedJar = mappingsProvider.mappedProvider.getMappedJar(); + File linemappedJar = getMappedByproduct(project, "-linemapped.jar"); + File sourcesJar = getMappedByproduct(project, "-sources.jar"); + File linemapFile = getMappedByproduct(project, "-sources.lmap"); + + decompileTask.setInput(mappedJar); + decompileTask.setOutput(sourcesJar); + decompileTask.setLineMapFile(linemapFile); + decompileTask.setLibraries(libraryProvider.getLibraries()); + + remapLineNumbersTask.setInput(mappedJar); + remapLineNumbersTask.setLineMapFile(linemapFile); + remapLineNumbersTask.setOutput(linemappedJar); + + Path mappedJarPath = mappedJar.toPath(); + Path linemappedJarPath = linemappedJar.toPath(); + + genSourcesTask.doLast({ tt -> + if (Files.exists(linemappedJarPath)) { + try { + Files.deleteIfExists(mappedJarPath); + Files.copy(linemappedJarPath, mappedJarPath); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }); + }); + + tasks.register("downloadAssets", DownloadAssetsTask.class); + + tasks.register("genIdeaWorkspace", GenIdeaProjectTask.class, { t -> + t.dependsOn("idea", "downloadAssets"); + t.setGroup("ide"); + }); + + tasks.register("genEclipseRuns", GenEclipseRunsTask.class, { t -> + t.dependsOn("downloadAssets"); + t.setGroup("ide"); + }); + + tasks.register("vscode", GenVsCodeProjectTask.class, { t -> + t.dependsOn("downloadAssets"); + t.setGroup("ide"); + }); + + tasks.register("remapSourcesJar", RemapSourcesJar.class); + + // runClient + tasks.register("runFabricClient", RunClientTask.class, { t -> + t.dependsOn("buildNeeded", "downloadAssets"); + t.setGroup("minecraftMapped"); + }); + + // runServer + tasks.register("runFabricServer", RunServerTask.class, { t -> + t.dependsOn("buildNeeded"); + t.setGroup("minecraftMapped"); + }); + } + + private void extendsFrom(String a, String b) { + project.getConfigurations().getByName(a).extendsFrom(project.getConfigurations().getByName(b)); + } + + private static File getMappedByproduct(Project project, String suffix) { + LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); + MappingsProvider mappingsProvider = extension.getMappingsProvider(); + File mappedJar = mappingsProvider.mappedProvider.getMappedJar(); + String path = mappedJar.getAbsolutePath(); + if (!path.toLowerCase(Locale.ROOT).endsWith(".jar")) { + throw new RuntimeException("Invalid mapped JAR path: " + path); + } + + return new File(path.substring(0, path.length() - 4) + suffix); + } +} + +apply plugin: Fabric_Compact \ No newline at end of file diff --git a/Fabric/gradle.properties b/Fabric/gradle.properties new file mode 100644 index 0000000..61ea7fb --- /dev/null +++ b/Fabric/gradle.properties @@ -0,0 +1,15 @@ +# Fabric Properties + # check these on https://fabricmc.net/use + minecraft_version=1.14.1 + yarn_mappings=1.14.1+build.5 + loader_version=0.4.7+build.147 + +# Mod Properties + maven_group = customskinloader + archives_base_name = CustomSkinLoader_Fabric + +# Dependencies + # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric + fabric_version=0.3.0-pre+build.156 + +srg_notch_map=Fabric.srg diff --git a/Fabric/resource/customskinloader.mixins.json b/Fabric/resource/customskinloader.mixins.json new file mode 100644 index 0000000..5df9b65 --- /dev/null +++ b/Fabric/resource/customskinloader.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "package": "customskinloader.fabric.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + ], + "client": [ + "MixinPlayerSkinProvider" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/Fabric/resource/fabric.mod.json b/Fabric/resource/fabric.mod.json new file mode 100644 index 0000000..75bcbba --- /dev/null +++ b/Fabric/resource/fabric.mod.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "id": "customskinloader", + "version": "${modFullVersion}", + + "name": "CustomSkinLoader", + "description": "Custom Skin Loader for Minecraft", + "authors": ["xfl03", "JLChnToZ"], + "contact": { + "homepage": "https://github.com/xfl03/MCCustomSkinLoader", + "issues": "https://github.com/xfl03/MCCustomSkinLoader/issues", + "sources": "https://github.com/xfl03/MCCustomSkinLoader" + }, + + "license": "GPLv3", + + "environment": "client", + "entrypoints": { + "main": [ + + ] + }, + "mixins": [ + "customskinloader.mixins.json" + ], + + "requires": { + "fabricloader": ">=0.4.0", + "fabric": "*" + }, + "suggests": { + "flamingo": "*" + } +} diff --git a/Fabric/source/customskinloader/fabric/mixin/MixinPlayerSkinProvider.java b/Fabric/source/customskinloader/fabric/mixin/MixinPlayerSkinProvider.java new file mode 100644 index 0000000..b0eb976 --- /dev/null +++ b/Fabric/source/customskinloader/fabric/mixin/MixinPlayerSkinProvider.java @@ -0,0 +1,48 @@ +package customskinloader.fabric.mixin; + +import java.io.File; +import java.util.Map; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import customskinloader.fake.FakeSkinManager; +import net.minecraft.client.texture.PlayerSkinProvider; +import net.minecraft.client.texture.TextureManager; +import net.minecraft.client.resources.SkinManager; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = {PlayerSkinProvider.class}) +public abstract class MixinPlayerSkinProvider { + private FakeSkinManager fakeManager; + + @Inject(method = "", at = @At("RETURN")) + private void initFakeSkinManager(TextureManager textureManagerInstance, File skinCacheDirectory, MinecraftSessionService sessionService, CallbackInfo callbackInfo) { + this.fakeManager = new FakeSkinManager((net.minecraft.client.renderer.texture.TextureManager) (Object) textureManagerInstance, skinCacheDirectory, sessionService); + } + + @Overwrite + public Identifier loadSkin(MinecraftProfileTexture profileTexture, MinecraftProfileTexture.Type textureType) { + return this.loadSkin(profileTexture, textureType, null); + } + + @Overwrite + public Identifier loadSkin(MinecraftProfileTexture profileTexture, MinecraftProfileTexture.Type textureType, PlayerSkinProvider.SkinTextureAvailableCallback skinAvailableCallback) { + return (Identifier) (Object) this.fakeManager.loadSkin(profileTexture, textureType, (SkinManager.SkinAvailableCallback) skinAvailableCallback); + } + + @Overwrite + public void loadSkin(GameProfile profile, PlayerSkinProvider.SkinTextureAvailableCallback skinAvailableCallback, boolean requireSecure) { + this.fakeManager.loadProfileTextures(profile, (SkinManager.SkinAvailableCallback) skinAvailableCallback, requireSecure); + } + + @Overwrite + public Map getTextures(GameProfile profile) { + return this.fakeManager.loadSkinFromCache(profile); + } +} diff --git a/Fabric/source/net/minecraft/client/Minecraft.java b/Fabric/source/net/minecraft/client/Minecraft.java new file mode 100644 index 0000000..0449b00 --- /dev/null +++ b/Fabric/source/net/minecraft/client/Minecraft.java @@ -0,0 +1,40 @@ +package net.minecraft.client; + +import com.mojang.authlib.minecraft.MinecraftSessionService; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.resources.SkinManager; +import net.minecraft.util.Session; + +import java.io.File; + +public class Minecraft { + public File gameDir = null; + + public static Minecraft getMinecraft() { + return null; + } + + public SkinManager getSkinManager() { + return null; + } + + public TextureManager getTextureManager() { + return null; + } + + public MinecraftSessionService getSessionService() { + return null; + } + + public Session getSession() { + return null; + } + + public ServerData getCurrentServerData() { + return null; + } + + public void addScheduledTask(Runnable r) { + } +} diff --git a/build.gradle b/build.gradle index 3af89d6..949f566 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'base' +apply plugin: 'java' ext.configFile = file "build.properties" configFile.withReader { @@ -10,18 +11,23 @@ buildscript { repositories { mavenCentral() jcenter() + maven { + name = "fabric" + url = "https://maven.fabricmc.net/" + } maven { name = "forge" url = "http://files.minecraftforge.net/maven" } } dependencies { + classpath 'fabric-loom:fabric-loom.gradle.plugin:0.2.2-SNAPSHOT' classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' } } subprojects { - if (!project.name.toLowerCase().contains("forge")) + if (!project.name.toLowerCase().contains("forge") && !project.name.toLowerCase().contains("fabric")) apply from: rootProject.file('common.gradle') } diff --git a/settings.gradle b/settings.gradle index 774193a..302628c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,3 +4,6 @@ include "1.14" //Universal Forge Edition for [1.8,) include "Forge" + +//Fabric Edition for 1.14.x +include "Fabric" \ No newline at end of file