From 513d410de3231fc7b3d658f03b4794ee78fbdf1e Mon Sep 17 00:00:00 2001 From: Vincent Lee Date: Mon, 4 Jul 2022 15:17:55 -0700 Subject: [PATCH] Convert to multiloader (Xplat + Forge) project, no Fabric yet --- .gitignore | 2 +- Forge/build.gradle | 84 +++++++++++ .../java/vazkii/neat/NeatForgeConfig.java | 39 +---- .../vazkii/neat/NeatForgeInitializer.java | 2 +- .../resources/META-INF/accesstransformer.cfg | 1 + .../src}/main/resources/META-INF/mods.toml | 0 Xplat/build.gradle | 17 +++ .../java/vazkii/neat/HealthBarRenderer.java | 0 .../src/main/java/vazkii/neat/NeatConfig.java | 37 +++++ .../main/java/vazkii/neat/NeatRenderType.java | 4 +- .../main/java/vazkii/neat/ToggleKeybind.java | 0 .../vazkii/neat/mixin/AccessorRenderType.java | 16 ++ .../mixin/EntityRenderDispatcherMixin.java | 0 .../resources/assets/neat/lang/en_us.json | 0 .../resources/assets/neat/lang/es_es.json | 0 .../resources/assets/neat/lang/hu_hu.json | 0 .../resources/assets/neat/lang/it_it.json | 0 .../resources/assets/neat/lang/ko_kr.json | 0 .../resources/assets/neat/lang/pl_pl.json | 0 .../resources/assets/neat/lang/ru_ru.json | 0 .../resources/assets/neat/lang/zh_tw.json | 0 .../neat/textures/ui/health_bar_texture.png | Bin .../src}/main/resources/neat.mixins.json | 1 + .../main/resources/neat_xplat.accesswidener | 5 + {src => Xplat/src}/main/resources/pack.mcmeta | 0 build.gradle | 139 ++++++------------ gradle.properties | 3 +- settings.gradle | 6 + 28 files changed, 221 insertions(+), 135 deletions(-) create mode 100644 Forge/build.gradle rename src/main/java/vazkii/neat/NeatConfig.java => Forge/src/main/java/vazkii/neat/NeatForgeConfig.java (86%) rename {src => Forge/src}/main/java/vazkii/neat/NeatForgeInitializer.java (97%) create mode 100644 Forge/src/main/resources/META-INF/accesstransformer.cfg rename {src => Forge/src}/main/resources/META-INF/mods.toml (100%) create mode 100644 Xplat/build.gradle rename {src => Xplat/src}/main/java/vazkii/neat/HealthBarRenderer.java (100%) create mode 100644 Xplat/src/main/java/vazkii/neat/NeatConfig.java rename {src => Xplat/src}/main/java/vazkii/neat/NeatRenderType.java (85%) rename {src => Xplat/src}/main/java/vazkii/neat/ToggleKeybind.java (100%) create mode 100644 Xplat/src/main/java/vazkii/neat/mixin/AccessorRenderType.java rename {src => Xplat/src}/main/java/vazkii/neat/mixin/EntityRenderDispatcherMixin.java (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/en_us.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/es_es.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/hu_hu.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/it_it.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/ko_kr.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/pl_pl.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/ru_ru.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/lang/zh_tw.json (100%) rename {src => Xplat/src}/main/resources/assets/neat/textures/ui/health_bar_texture.png (100%) rename {src => Xplat/src}/main/resources/neat.mixins.json (91%) create mode 100644 Xplat/src/main/resources/neat_xplat.accesswidener rename {src => Xplat/src}/main/resources/pack.mcmeta (100%) diff --git a/.gitignore b/.gitignore index 04bd770..269b883 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ Thumbs.db ## gradle /.gradle -/build +build/ ## ForgeGradle /run diff --git a/Forge/build.gradle b/Forge/build.gradle new file mode 100644 index 0000000..b0fdaf2 --- /dev/null +++ b/Forge/build.gradle @@ -0,0 +1,84 @@ +buildscript { + repositories { + maven { url = 'https://maven.minecraftforge.net' } + maven { + url = 'https://repo.spongepowered.org/repository/maven-public/' + content { includeGroup "org.spongepowered" } + } + mavenCentral() + } + dependencies { + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true + classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' + } +} + +apply plugin: 'net.minecraftforge.gradle' +apply plugin: 'eclipse' +apply plugin: 'org.spongepowered.mixin' + +version = "${project.neat_version}-${project.build_number}" + +mixin { + add sourceSets.main, "neat.refmap.json" + config "neat.mixins.json" +} + +minecraft { + mappings channel: "official", version: "${project.mc_version}" + accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + + runs { + client { + workingDirectory project.file('../run') + property 'forge.logging.console.level', 'debug' + ideaModule "${rootProject.name}.${project.name}.main" + + mods { + neat { + source sourceSets.main + source project(":Xplat").sourceSets.main + } + } + } + } +} + +dependencies { + minecraft "net.minecraftforge:forge:${project.mc_version}-${project.forge_version}" + compileOnly project(":Xplat") + annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' +} + +compileJava { + source(project(":Xplat").sourceSets.main.allSource) + options.compilerArgs << "-Xlint:all,-classfile,-processing,-deprecation,-serial" << "-Werror" +} + +sourcesJar { + from project(":Xplat").sourceSets.main.allJava +} + +processResources { + from project(":Xplat").sourceSets.main.resources + inputs.property "version", project.version + + filesMatching("META-INF/mods.toml") { + expand "version": project.version + } +} + +jar { + manifest { + attributes([ + "Specification-Title": "${project.mod_id}", + "Specification-Vendor": "vazkii", + "Specification-Version": "1", // We are version 1 of ourselves + "Implementation-Title": "${project.mod_id}", + "Implementation-Version": "${project.version}", + "Implementation-Vendor" :"vazkii", + ]) + } +} + +defaultTasks 'clean', 'build' diff --git a/src/main/java/vazkii/neat/NeatConfig.java b/Forge/src/main/java/vazkii/neat/NeatForgeConfig.java similarity index 86% rename from src/main/java/vazkii/neat/NeatConfig.java rename to Forge/src/main/java/vazkii/neat/NeatForgeConfig.java index 84910b2..fc0c432 100644 --- a/src/main/java/vazkii/neat/NeatConfig.java +++ b/Forge/src/main/java/vazkii/neat/NeatForgeConfig.java @@ -11,46 +11,14 @@ import java.util.List; -public class NeatConfig { - - public static final String MOD_ID = "neat"; - public static boolean draw = true; - - public interface ConfigAccess { - int maxDistance(); - boolean renderInF1(); - double heightAbove(); - boolean drawBackground(); - int backgroundPadding(); - int backgroundHeight(); - int barHeight(); - int plateSize(); - int plateSizeBoss(); - boolean showAttributes(); - boolean showArmor(); - boolean groupArmor(); - boolean colorByType(); - int hpTextHeight(); - boolean showMaxHP(); - boolean showCurrentHP(); - boolean showPercentage(); - boolean showOnPlayers(); - boolean showOnBosses(); - boolean showOnlyFocused(); - boolean showFullHealth(); - boolean enableDebugInfo(); - List blacklist(); - } - - public static ConfigAccess instance; - +public class NeatForgeConfig { public static void init() { Pair specPair = new ForgeConfigSpec.Builder().configure(ForgeNeatConfig::new); - instance = specPair.getLeft(); + NeatConfig.instance = specPair.getLeft(); ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, specPair.getRight()); } - private static class ForgeNeatConfig implements ConfigAccess { + private static class ForgeNeatConfig implements NeatConfig.ConfigAccess { private final ConfigValue maxDistance; private final ConfigValue renderInF1; private final ConfigValue heightAbove; @@ -225,5 +193,4 @@ public List blacklist() { return (List) blacklist.get(); } } - } diff --git a/src/main/java/vazkii/neat/NeatForgeInitializer.java b/Forge/src/main/java/vazkii/neat/NeatForgeInitializer.java similarity index 97% rename from src/main/java/vazkii/neat/NeatForgeInitializer.java rename to Forge/src/main/java/vazkii/neat/NeatForgeInitializer.java index 97a0af6..70b1e12 100644 --- a/src/main/java/vazkii/neat/NeatForgeInitializer.java +++ b/Forge/src/main/java/vazkii/neat/NeatForgeInitializer.java @@ -16,7 +16,7 @@ public class NeatForgeInitializer { public NeatForgeInitializer() { ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (incoming, isNetwork) -> true)); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); - NeatConfig.init(); + NeatForgeConfig.init(); } public void setup(FMLClientSetupEvent event) { diff --git a/Forge/src/main/resources/META-INF/accesstransformer.cfg b/Forge/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 0000000..dfb84d6 --- /dev/null +++ b/Forge/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1 @@ +public net.minecraft.client.renderer.RenderType$CompositeRenderType diff --git a/src/main/resources/META-INF/mods.toml b/Forge/src/main/resources/META-INF/mods.toml similarity index 100% rename from src/main/resources/META-INF/mods.toml rename to Forge/src/main/resources/META-INF/mods.toml diff --git a/Xplat/build.gradle b/Xplat/build.gradle new file mode 100644 index 0000000..951a7d0 --- /dev/null +++ b/Xplat/build.gradle @@ -0,0 +1,17 @@ +plugins { + id('java') + id('org.spongepowered.gradle.vanilla') version '0.2.1-SNAPSHOT' +} + +archivesBaseName = "${project.mod_name}-xplat" +version = "${project.neat_version}-${project.build_number}" + +minecraft { + version(project.mc_version) + accessWideners 'src/main/resources/neat_xplat.accesswidener' +} + +dependencies { + compileOnly group: 'org.spongepowered', name: 'mixin', version: '0.8.5' + implementation "com.google.code.findbugs:jsr305:3.0.2" +} diff --git a/src/main/java/vazkii/neat/HealthBarRenderer.java b/Xplat/src/main/java/vazkii/neat/HealthBarRenderer.java similarity index 100% rename from src/main/java/vazkii/neat/HealthBarRenderer.java rename to Xplat/src/main/java/vazkii/neat/HealthBarRenderer.java diff --git a/Xplat/src/main/java/vazkii/neat/NeatConfig.java b/Xplat/src/main/java/vazkii/neat/NeatConfig.java new file mode 100644 index 0000000..3b525e1 --- /dev/null +++ b/Xplat/src/main/java/vazkii/neat/NeatConfig.java @@ -0,0 +1,37 @@ +package vazkii.neat; + +import java.util.List; + +public class NeatConfig { + + public static final String MOD_ID = "neat"; + public static boolean draw = true; + + public interface ConfigAccess { + int maxDistance(); + boolean renderInF1(); + double heightAbove(); + boolean drawBackground(); + int backgroundPadding(); + int backgroundHeight(); + int barHeight(); + int plateSize(); + int plateSizeBoss(); + boolean showAttributes(); + boolean showArmor(); + boolean groupArmor(); + boolean colorByType(); + int hpTextHeight(); + boolean showMaxHP(); + boolean showCurrentHP(); + boolean showPercentage(); + boolean showOnPlayers(); + boolean showOnBosses(); + boolean showOnlyFocused(); + boolean showFullHealth(); + boolean enableDebugInfo(); + List blacklist(); + } + + public static ConfigAccess instance; +} diff --git a/src/main/java/vazkii/neat/NeatRenderType.java b/Xplat/src/main/java/vazkii/neat/NeatRenderType.java similarity index 85% rename from src/main/java/vazkii/neat/NeatRenderType.java rename to Xplat/src/main/java/vazkii/neat/NeatRenderType.java index 99021e4..589a15c 100644 --- a/src/main/java/vazkii/neat/NeatRenderType.java +++ b/Xplat/src/main/java/vazkii/neat/NeatRenderType.java @@ -6,6 +6,8 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; +import vazkii.neat.mixin.AccessorRenderType; + import static com.mojang.blaze3d.vertex.DefaultVertexFormat.*; public class NeatRenderType extends RenderStateShard { @@ -25,6 +27,6 @@ private static RenderType getHealthBarType() { .setTransparencyState(TRANSLUCENT_TRANSPARENCY) .setLightmapState(LIGHTMAP) .createCompositeState(false); - return RenderType.create("neat_health_bar", POSITION_COLOR_TEX_LIGHTMAP, VertexFormat.Mode.QUADS, 256, true, true, renderTypeState); + return AccessorRenderType.neat_create("neat_health_bar", POSITION_COLOR_TEX_LIGHTMAP, VertexFormat.Mode.QUADS, 256, true, true, renderTypeState); } } diff --git a/src/main/java/vazkii/neat/ToggleKeybind.java b/Xplat/src/main/java/vazkii/neat/ToggleKeybind.java similarity index 100% rename from src/main/java/vazkii/neat/ToggleKeybind.java rename to Xplat/src/main/java/vazkii/neat/ToggleKeybind.java diff --git a/Xplat/src/main/java/vazkii/neat/mixin/AccessorRenderType.java b/Xplat/src/main/java/vazkii/neat/mixin/AccessorRenderType.java new file mode 100644 index 0000000..7efb84f --- /dev/null +++ b/Xplat/src/main/java/vazkii/neat/mixin/AccessorRenderType.java @@ -0,0 +1,16 @@ +package vazkii.neat.mixin; + +import com.mojang.blaze3d.vertex.VertexFormat; + +import net.minecraft.client.renderer.RenderType; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(RenderType.class) +public interface AccessorRenderType { + @Invoker("create") + static RenderType.CompositeRenderType neat_create(String name, VertexFormat format, VertexFormat.Mode mode, int bufSize, boolean affectsCrumbling, boolean sortOnUpload, RenderType.CompositeState glState) { + throw new IllegalStateException(""); + } +} diff --git a/src/main/java/vazkii/neat/mixin/EntityRenderDispatcherMixin.java b/Xplat/src/main/java/vazkii/neat/mixin/EntityRenderDispatcherMixin.java similarity index 100% rename from src/main/java/vazkii/neat/mixin/EntityRenderDispatcherMixin.java rename to Xplat/src/main/java/vazkii/neat/mixin/EntityRenderDispatcherMixin.java diff --git a/src/main/resources/assets/neat/lang/en_us.json b/Xplat/src/main/resources/assets/neat/lang/en_us.json similarity index 100% rename from src/main/resources/assets/neat/lang/en_us.json rename to Xplat/src/main/resources/assets/neat/lang/en_us.json diff --git a/src/main/resources/assets/neat/lang/es_es.json b/Xplat/src/main/resources/assets/neat/lang/es_es.json similarity index 100% rename from src/main/resources/assets/neat/lang/es_es.json rename to Xplat/src/main/resources/assets/neat/lang/es_es.json diff --git a/src/main/resources/assets/neat/lang/hu_hu.json b/Xplat/src/main/resources/assets/neat/lang/hu_hu.json similarity index 100% rename from src/main/resources/assets/neat/lang/hu_hu.json rename to Xplat/src/main/resources/assets/neat/lang/hu_hu.json diff --git a/src/main/resources/assets/neat/lang/it_it.json b/Xplat/src/main/resources/assets/neat/lang/it_it.json similarity index 100% rename from src/main/resources/assets/neat/lang/it_it.json rename to Xplat/src/main/resources/assets/neat/lang/it_it.json diff --git a/src/main/resources/assets/neat/lang/ko_kr.json b/Xplat/src/main/resources/assets/neat/lang/ko_kr.json similarity index 100% rename from src/main/resources/assets/neat/lang/ko_kr.json rename to Xplat/src/main/resources/assets/neat/lang/ko_kr.json diff --git a/src/main/resources/assets/neat/lang/pl_pl.json b/Xplat/src/main/resources/assets/neat/lang/pl_pl.json similarity index 100% rename from src/main/resources/assets/neat/lang/pl_pl.json rename to Xplat/src/main/resources/assets/neat/lang/pl_pl.json diff --git a/src/main/resources/assets/neat/lang/ru_ru.json b/Xplat/src/main/resources/assets/neat/lang/ru_ru.json similarity index 100% rename from src/main/resources/assets/neat/lang/ru_ru.json rename to Xplat/src/main/resources/assets/neat/lang/ru_ru.json diff --git a/src/main/resources/assets/neat/lang/zh_tw.json b/Xplat/src/main/resources/assets/neat/lang/zh_tw.json similarity index 100% rename from src/main/resources/assets/neat/lang/zh_tw.json rename to Xplat/src/main/resources/assets/neat/lang/zh_tw.json diff --git a/src/main/resources/assets/neat/textures/ui/health_bar_texture.png b/Xplat/src/main/resources/assets/neat/textures/ui/health_bar_texture.png similarity index 100% rename from src/main/resources/assets/neat/textures/ui/health_bar_texture.png rename to Xplat/src/main/resources/assets/neat/textures/ui/health_bar_texture.png diff --git a/src/main/resources/neat.mixins.json b/Xplat/src/main/resources/neat.mixins.json similarity index 91% rename from src/main/resources/neat.mixins.json rename to Xplat/src/main/resources/neat.mixins.json index 1c7a2d8..0d0ce69 100644 --- a/src/main/resources/neat.mixins.json +++ b/Xplat/src/main/resources/neat.mixins.json @@ -6,6 +6,7 @@ "mixins": [ ], "client": [ + "AccessorRenderType", "EntityRenderDispatcherMixin" ], "injectors": { diff --git a/Xplat/src/main/resources/neat_xplat.accesswidener b/Xplat/src/main/resources/neat_xplat.accesswidener new file mode 100644 index 0000000..dc023b4 --- /dev/null +++ b/Xplat/src/main/resources/neat_xplat.accesswidener @@ -0,0 +1,5 @@ +accessWidener v1 named +# NOTE: These are access wideners needed by Xplat code. +# They must be duplicated in the loader-specific projects' AT/AW as well if not already done so by the loader. +accessible class net/minecraft/client/renderer/RenderType$CompositeRenderType +accessible class net/minecraft/client/renderer/RenderType$CompositeState diff --git a/src/main/resources/pack.mcmeta b/Xplat/src/main/resources/pack.mcmeta similarity index 100% rename from src/main/resources/pack.mcmeta rename to Xplat/src/main/resources/pack.mcmeta diff --git a/build.gradle b/build.gradle index b68f158..ce4e586 100644 --- a/build.gradle +++ b/build.gradle @@ -1,112 +1,61 @@ -buildscript { - repositories { - maven { url = 'https://files.minecraftforge.net/maven' } - maven { - url = 'https://repo.spongepowered.org/repository/maven-public/' - content { includeGroup "org.spongepowered" } - } - mavenCentral() - } - dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true - classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' - } -} - plugins { id 'com.diffplug.spotless' version '5.12.5' apply false } -apply plugin: 'net.minecraftforge.gradle' -apply plugin: 'eclipse' -apply plugin: "pmd" -apply plugin: "com.diffplug.spotless" -apply plugin: 'maven-publish' -apply plugin: 'org.spongepowered.mixin' +subprojects { + apply plugin: 'java' + apply plugin: 'pmd' + apply plugin: "com.diffplug.spotless" + apply plugin: 'maven-publish' + java.toolchain.languageVersion = JavaLanguageVersion.of(17) + java.withSourcesJar() + archivesBaseName = "${mod_name}" -version = "${project.version}-${project.build_number}" -group = "vazkii.${project.mod_id}" -archivesBaseName = project.mod_name - -java.toolchain.languageVersion = JavaLanguageVersion.of(17) - -compileJava.options.compilerArgs << "-Xlint:all,-classfile,-processing,-serial,-deprecation" << "-Werror" - -mixin { - add sourceSets.main, "neat.refmap.json" - config "neat.mixins.json" -} - -pmd { - toolVersion '6.35.0' - incrementalAnalysis.set(true) - ruleSets.clear() - ruleSetFiles = rootProject.files("spotless/pmd-ruleset.xml") -} + repositories { + mavenCentral() -spotless { - enforceCheck = false // workaround around jenkins having wrong line endings in some files - // we explicitly check in github actions builds - java { - indentWithTabs() - eclipse().configFile rootProject.file('spotless/eclipseformat.xml') - removeUnusedImports() - importOrderFile rootProject.file('spotless/eclipse.importorder') + maven { + name = 'Sponge / Mixin' + url = 'https://repo.spongepowered.org/repository/maven-public/' + } } -} -minecraft { - mappings channel: "official", version: "${project.mc_version}" - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') - - runs { - client { - workingDirectory project.file('run') - property 'forge.logging.console.level', 'debug' - - mods { - neat { - source sourceSets.main - } - } - } + tasks.withType(JavaCompile).configureEach { + it.options.encoding = 'UTF-8' + it.options.release = 17 + } - server { - workingDirectory project.file('run') - property 'forge.logging.console.level', 'debug' + tasks.withType(GenerateModuleMetadata).configureEach { + it.enabled = false + } - mods { - neat { - source sourceSets.main - } - } - } + pmd { + toolVersion '6.35.0' + incrementalAnalysis.set(true) + ruleSets.clear() + ruleSetFiles = rootProject.files("spotless/pmd-ruleset.xml") } -} -dependencies { - minecraft "net.minecraftforge:forge:${project.mc_version}-${project.forge_version}" - annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' -} + jar { + from "LICENSE.txt" -processResources { - filesMatching('META-INF/mods.toml') { - // replace version and mcversion - expand 'version': project.version + exclude "**/*.bat" + exclude "**/*.psd" + exclude "**/*.ase" + exclude "**/*.exe" + exclude "**/unused" + + exclude ".cache" } -} -jar { - manifest { - attributes([ - "Specification-Title": "${project.mod_id}", - "Specification-Vendor": "vazkii", - "Specification-Version": "1", // We are version 1 of ourselves - "Implementation-Title": "${project.mod_id}", - "Implementation-Version": "${project.version}", - "Implementation-Vendor" :"vazkii", - ]) + spotless { + enforceCheck = false // workaround around jenkins having wrong line endings in some files + // we explicitly check in github actions builds + java { + indentWithTabs() + eclipse().configFile rootProject.file('spotless/eclipseformat.xml') + removeUnusedImports() + importOrderFile rootProject.file('spotless/eclipse.importorder') + } } } - -defaultTasks 'clean', 'build' diff --git a/gradle.properties b/gradle.properties index ca7cf56..065fc39 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,9 +7,10 @@ org.gradle.jvmargs=-Xmx1G \ --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED +group=vazkii.neat forge_version=40.1.54 mod_id=neat build_number=31 -version=1.8 +neat_version=1.8 mod_name=Neat mc_version=1.18.2 diff --git a/settings.gradle b/settings.gradle index c665ff9..e71dbf3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,11 @@ pluginManagement { repositories { + maven { + name = 'Sponge Snapshots' + url = 'https://repo.spongepowered.org/repository/maven-public/' + } gradlePluginPortal() } } +rootProject.name = 'Neat' +include("Xplat", "Forge")