diff options
| author | Wyvest <45589059+Wyvest@users.noreply.github.com> | 2022-07-02 06:12:23 +0700 |
|---|---|---|
| committer | Wyvest <45589059+Wyvest@users.noreply.github.com> | 2022-07-02 06:12:23 +0700 |
| commit | d4bb5a94308d4379ef3d6cc7b9221ea0d98ff051 (patch) | |
| tree | 9bb9b53e2823f73084780673763504f4098bae69 /versions | |
| parent | d2b1d57120bb51e76191302a58d935afe52b89df (diff) | |
| download | OneConfig-d4bb5a94308d4379ef3d6cc7b9221ea0d98ff051.tar.gz OneConfig-d4bb5a94308d4379ef3d6cc7b9221ea0d98ff051.tar.bz2 OneConfig-d4bb5a94308d4379ef3d6cc7b9221ea0d98ff051.zip | |
Separate Minecraft dependant and non-dependant code
Diffstat (limited to 'versions')
46 files changed, 2057 insertions, 0 deletions
diff --git a/versions/build.gradle.kts b/versions/build.gradle.kts new file mode 100644 index 0000000..939e61b --- /dev/null +++ b/versions/build.gradle.kts @@ -0,0 +1,306 @@ +import gg.essential.gradle.util.RelocationTransform.Companion.registerRelocationAttribute +import gg.essential.gradle.util.noServerRunConfigs +import gg.essential.gradle.util.prebundle +import net.fabricmc.loom.task.RemapSourcesJarTask + + +plugins { + kotlin("jvm") + id("gg.essential.multi-version") + id("gg.essential.defaults.repo") + id("gg.essential.defaults.java") + id("gg.essential.defaults.loom") + id("net.kyori.blossom") version "1.3.0" + id("org.jetbrains.dokka") version "1.6.21" + id("maven-publish") + id("signing") + java +} + +kotlin.jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(8)) +} + +java { + withSourcesJar() +} + +val mod_name: String by project +val mod_version: String by project +val mod_id: String by project + +preprocess { + vars.put("MODERN", if (project.platform.mcMinor >= 16) 1 else 0) +} + +blossom { + replaceToken("@VER@", mod_version) + replaceToken("@NAME@", mod_name) + replaceToken("@ID@", mod_id) +} + +version = mod_version +group = "cc.polyfrost" +base { + archivesName.set("$mod_id-$platform") +} +loom { + noServerRunConfigs() + if (project.platform.isLegacyForge) { + launchConfigs.named("client") { + arg("--tweakClass", "cc.polyfrost.oneconfig.internal.plugin.asm.OneConfigTweaker") + property("mixin.debug.export", "true") + property("debugBytecode", "true") + } + } + if (project.platform.isForge) { + forge { + mixinConfig("mixins.${mod_id}.json") + } + } + mixin.defaultRefmapName.set("mixins.${mod_id}.refmap.json") +} + +repositories { + maven("https://repo.polyfrost.cc/releases") +} + +val relocated = registerRelocationAttribute("relocate") { + relocate("gg.essential", "cc.polyfrost.oneconfig.libs") + relocate("me.kbrewster", "cc.polyfrost.oneconfig.libs") + relocate("com.github.benmanes", "cc.polyfrost.oneconfig.libs") + relocate("com.google", "cc.polyfrost.oneconfig.libs") + relocate("org.checkerframework", "cc.polyfrost.oneconfig.libs") + remapStringsIn("com.github.benmanes.caffeine.cache.LocalCacheFactory") + remapStringsIn("com.github.benmanes.caffeine.cache.NodeFactory") +} + +val shadeRelocated: Configuration by configurations.creating { + attributes { attribute(relocated, true) } +} + +val shade: Configuration by configurations.creating { + configurations.api.get().extendsFrom(this) +} + +val shadeNoPom: Configuration by configurations.creating + +sourceSets { + main { + output.setResourcesDir(java.classesDirectory) + } +} + +dependencies { + compileOnly("gg.essential:vigilance-$platform:222") { + isTransitive = false + } + + shadeRelocated("gg.essential:universalcraft-$platform:211") { + isTransitive = false + } + + shadeRelocated("com.github.KevinPriv:keventbus:c52e0a2ea0") { + isTransitive = false + } + + @Suppress("GradlePackageUpdate") + shadeRelocated("com.github.ben-manes.caffeine:caffeine:2.9.3") + + // for other mods and universalcraft + val kotlinVersion: String by project + val coroutinesVersion: String by project + val serializationVersion: String by project + val atomicfuVersion: String by project + shade("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion") + shade("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") + shade("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion") + shade("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") + + shade("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion") + shade("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion") + shade("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:$coroutinesVersion") + shade("org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:$serializationVersion") + shade("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:$serializationVersion") + shade("org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm:$serializationVersion") + shade("org.jetbrains.kotlinx:atomicfu-jvm:$atomicfuVersion") + + shade("org.spongepowered:mixin:0.7.11-SNAPSHOT") { + isTransitive = false + } + shadeNoPom(project(":")) { + isTransitive = false + } + shade("cc.polyfrost:lwjgl:1.0.0-alpha1") + shadeNoPom(prebundle(shadeRelocated)) + + dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.6.21") + + configurations.named(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME) { extendsFrom(shadeNoPom) } + configurations.named(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME) { extendsFrom(shadeNoPom) } +} + +tasks { + processResources { + inputs.property("id", mod_id) + inputs.property("name", mod_name) + val java = if (project.platform.mcMinor >= 18) { + 17 + } else { + if (project.platform.mcMinor == 17) 16 else 8 + } + val compatLevel = "JAVA_${java}" + inputs.property("java", java) + inputs.property("java_level", compatLevel) + inputs.property("version", mod_version) + inputs.property("mcVersionStr", project.platform.mcVersionStr) + filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) { + expand( + mapOf( + "id" to mod_id, + "name" to mod_name, + "java" to java, + "java_level" to compatLevel, + "version" to mod_version, + "mcVersionStr" to project.platform.mcVersionStr + ) + ) + } + filesMatching("fabric.mod.json") { + expand( + mapOf( + "id" to mod_id, + "name" to mod_name, + "java" to java, + "java_level" to compatLevel, + "version" to mod_version, + "mcVersionStr" to project.platform.mcVersionStr.substringBeforeLast(".") + ".x" + ) + ) + } + } + + withType(Jar::class.java) { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + if (project.platform.isFabric) { + exclude("mcmod.info", "mods.toml") + } else { + exclude("fabric.mod.json") + if (project.platform.isLegacyForge) { + exclude("mods.toml") + exclude("META-INF/versions/**") + exclude("**/module-info.class") + exclude("**/package-info.class") + } else { + exclude("mcmod.info") + } + } + if (!name.contains("sourcesjar", ignoreCase = true) || !name.contains("dokka", ignoreCase = true)) { + exclude("**/**_Test.**") + exclude("**/**_Test$**.**") + } + } + + remapJar { + archiveClassifier.set("full") + } + + fun Jar.excludeInternal() { + exclude("**/internal/**") + } + jar { + dependsOn(shadeNoPom, shade) + from({ ArrayList<File>().also { it.addAll(shadeNoPom); it.addAll(shade) }.map { if (it.isDirectory) it else zipTree(it) } }) + manifest { + attributes( + mapOf( + "ModSide" to "CLIENT", + "ForceLoadAsMod" to true, + "TweakOrder" to "0", + "MixinConfigs" to "mixins.oneconfig.json", + "TweakClass" to "cc.polyfrost.oneconfig.internal.plugin.asm.OneConfigTweaker" + ) + ) + } + excludeInternal() + archiveClassifier.set("") + } + dokkaHtml.configure { + outputDirectory.set(buildDir.resolve("dokka")) + moduleName.set("OneConfig $platform") + moduleVersion.set(mod_version) + dokkaSourceSets { + configureEach { + jdkVersion.set(8) + //reportUndocumented.set(true) + } + } + doLast { + val outputFile = outputDirectory.get().resolve("images/logo-icon.svg") + if (outputFile.exists()) { + outputFile.delete() + } + val inputFile = project.rootDir.resolve("src/main/resources/assets/oneconfig/icons/OneConfig.svg") + inputFile.copyTo(outputFile) + } + } + val dokkaJar = create("dokkaJar", Jar::class.java) { + archiveClassifier.set("dokka") + group = "build" + dependsOn(dokkaHtml) + from(layout.buildDirectory.dir("dokka")) + } + named<Jar>("sourcesJar") { + from(project(":").sourceSets.main.map { it.allSource }) + dependsOn(dokkaJar) + excludeInternal() + archiveClassifier.set("sources") + doFirst { + archiveClassifier.set("sources") + } + } + withType<RemapSourcesJarTask> { + enabled = false + } +} + +publishing { + publications { + register<MavenPublication>("oneconfig-$platform") { + groupId = "cc.polyfrost" + artifactId = base.archivesName.get() + + artifact(tasks["jar"]) + artifact(tasks["remapJar"]) + artifact(tasks["sourcesJar"]) + artifact(tasks["dokkaJar"]) + } + } + + repositories { + maven { + name = "releases" + url = uri("https://repo.polyfrost.cc/releases") + credentials(PasswordCredentials::class) + authentication { + create<BasicAuthentication>("basic") + } + } + maven { + name = "snapshots" + url = uri("https://repo.polyfrost.cc/snapshots") + credentials(PasswordCredentials::class) + authentication { + create<BasicAuthentication>("basic") + } + } + maven { + name = "private" + url = uri("https://repo.polyfrost.cc/private") + credentials(PasswordCredentials::class) + authentication { + create<BasicAuthentication>("basic") + } + } + } +}
\ No newline at end of file diff --git a/versions/root.gradle.kts b/versions/root.gradle.kts new file mode 100644 index 0000000..f23a159 --- /dev/null +++ b/versions/root.gradle.kts @@ -0,0 +1,9 @@ +plugins { + kotlin("jvm") version "1.6.21" apply false + id("gg.essential.multi-version.root") + id("io.github.juuxel.loom-quiltflower-mini") version "171a6e2e49" apply false +} + +preprocess { + "1.8.9-forge"(10809, "srg") {} +}
\ No newline at end of file diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ChatReceiveEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ChatReceiveEvent.java new file mode 100644 index 0000000..6585729 --- /dev/null +++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ChatReceiveEvent.java @@ -0,0 +1,22 @@ +package cc.polyfrost.oneconfig.events.event; + +import cc.polyfrost.oneconfig.libs.universal.wrappers.message.UTextComponent; +import net.minecraft.util.IChatComponent; + +/** + * Called when a chat message is received. + */ +public class ChatReceiveEvent extends CancellableEvent { + /** + * The message that was received. + */ + public final IChatComponent message; + + public ChatReceiveEvent(IChatComponent message) { + this.message = message; + } + + public String getFullyUnformattedMessage() { + return UTextComponent.Companion.stripFormatting(message.getUnformattedText()); + } +} diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ReceivePacketEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ReceivePacketEvent.java new file mode 100644 index 0000000..17bc16d --- /dev/null +++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ReceivePacketEvent.java @@ -0,0 +1,11 @@ +package cc.polyfrost.oneconfig.events.event; + +import net.minecraft.network.Packet; + +public class ReceivePacketEvent extends CancellableEvent { + public final Packet<?> packet; + + public ReceivePacketEvent(Packet<?> packet) { + this.packet = packet; + } +} diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ScreenOpenEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ScreenOpenEvent.java new file mode 100644 index 0000000..4593638 --- /dev/null +++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ScreenOpenEvent.java @@ -0,0 +1,17 @@ +package cc.polyfrost.oneconfig.events.event; + +import net.minecraft.client.gui.GuiScreen; +import org.jetbrains.annotations.Nullable; + +/** + * Called when a screen is opened or closed. + * If the screen is closed, {@link ScreenOpenEvent#screen} will be null. + */ +public class ScreenOpenEvent extends CancellableEvent { + @Nullable + public final GuiScreen screen; + + public ScreenOpenEvent(@Nullable GuiScreen screen) { + this.screen = screen; + } +} diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/SendPacketEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/SendPacketEvent.java new file mode 100644 index 0000000..3cee784 --- /dev/null +++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/SendPacketEvent.java @@ -0,0 +1,11 @@ +package cc.polyfrost.oneconfig.events.event; + +import net.minecraft.network.Packet; + +public class SendPacketEvent extends CancellableEvent { + public final Packet<?> packet; + + public SendPacketEvent(Packet<?> packet) { + this.packet = packet; + } +} diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/TimerUpdateEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/TimerUpdateEvent.java new file mode 100644 index 0000000..a8b88dc --- /dev/null +++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/TimerUpdateEvent.java @@ -0,0 +1,24 @@ +package cc.polyfrost.oneconfig.events.event; + +import net.minecraft.util.Timer; + +/** + * Called when the {@link Timer} is updated. + * Can be used as an alternative to getting instances of {@link Timer} + * via Mixin or Access Wideners / Transformers + */ +public class TimerUpdateEvent { + /** + * Whether the deltaTicks / renderPartialTicks was updated + */ + public final boolean updatedDeltaTicks; + /** + * The {@link Timer} instance + */ + public final Timer timer; + + public TimerUpdateEvent(Timer timer, boolean updatedDeltaTicks) { + this.timer = timer; + this.updatedDeltaTicks = updatedDeltaTicks; + } +}
\ No newline at end of file diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java new file mode 100644 index 0000000..7ecfe98 --- /dev/null +++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java @@ -0,0 +1,93 @@ +package cc.polyfrost.oneconfig.internal; + +import cc.polyfrost.oneconfig.events.EventManager; +import cc.polyfrost.oneconfig.events.event.ShutdownEvent; +import cc.polyfrost.oneconfig.internal.command.OneConfigCommand; +import cc.polyfrost.oneconfig.internal.config.OneConfigConfig; +import cc.polyfrost.oneconfig.internal.config.Preferences; +import cc.polyfrost.oneconfig.internal.config.core.ConfigCore; +import cc.polyfrost.oneconfig.internal.config.core.KeyBindHandler; +import cc.polyfrost.oneconfig.internal.gui.BlurHandler; +import cc.polyfrost.oneconfig.internal.hud.HudCore; +import cc.polyfrost.oneconfig.libs.eventbus.Subscribe; +import cc.polyfrost.oneconfig.utils.commands.CommandManager; +import cc.polyfrost.oneconfig.utils.gui.GuiUtils; +import cc.polyfrost.oneconfig.utils.hypixel.HypixelUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.File; +import java.util.ServiceLoader; + +/** + * The main class of OneConfig. + */ +@net.minecraftforge.fml.common.Mod(modid = "@ID@", name = "@NAME@", version = "@VER@") +public class OneConfig { + + public OneConfig() { + EventManager.INSTANCE.register(this); + } + + public static final File oneConfigDir = new File("./OneConfig"); + public static final Logger LOGGER = LogManager.getLogger("@NAME@"); + private static boolean preLaunched = false; + private static boolean initialized = false; + private static boolean isObfuscated = true; + + /** + * Called before mods are loaded. + * <p><b>SHOULD NOT BE CALLED!</b></p> + */ + public static void preLaunch() { + if (preLaunched) return; + try { + Class.forName("net.minecraft.world.World"); + LOGGER.warn("OneConfig is NOT obfuscated!"); + isObfuscated = false; + } catch (Exception ignored) { + } + oneConfigDir.mkdirs(); + new File(oneConfigDir, "profiles").mkdirs(); + if (OneConfigConfig.getInstance() == null) { + OneConfigConfig.getInstance(); + } + if (Preferences.getInstance() == null) { + Preferences.getInstance(); + } + preLaunched = true; + } + + /** + * Called after mods are loaded. + * <p><b>SHOULD NOT BE CALLED!</b></p> + */ + @SuppressWarnings("ResultOfMethodCallIgnored") + public static void init() { + if (initialized) return; + GuiUtils.getDeltaTime(); // called to make sure static initializer is called + try { + EventManager.INSTANCE.register(BlurHandler.INSTANCE); + } catch (Exception e) { + e.printStackTrace(); + } + CommandManager.INSTANCE.registerCommand(OneConfigCommand.class); + EventManager.INSTANCE.register(new HudCore()); + HypixelUtils.INSTANCE.initialize(); + EventManager.INSTANCE.register(KeyBindHandler.INSTANCE); + ConfigCore.sortMods(); + + initialized = true; + } + + /** Returns weather this is an obfuscated environment, using a check for obfuscated name of net.minecraft.world.World.class. + * @return true if this is an obfuscated environment, which is normal for Minecraft or false if not. */ + public static boolean isObfuscated() { + return isObfuscated; + } + + @Subscribe + private void onShutdown(ShutdownEvent event) { + ConfigCore.saveAll(); + } +} diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java new file mode 100644 index 0000000..0ef5f2b --- /dev/null +++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java @@ -0,0 +1,132 @@ +package cc.polyfrost.oneconfig.internal.gui.impl; + +import cc.polyfrost.oneconfig.events.event.RenderEvent; +import cc.polyfrost.oneconfig.events.event.ScreenOpenEvent; +import cc.polyfrost.oneconfig.events.event.Stage; +import cc.polyfrost.oneconfig.gui.OneConfigGui; +import cc.polyfrost.oneconfig.internal.config.Preferences; +import cc.polyfrost.oneconfig.internal.gui.BlurHandler; +import cc.polyfrost.oneconfig.internal.mixin.ShaderGroupAccessor; +import cc.polyfrost.oneconfig.libs.eventbus.Subscribe; +import cc.polyfrost.oneconfig.libs.universal.UMinecraft; +import cc.polyfrost.oneconfig.libs.universal.UScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.shader.Shader; +import net.minecraft.client.shader.ShaderUniform; +import net.minecraft.util.ResourceLocation; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.List; + +/** + * An implementation of the BlurMC mod by tterrag1098. + * <p> + * For the original source see <a href="https://github.com/tterrag1098/Blur/blob/1.8.9/src/main/java/com/tterrag/blur/Blur.java">...</a> + * For the public license, see <a href="https://github.com/tterrag1098/Blur/blob/1.8.9/LICENSE">...</a> + * <p> + * License available under <a href="https://github.com/boomboompower/ToggleChat/blob/master/src/main/resources/licenses/BlurMC-License.txt">...</a> + * + * @author tterrag1098, boomboompower + * <p> + * Taken from ToggleChat + * <a href="https://github.com/boomboompower/ToggleChat/blob/master/LICENSE">...</a> + */ +public class BlurHandlerImpl implements BlurHandler { + private final ResourceLocation blurShader = new ResourceLocation("shaders/post/fade_in_blur.json"); |
