From 9c757d214749687597b77f319d4efb1934490b73 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Sun, 7 Apr 2024 13:52:34 -0400 Subject: [PATCH 01/13] started switching to unimined --- build.gradle | 86 ++++++++++++++++++++++----------------------- common/build.gradle | 14 +++++--- fabric/build.gradle | 24 ++++++++----- forge/build.gradle | 26 +++++++------- gradle.properties | 2 +- settings.gradle | 6 ++++ 6 files changed, 87 insertions(+), 71 deletions(-) diff --git a/build.gradle b/build.gradle index a190417..027e5ab 100644 --- a/build.gradle +++ b/build.gradle @@ -2,13 +2,7 @@ import org.gradle.api.tasks.compile.JavaCompile plugins { id "maven-publish" - id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.4-SNAPSHOT" apply(false) - id "com.github.johnrengelman.shadow" version "7.0.0" apply(false) -} - -architectury { - minecraft = rootProject.minecraft_version + id "xyz.wagyourtail.unimined" version "1.1.0-SNAPSHOT" apply false } //Print out JVM information so that we know what version is running. Extreamly useful for people to know when helping you. @@ -23,11 +17,10 @@ def gitHash() { return "" } -allprojects { +subprojects { + apply plugin: "xyz.wagyourtail.unimined" apply plugin: "maven-publish" - apply plugin: "java" - apply plugin: "architectury-plugin" - + java.toolchain.languageVersion = JavaLanguageVersion.of(17) group = rootProject.maven_group @@ -47,14 +40,45 @@ allprojects { } println("In CI mode") } -} -subprojects { - apply plugin: "dev.architectury.loom" - java.toolchain.languageVersion = JavaLanguageVersion.of(17) + repositories { + maven { + url "https://mcentral.firstdark.dev/releases" + } + } - if (!project.path.contains("common")){ - apply plugin: "com.github.johnrengelman.shadow" + jar { + manifest { + attributes([ + 'Specification-Title' : project.archivesBaseName, + 'Specification-Vendor' : "Trinsdar", + 'Specification-Version' : project.version, + 'Implementation-Title' : project.name, + 'Implementation-Version' : project.version, + 'Implementation-Vendor' : "Trinsdar", + 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + 'Timestamp' : System.currentTimeMillis(), + 'Built-On-Java' : "${System.getProperty('java.vm.version')} (${System.getProperty('java.vm.vendor')})", + 'Built-On-Minecraft' : minecraft_version + ]) + } + } + + unimined.minecraft(sourceSets.main, true) { + version minecraft_version + + /*if (project.name !== "common") { + combineWith(":common:main") + }*/ + + mappings { + mojmap() + parchment(${rootProject.minecraft_version}, ${rootProject.mappings_version}) + } + } + + + /*if (!project.path.contains("common")){ configurations { common @@ -88,37 +112,13 @@ subprojects { skip() } } - } - - loom { - silentMojangMappingsLicense() - } - - dependencies { - minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - // The following line declares the mojmap mappings, you may use other mappings as well - mappings loom.layered() { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-${rootProject.minecraft_version}:${rootProject.mappings_version}@zip") - } - // The following line declares the yarn mappings you may select this one as well. - // mappings "net.fabricmc:yarn:1.17.1+build.32:v2" - } + }*/ publishing { publications { mavenJava(org.gradle.api.publish.maven.MavenPublication) { artifactId = "gtcore-" + project.name - artifact(sourcesJar) { - builtBy remapSourcesJar - } - - afterEvaluate { - artifact remapJar - if (project.name != "common"){ - artifact shadowJar - } - } + from components.java } } repositories { diff --git a/common/build.gradle b/common/build.gradle index 1e9cffe..6878b92 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,8 +1,16 @@ archivesBaseName = "${rootProject.archive_base_name}-common" version = "${project.mod_version}-${rootProject.minecraft_version}" -loom { +/*loom { accessWidenerPath = file("src/main/resources/gtcore.accesswidener") +}*/ + +unimined.minecraft { + fabric { + loader fabric_loader + } + + defaultRemapJar = false } dependencies { @@ -27,7 +35,3 @@ dependencies { modCompileOnly("curse.maven:the-one-probe-fabric-581847:${project.top_fabric_file}") modImplementation "maven.modrinth:carbon-config:${project.carbon_config_fabric_version}" } - -architectury { - common("forge", "fabric") -} diff --git a/fabric/build.gradle b/fabric/build.gradle index 3893f67..b79cd94 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -4,20 +4,22 @@ version = "${project.mod_version}-${rootProject.minecraft_version}" def generatedResources = file("src/generated/resources") def accessWidenerFile = project(":common").file("src/main/resources/gtcore.accesswidener") -architectury { - platformSetupLoomIde() - fabric() -} - -loom { +/*loom { accessWidenerPath = accessWidenerFile +}*/ +unimined.minecraft { + fabric { + loader fabric_loader + } + + defaultRemapJar = false } dependencies { - modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" + //modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" - common(project(path: ":common", configuration: "namedElements")) - shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) + implementation(project(path: ":common", configuration: "namedElements")) + //shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) modImplementation("io.github.gregtechintergalactical:antimatter-fabric:${antimatter_version}"){ exclude(group: "maven.modrinth") exclude(group: "TechReborn") @@ -60,3 +62,7 @@ sourcesJar { exclude("gtcore.accesswidener") // duplicate on fabric, unneeded on forge } } + +tasks.withType(JavaCompile).configureEach { + source(project(":common").sourceSets.main.allSource) +} diff --git a/forge/build.gradle b/forge/build.gradle index e676095..a566eb2 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,28 +1,24 @@ archivesBaseName = "${rootProject.archive_base_name}-forge" version = "${project.mod_version}-${rootProject.minecraft_version}" -architectury { - platformSetupLoomIde() - forge() -} - -loom { +/*loom { accessWidenerPath = project(":common").file("src/main/resources/gtcore.accesswidener") - forge{ - mixinConfigs = [ - "gtcore.mixins.json" - ] +}*/ + +unimined.minecraft { + minecraftForge { + loader forge_version + mixinConfig("gtcore.mixins.json") + aw2at(project(":common").file("src/main/resources/gtcore.accesswidener")); } } dependencies { - forge "net.minecraftforge:forge:${project.minecraft_version}-${project.forge_version}" modImplementation("io.github.gregtechintergalactical:antimatter-forge:${antimatter_version}"){ //exclude(group: "mezz.jei") exclude(group: "com.github.Reforged-Mods.Terraform-Reforged") } - common(project(path: ":common", configuration: "namedElements")) - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) + implementation(project(path: ":common", configuration: "namedElements")) //modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-forge:${rootProject.rei_version}" modCompileOnly "me.shedaniel:RoughlyEnoughItems-forge:${rootProject.rei_version}" modCompileOnly("curse.maven:terrafirmacraft-302973:4723717") @@ -39,3 +35,7 @@ processResources { expand "version": project.mod_version } } + +tasks.withType(JavaCompile).configureEach { + source(project(":common").sourceSets.main.allSource) +} diff --git a/gradle.properties b/gradle.properties index ab6dfa9..73416b6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,4 +32,4 @@ top_file=3157997 maven_group=io.github.gregtechintergalactical archive_base_name=gtcore -mod_version=0.1.1-pre26 +mod_version=0.1.1-pre27 diff --git a/settings.gradle b/settings.gradle index b2a47fe..7a39a66 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,6 +11,12 @@ pluginManagement { name = 'parchment' url = 'https://maven.parchmentmc.org' } + maven { + url = "https://maven.wagyourtail.xyz/releases" + } + maven { + url = "https://maven.wagyourtail.xyz/snapshots" + } gradlePluginPortal() mavenCentral() } From 8398bbdafeb87b7ee83be422d5a90bbbd2e2cdd5 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Sun, 7 Apr 2024 14:22:35 -0400 Subject: [PATCH 02/13] fixed an import error --- build.gradle | 3 ++- common/build.gradle | 2 +- fabric/build.gradle | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 027e5ab..d5c90af 100644 --- a/build.gradle +++ b/build.gradle @@ -73,7 +73,8 @@ subprojects { mappings { mojmap() - parchment(${rootProject.minecraft_version}, ${rootProject.mappings_version}) + devNamespace "mojmap" + parchment(rootProject.minecraft_version, rootProject.mappings_version) } } diff --git a/common/build.gradle b/common/build.gradle index 6878b92..67400db 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -7,7 +7,7 @@ version = "${project.mod_version}-${rootProject.minecraft_version}" unimined.minecraft { fabric { - loader fabric_loader + loader fabric_loader_version } defaultRemapJar = false diff --git a/fabric/build.gradle b/fabric/build.gradle index b79cd94..066ed42 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -9,7 +9,7 @@ def accessWidenerFile = project(":common").file("src/main/resources/gtcore.acces }*/ unimined.minecraft { fabric { - loader fabric_loader + loader fabric_loader_version } defaultRemapJar = false From 33efdde2221d0bf0363757adbd718c485eca7633 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:43:22 -0400 Subject: [PATCH 03/13] more work on converting to unimined, still doesn't build --- build.gradle | 14 +++++++++++--- common/build.gradle | 11 ++++++----- fabric/build.gradle | 7 ++++--- forge/build.gradle | 6 ++++-- .../main/resources/META-INF/accesstransformer.cfg | 10 +++++----- 5 files changed, 30 insertions(+), 18 deletions(-) diff --git a/build.gradle b/build.gradle index d5c90af..29df5a5 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,13 @@ subprojects { withSourcesJar() } + configurations { + modCompileOnly + compileOnly.extendsFrom modCompileOnly + modRuntimeOnly + runtimeOnly.extendsFrom modRuntimeOnly + } + tasks.withType(JavaCompile).configureEach { it.options.encoding = 'UTF-8' } @@ -67,9 +74,10 @@ subprojects { unimined.minecraft(sourceSets.main, true) { version minecraft_version - /*if (project.name !== "common") { - combineWith(":common:main") - }*/ + mods { + remap(configurations.modCompileOnly) + remap(configurations.modRuntimeOnly) + } mappings { mojmap() diff --git a/common/build.gradle b/common/build.gradle index 67400db..2b588df 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -8,9 +8,10 @@ version = "${project.mod_version}-${rootProject.minecraft_version}" unimined.minecraft { fabric { loader fabric_loader_version + accessWidener(file("src/main/resources/gtcore.accesswidener")) } - defaultRemapJar = false + defaultRemapJar = true } dependencies { @@ -26,12 +27,12 @@ dependencies { modImplementation("earth.terrarium:botarium-common-1.18.2:${project.botarium_version}") modImplementation("com.gtnewhorizon.structurelib:structurelib-common:${project.structurelib_version}-${project.minecraft_version}") modImplementation "com.teamresourceful.resourcefullib:resourcefullib-common-1.18.2:${project.resourcefullib_version}" - modCompileOnly "me.shedaniel:RoughlyEnoughItems-api:${rootProject.rei_version}" - modCompileOnly "me.shedaniel:RoughlyEnoughItems-default-plugin:${rootProject.rei_version}" - modCompileOnly("mezz.jei:jei-${rootProject.minecraft_version}-common-api:${rootProject.jei_version}") + modImplementation "me.shedaniel:RoughlyEnoughItems-api:${rootProject.rei_version}" + modImplementation "me.shedaniel:RoughlyEnoughItems-default-plugin:${rootProject.rei_version}" + modImplementation("mezz.jei:jei-${rootProject.minecraft_version}-common-api:${rootProject.jei_version}") modImplementation("com.terraformersmc.terraform-api:terraform-wood-api-v1:${project.terraform_version_fabric}"){ transitive = false } - modCompileOnly("curse.maven:the-one-probe-fabric-581847:${project.top_fabric_file}") + modImplementation("curse.maven:the-one-probe-fabric-581847:${project.top_fabric_file}") modImplementation "maven.modrinth:carbon-config:${project.carbon_config_fabric_version}" } diff --git a/fabric/build.gradle b/fabric/build.gradle index 066ed42..2b06ab9 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -10,15 +10,16 @@ def accessWidenerFile = project(":common").file("src/main/resources/gtcore.acces unimined.minecraft { fabric { loader fabric_loader_version + accessWidener(accessWidenerFile) } - defaultRemapJar = false + defaultRemapJar = true } dependencies { //modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" - modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" - implementation(project(path: ":common", configuration: "namedElements")) + modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" + implementation(project(path: ":common")) //shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) modImplementation("io.github.gregtechintergalactical:antimatter-fabric:${antimatter_version}"){ exclude(group: "maven.modrinth") diff --git a/forge/build.gradle b/forge/build.gradle index a566eb2..f07d0c8 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -9,8 +9,10 @@ unimined.minecraft { minecraftForge { loader forge_version mixinConfig("gtcore.mixins.json") + //accessWidener(project(":common").file("src/main/resources/gtcore.accesswidener")) aw2at(project(":common").file("src/main/resources/gtcore.accesswidener")); } + defaultRemapJar = true } dependencies { @@ -18,11 +20,11 @@ dependencies { //exclude(group: "mezz.jei") exclude(group: "com.github.Reforged-Mods.Terraform-Reforged") } - implementation(project(path: ":common", configuration: "namedElements")) + implementation(project(path: ":common")) //modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-forge:${rootProject.rei_version}" modCompileOnly "me.shedaniel:RoughlyEnoughItems-forge:${rootProject.rei_version}" modCompileOnly("curse.maven:terrafirmacraft-302973:4723717") - modImplementation(include("io.github.reforgedmods.terraform-api:terraform-wood-api-v1:${project.terraform_version_forge}")) + modImplementation("io.github.reforgedmods.terraform-api:terraform-wood-api-v1:${project.terraform_version_forge}") //modRuntimeOnly("mezz.jei:jei-${rootProject.minecraft_version}-forge:${rootProject.jei_version}") modImplementation("maven.modrinth:carbon-config:${project.carbon_config_forge_version}") modRuntimeOnly("curse.maven:the-twilight-forest-227639:4337390") diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index c108498..36a76d9 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -1,7 +1,7 @@ public net.minecraft.world.level.biome.Biome$ClimateSettings -public net.minecraft.world.level.biome.Biome$ClimateSettings f_47681_ -public net.minecraft.world.level.biome.Biome$ClimateSettings f_47680_ -public net.minecraft.world.level.block.state.properties.WoodType m_61844_(Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; -public-f net.minecraft.world.level.levelgen.feature.TreeFeature m_67215_(Lnet/minecraft/world/level/LevelSimulatedReader;ILnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/feature/configurations/TreeConfiguration;)I -public net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacerType (Lcom/mojang/serialization/Codec;)V +public net.minecraft.world.level.biome.Biome$ClimateSettings temperature +public net.minecraft.world.level.biome.Biome$ClimateSettings precipitation public net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacerType (Lcom/mojang/serialization/Codec;)V +public net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacerType (Lcom/mojang/serialization/Codec;)V +protected-f net.minecraft.world.level.levelgen.feature.TreeFeature getMaxFreeTreeHeight(Lnet/minecraft/world/level/LevelSimulatedReader;ILnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/feature/configurations/TreeConfiguration;)I +public net.minecraft.world.level.block.state.properties.WoodType register(Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; From 3556cb5a198e18958506ec92c1cf86e0d69a8a51 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Sun, 7 Apr 2024 19:15:40 -0400 Subject: [PATCH 04/13] fixed a compile error --- .../gtcore/data/GTCoreBlocks.java | 4 +--- .../gtcore/data/IGTBlockInit.java | 10 ++++++++++ .../gtcore/data/forge/GTCoreBlocksImpl.java | 5 +++-- ...ub.gregtechintergalactical.gtcore.data.IGTBlockInit | 1 + 4 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 common/src/main/java/io/github/gregtechintergalactical/gtcore/data/IGTBlockInit.java create mode 100644 forge/src/main/resources/META-INF/services/io.github.gregtechintergalactical.gtcore.data.IGTBlockInit diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreBlocks.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreBlocks.java index d7b0c94..28835ca 100644 --- a/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreBlocks.java +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreBlocks.java @@ -1,6 +1,5 @@ package io.github.gregtechintergalactical.gtcore.data; -import dev.architectury.injectables.annotations.ExpectPlatform; import io.github.gregtechintergalactical.gtcore.GTCore; import io.github.gregtechintergalactical.gtcore.block.BlockSapBag; import io.github.gregtechintergalactical.gtcore.blockentity.BlockEntitySapBag; @@ -98,9 +97,8 @@ public static void init() { AntimatterAPI.register(BlockEntityType.class, "sap_bag", GTCore.ID, SAP_BAG_BLOCK_ENTITY); } - @ExpectPlatform private static void initTFC(){ - throw new AssertionError(); + IGTBlockInit.INSTANCE.init(); } public static DrumMachine createDrum(Material material, int maxCapacity){ diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/IGTBlockInit.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/IGTBlockInit.java new file mode 100644 index 0000000..4017dfa --- /dev/null +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/IGTBlockInit.java @@ -0,0 +1,10 @@ +package io.github.gregtechintergalactical.gtcore.data; + +import tesseract.TesseractCapUtils; + +import java.util.ServiceLoader; + +public interface IGTBlockInit { + IGTBlockInit INSTANCE = ServiceLoader.load(IGTBlockInit.class).findFirst().orElse(null); + void init(); +} diff --git a/forge/src/main/java/io/github/gregtechintergalactical/gtcore/data/forge/GTCoreBlocksImpl.java b/forge/src/main/java/io/github/gregtechintergalactical/gtcore/data/forge/GTCoreBlocksImpl.java index da8ee98..492f85a 100644 --- a/forge/src/main/java/io/github/gregtechintergalactical/gtcore/data/forge/GTCoreBlocksImpl.java +++ b/forge/src/main/java/io/github/gregtechintergalactical/gtcore/data/forge/GTCoreBlocksImpl.java @@ -1,10 +1,11 @@ package io.github.gregtechintergalactical.gtcore.data.forge; +import io.github.gregtechintergalactical.gtcore.data.IGTBlockInit; import io.github.gregtechintergalactical.gtcore.integration.tfc.TFCRubberData; -public class GTCoreBlocksImpl { - public static void initTFC(){ +public class GTCoreBlocksImpl implements IGTBlockInit { + public void init(){ TFCRubberData.init(); } } diff --git a/forge/src/main/resources/META-INF/services/io.github.gregtechintergalactical.gtcore.data.IGTBlockInit b/forge/src/main/resources/META-INF/services/io.github.gregtechintergalactical.gtcore.data.IGTBlockInit new file mode 100644 index 0000000..6663ab5 --- /dev/null +++ b/forge/src/main/resources/META-INF/services/io.github.gregtechintergalactical.gtcore.data.IGTBlockInit @@ -0,0 +1 @@ +io.github.gregtechintergalactical.gtcore.data.forge.GTCoreBlocksImpl \ No newline at end of file From e91f8806d177ac48b42cef73834f990353ab2fa4 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Fri, 12 Apr 2024 21:33:23 -0400 Subject: [PATCH 05/13] fixed compile errors due to transitive aws not being supported yet --- common/src/main/resources/gtcore.accesswidener | 7 ++++++- forge/src/main/resources/META-INF/accesstransformer.cfg | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common/src/main/resources/gtcore.accesswidener b/common/src/main/resources/gtcore.accesswidener index d485042..591012e 100644 --- a/common/src/main/resources/gtcore.accesswidener +++ b/common/src/main/resources/gtcore.accesswidener @@ -6,4 +6,9 @@ accessible field net/minecraft/world/level/biome/Biome$ClimateSettings precipita accessible method net/minecraft/world/level/levelgen/feature/foliageplacers/FoliagePlacerType (Lcom/mojang/serialization/Codec;)V accessible method net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacerType (Lcom/mojang/serialization/Codec;)V extendable method net/minecraft/world/level/levelgen/feature/TreeFeature getMaxFreeTreeHeight (Lnet/minecraft/world/level/LevelSimulatedReader;ILnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/feature/configurations/TreeConfiguration;)I -accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; \ No newline at end of file +accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; +accessible class net/minecraft/client/gui/screens/MenuScreens$ScreenConstructor +accessible class net/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier +accessible method net/minecraft/data/loot/BlockLoot createLeavesDrops (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;[F)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +accessible method net/minecraft/data/loot/BlockLoot createSlabItemTable (Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +accessible method net/minecraft/data/loot/BlockLoot createSingleItemTable (Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index 36a76d9..826365d 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -1,7 +1,12 @@ public net.minecraft.world.level.biome.Biome$ClimateSettings +public net.minecraft.client.gui.screens.MenuScreens$ScreenConstructor +public net.minecraft.world.level.block.entity.BlockEntityType$BlockEntitySupplier public net.minecraft.world.level.biome.Biome$ClimateSettings temperature public net.minecraft.world.level.biome.Biome$ClimateSettings precipitation public net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacerType (Lcom/mojang/serialization/Codec;)V public net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacerType (Lcom/mojang/serialization/Codec;)V protected-f net.minecraft.world.level.levelgen.feature.TreeFeature getMaxFreeTreeHeight(Lnet/minecraft/world/level/LevelSimulatedReader;ILnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/feature/configurations/TreeConfiguration;)I public net.minecraft.world.level.block.state.properties.WoodType register(Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; +public net.minecraft.data.loot.BlockLoot createLeavesDrops(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;[F)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +public net.minecraft.data.loot.BlockLoot createSlabItemTable(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +public net.minecraft.data.loot.BlockLoot createSingleItemTable(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; From 361c22b478fe59075854f76bacbe39bcc77543df Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Fri, 12 Apr 2024 21:33:45 -0400 Subject: [PATCH 06/13] fixed aw errors --- build.gradle | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 29df5a5..2e20712 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ import org.gradle.api.tasks.compile.JavaCompile plugins { id "maven-publish" - id "xyz.wagyourtail.unimined" version "1.1.0-SNAPSHOT" apply false + id "xyz.wagyourtail.unimined" version "1.2.0-SNAPSHOT" apply false } //Print out JVM information so that we know what version is running. Extreamly useful for people to know when helping you. @@ -75,8 +75,15 @@ subprojects { version minecraft_version mods { - remap(configurations.modCompileOnly) - remap(configurations.modRuntimeOnly) + remap(configurations.modCompileOnly){ + catchAWNamespaceAssertion() + } + remap(configurations.modRuntimeOnly){ + catchAWNamespaceAssertion() + } + modImplementation { + catchAWNamespaceAssertion() + } } mappings { From b43c5f2cb926b9560d22424d59c869979131f124 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Fri, 12 Apr 2024 21:49:17 -0400 Subject: [PATCH 07/13] got common to completly build --- common/src/main/resources/fabric.mod.json | 16 ++++++++++++++++ fabric/build.gradle | 1 + forge/build.gradle | 6 ++++++ 3 files changed, 23 insertions(+) create mode 100644 common/src/main/resources/fabric.mod.json diff --git a/common/src/main/resources/fabric.mod.json b/common/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..d1f720f --- /dev/null +++ b/common/src/main/resources/fabric.mod.json @@ -0,0 +1,16 @@ +{ + "schemaVersion": 1, + "id": "gtcore", + "version": "${version}", + "name": "GT Core", + "description": "Core Items and blocks used by both gti and gt4r", + "authors": [ + "Trinsdar" + ], + "contact": { + "sources": "https://github.com/GregTech-Intergalactical/GT-Core" + }, + + "license": "LGPLv3", + "environment": "*" +} \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 2b06ab9..91b19ff 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -61,6 +61,7 @@ processResources { sourcesJar { from(project(':common').sourceSets.main.allSource) { exclude("gtcore.accesswidener") // duplicate on fabric, unneeded on forge + exclude("fabric.mod.json") } } diff --git a/forge/build.gradle b/forge/build.gradle index f07d0c8..fa14476 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -38,6 +38,12 @@ processResources { } } +sourcesJar { + from(project(':common').sourceSets.main.allSource) { + exclude("fabric.mod.json") + } +} + tasks.withType(JavaCompile).configureEach { source(project(":common").sourceSets.main.allSource) } From 85578c2cdcfcc2ea7bed0a9b7b8714348be9df73 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Sat, 13 Apr 2024 15:41:41 -0400 Subject: [PATCH 08/13] fixed fabric side compile errors --- fabric/build.gradle | 4 ++++ fabric/src/generated/resources/gtcore.accesswidener | 7 ++++++- gradle.properties | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index 91b19ff..6520830 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -27,6 +27,10 @@ dependencies { exclude(group: "com.github.Trins-mods") exclude(group: "com.github.Trinsdar") } + modCompileOnly("mezz.jei:jei-${rootProject.minecraft_version}-fabric:${rootProject.jei_version}"){ + exclude(group: "mezz.jei", module: "jei-1.18.2-fabric-api") + } + modCompileOnly("curse.maven:the-one-probe-fabric-581847:${project.top_fabric_file}") modImplementation(include("io.github.fabricators_of_create:Porting-Lib:${rootProject.port_lib_version}-beta+1.18.2-stable")){ exclude(group: "net.fabricmc.fabric-api") exclude(group: "com.github.LlamaLad7") diff --git a/fabric/src/generated/resources/gtcore.accesswidener b/fabric/src/generated/resources/gtcore.accesswidener index d485042..591012e 100644 --- a/fabric/src/generated/resources/gtcore.accesswidener +++ b/fabric/src/generated/resources/gtcore.accesswidener @@ -6,4 +6,9 @@ accessible field net/minecraft/world/level/biome/Biome$ClimateSettings precipita accessible method net/minecraft/world/level/levelgen/feature/foliageplacers/FoliagePlacerType (Lcom/mojang/serialization/Codec;)V accessible method net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacerType (Lcom/mojang/serialization/Codec;)V extendable method net/minecraft/world/level/levelgen/feature/TreeFeature getMaxFreeTreeHeight (Lnet/minecraft/world/level/LevelSimulatedReader;ILnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/feature/configurations/TreeConfiguration;)I -accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; \ No newline at end of file +accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; +accessible class net/minecraft/client/gui/screens/MenuScreens$ScreenConstructor +accessible class net/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier +accessible method net/minecraft/data/loot/BlockLoot createLeavesDrops (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;[F)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +accessible method net/minecraft/data/loot/BlockLoot createSlabItemTable (Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +accessible method net/minecraft/data/loot/BlockLoot createSingleItemTable (Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 1de7bbd..4f53e10 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ fabric_loader_version=0.15.9 antimatter_version=0.2.1-pre32-1.18.2 tesseract_version=0.2.3-pre4-1.18.2 -jei_version=10.1.0.223 +jei_version=10.2.1.1004 rei_version=8.3.557 terraform_version_forge=3.1.5 terraform_version_fabric=3.1.0 From 0ea1d16d3a79c32f6f00e32c7c77aace7674e879 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Tue, 16 Apr 2024 22:16:28 -0400 Subject: [PATCH 09/13] added cape stuff from gti/gt4r to de-duplicate it --- .../gtcore/GTCore.java | 3 + .../gtcore/data/GTCoreData.java | 18 ++ .../AbstractClientPlayerEntityMixin.java | 41 +++ .../gtcore/proxy/CommonHandler.java | 59 +++++ .../gtcore/textures/capes/braintech.png | Bin 0 -> 12591 bytes .../gtcore/textures/capes/braintech.xcf | Bin 0 -> 14334 bytes .../assets/gtcore/textures/capes/crazy.png | Bin 0 -> 9129 bytes .../assets/gtcore/textures/capes/dev.png | Bin 0 -> 10255 bytes .../assets/gtcore/textures/capes/fake.png | Bin 0 -> 8519 bytes .../assets/gtcore/textures/capes/gold.png | Bin 0 -> 8685 bytes .../textures/capes/minecon-2013-128.png | Bin 0 -> 8966 bytes .../assets/gtcore/textures/capes/mrbrain.png | Bin 0 -> 3279 bytes .../assets/gtcore/textures/capes/silver.png | Bin 0 -> 8927 bytes common/src/main/resources/gtcore.mixins.json | 3 + common/src/main/resources/supporterlist.txt | 248 ++++++++++++++++++ .../src/main/resources/supporterlistgold.txt | 57 ++++ 16 files changed, 429 insertions(+) create mode 100644 common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreData.java create mode 100644 common/src/main/java/io/github/gregtechintergalactical/gtcore/mixin/AbstractClientPlayerEntityMixin.java create mode 100644 common/src/main/java/io/github/gregtechintergalactical/gtcore/proxy/CommonHandler.java create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/braintech.png create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/braintech.xcf create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/crazy.png create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/dev.png create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/fake.png create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/gold.png create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/minecon-2013-128.png create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/mrbrain.png create mode 100644 common/src/main/resources/assets/gtcore/textures/capes/silver.png create mode 100644 common/src/main/resources/supporterlist.txt create mode 100644 common/src/main/resources/supporterlistgold.txt diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/GTCore.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/GTCore.java index 8ad9be3..6282256 100644 --- a/common/src/main/java/io/github/gregtechintergalactical/gtcore/GTCore.java +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/GTCore.java @@ -23,6 +23,7 @@ import io.github.gregtechintergalactical.gtcore.network.MessageCraftingSync; import io.github.gregtechintergalactical.gtcore.network.MessageInventorySync; import io.github.gregtechintergalactical.gtcore.network.MessageTriggerInventorySync; +import io.github.gregtechintergalactical.gtcore.proxy.CommonHandler; import io.github.gregtechintergalactical.gtcore.tree.RubberTree; import io.github.gregtechintergalactical.gtcore.tree.RubberTreeWorldGen; import muramasa.antimatter.AntimatterAPI; @@ -92,6 +93,7 @@ public void onRegistrationEvent(RegistrationEvent event, Side side) { case DATA_INIT -> { SlotTypes.init(); MenuHandlers.init(); + GTCoreData.init(); GTCoreBlocks.init(); GTCoreItems.init(); GTCoreFluids.init(); @@ -114,6 +116,7 @@ public void onRegistrationEvent(RegistrationEvent event, Side side) { case DATA_READY -> { WoodType.register(GTCoreBlocks.RUBBER_WOOD_TYPE); GTCoreRemapping.init(); + CommonHandler.setup(); AntimatterJEIREIPlugin.addItemsToHide(l -> { l.add(AntimatterAPI.get(IAntimatterTool.class, "electric_wrench_alt_lv").getItem()); l.add(AntimatterAPI.get(IAntimatterTool.class, "electric_wrench_alt_mv").getItem()); diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreData.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreData.java new file mode 100644 index 0000000..5e166fd --- /dev/null +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/data/GTCoreData.java @@ -0,0 +1,18 @@ +package io.github.gregtechintergalactical.gtcore.data; + +import io.github.gregtechintergalactical.gtcore.GTCore; +import net.minecraft.resources.ResourceLocation; + +import java.util.HashSet; +import java.util.Set; + +public class GTCoreData { + private static final String CAPE_PATH = "textures/capes/"; + public static final ResourceLocation[] CAPE_LOCATIONS = new ResourceLocation[] {new ResourceLocation(GTCore.ID, CAPE_PATH + "braintech.png"), new ResourceLocation(GTCore.ID, CAPE_PATH + "silver.png"), new ResourceLocation(GTCore.ID, CAPE_PATH + "mrbrain.png"), new ResourceLocation(GTCore.ID, CAPE_PATH + "dev.png"), new ResourceLocation(GTCore.ID, CAPE_PATH + "gold.png"), new ResourceLocation(GTCore.ID, CAPE_PATH + "crazy.png"), new ResourceLocation(GTCore.ID, CAPE_PATH + "fake.png")}; + + public static final Set SupporterListSilver = new HashSet<>(), SupporterListGold = new HashSet<>(); + + public static void init(){ + + } +} diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/mixin/AbstractClientPlayerEntityMixin.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/mixin/AbstractClientPlayerEntityMixin.java new file mode 100644 index 0000000..02ff2d3 --- /dev/null +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/mixin/AbstractClientPlayerEntityMixin.java @@ -0,0 +1,41 @@ +package io.github.gregtechintergalactical.gtcore.mixin; + +import com.mojang.authlib.GameProfile; +import io.github.gregtechintergalactical.gtcore.data.GTCoreData; +import muramasa.antimatter.util.AntimatterPlatformUtils; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.List; + +@Mixin(AbstractClientPlayer.class) +public abstract class AbstractClientPlayerEntityMixin extends Player { + + public AbstractClientPlayerEntityMixin(Level p_i241920_1_, BlockPos p_i241920_2_, float p_i241920_3_, GameProfile p_i241920_4_) { + super(p_i241920_1_, p_i241920_2_, p_i241920_3_, p_i241920_4_); + } + + @Inject(method = "getCloakTextureLocation", at = @At(value = "HEAD"), cancellable = true) + private void getLocationGTCape(CallbackInfoReturnable info){ + String playerName = this.getDisplayName().getString(); + if (!AntimatterPlatformUtils.isProduction()) info.setReturnValue(GTCoreData.CAPE_LOCATIONS[3]); + if (orString(playerName, "GregoriusT", "OvermindDL1", "jihuayu123", "Yuesha_Kev14", "Evanvenir", "Trinsdar")) info.setReturnValue(GTCoreData.CAPE_LOCATIONS[3]); + if (playerName.equals("CrazyJ1984")) info.setReturnValue(GTCoreData.CAPE_LOCATIONS[5]); + if (playerName.equals("Mr_Brain")) info.setReturnValue(GTCoreData.CAPE_LOCATIONS[2]); + if (playerName.equals("Friedi4321")) info.setReturnValue(GTCoreData.CAPE_LOCATIONS[0]); + if (GTCoreData.SupporterListGold.contains(playerName)) info.setReturnValue(GTCoreData.CAPE_LOCATIONS[4]); + if (GTCoreData.SupporterListSilver.contains(playerName)) info.setReturnValue(GTCoreData.CAPE_LOCATIONS[1]); + } + + private boolean orString(String compare, String... strings){ + List list = List.of(strings); + return list.contains(compare); + } +} diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/proxy/CommonHandler.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/proxy/CommonHandler.java new file mode 100644 index 0000000..b9d91a3 --- /dev/null +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/proxy/CommonHandler.java @@ -0,0 +1,59 @@ +package io.github.gregtechintergalactical.gtcore.proxy; + +import io.github.gregtechintergalactical.gtcore.GTCore; +import net.minecraft.core.NonNullList; + +import java.net.URL; +import java.util.List; +import java.util.Scanner; + +import static io.github.gregtechintergalactical.gtcore.data.GTCoreData.SupporterListGold; +import static io.github.gregtechintergalactical.gtcore.data.GTCoreData.SupporterListSilver; + +public class CommonHandler { + public static void setup(){ + new Thread(() -> { + + List + tTextFile = downloadTextFile("updates.gregtech.mechaenetia.com/com/gregoriust/gregtech/supporterlist.txt", false); + if (tTextFile != null && tTextFile.size() > 3) { + SupporterListSilver.addAll(tTextFile); + } else try { + Scanner tScanner = new Scanner(GTCore.class.getResourceAsStream("/supporterlist.txt")); + while (tScanner.hasNextLine()) SupporterListSilver.add(tScanner.nextLine().toLowerCase()); + tScanner.close(); + GTCore.LOGGER.warn("GT_DL_Thread: Failed downloading Silver Supporter List, using interal List!"); + } catch(Throwable exc) {exc.printStackTrace();} + + tTextFile = downloadTextFile("updates.gregtech.mechaenetia.com/com/gregoriust/gregtech/supporterlistgold.txt", false); + if (tTextFile != null && tTextFile.size() > 3) { + SupporterListGold.addAll(tTextFile); + } else try { + Scanner tScanner = new Scanner(GTCore.class.getResourceAsStream("/supporterlistgold.txt")); + while (tScanner.hasNextLine()) SupporterListGold.add(tScanner.nextLine().toLowerCase()); + tScanner.close(); + GTCore.LOGGER.warn("GT_DL_Thread: Failed downloading Gold Supporter List, using interal List!"); + } catch(Throwable exc) {exc.printStackTrace();} + + SupporterListSilver.removeAll(SupporterListGold); + + }).start(); + } + + protected static List downloadTextFile(String aURL, boolean aLowercase) { + List rList = NonNullList.create(); + try { + Scanner tScanner = new Scanner(new URL(aURL.startsWith("http")?aURL:"https://"+aURL).openStream()); + while (tScanner.hasNextLine()) rList.add(aLowercase ? tScanner.nextLine().toLowerCase() : tScanner.nextLine()); + tScanner.close(); + for (String tLine : rList) if (tLine.contains("a href")) { + GTCore.LOGGER.error("GT_DL_Thread: Your Internet Connection has Issues, you should probably go check that your ISP or Network don't do stupid Stuff."); + return NonNullList.create(); + } + return rList; + } catch(Throwable f) { + GTCore.LOGGER.error("GT_DL_Thread: Failed to Connect."); + } + return null; + } +} diff --git a/common/src/main/resources/assets/gtcore/textures/capes/braintech.png b/common/src/main/resources/assets/gtcore/textures/capes/braintech.png new file mode 100644 index 0000000000000000000000000000000000000000..4daeb1f18e77aa1919070c520581cfb195e27e75 GIT binary patch literal 12591 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 UQ4y8M=N~{@!$7@Q)gk160S*pC00000 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/gtcore/textures/capes/fake.png b/common/src/main/resources/assets/gtcore/textures/capes/fake.png new file mode 100644 index 0000000000000000000000000000000000000000..673a74f3da3420361900ec993e18d590e4548e47 GIT binary patch literal 8519 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 DQf}f# literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/gtcore/textures/capes/mrbrain.png b/common/src/main/resources/assets/gtcore/textures/capes/mrbrain.png new file mode 100644 index 0000000000000000000000000000000000000000..116a5b8c71b9600789bbf67bcd033fb3825b8975 GIT binary patch literal 3279 zcmV;=3^4PFP)uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u010qNS#tmY3ljhU3ljkVnw%H_000Mc zNliru+@IeD~^!QclW;3r|=N1@2

J?iD)uof$ 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 DY?8AH literal 0 HcmV?d00001 diff --git a/common/src/main/resources/gtcore.mixins.json b/common/src/main/resources/gtcore.mixins.json index f8b55eb..31aab69 100644 --- a/common/src/main/resources/gtcore.mixins.json +++ b/common/src/main/resources/gtcore.mixins.json @@ -7,5 +7,8 @@ "MixinBlock", "MixinComposterBlock", "MixinMerchantOffer" + ], + "client": [ + "AbstractClientPlayerEntityMixin" ] } \ No newline at end of file diff --git a/common/src/main/resources/supporterlist.txt b/common/src/main/resources/supporterlist.txt new file mode 100644 index 0000000..817923f --- /dev/null +++ b/common/src/main/resources/supporterlist.txt @@ -0,0 +1,248 @@ +OvermindDL1 +Ngar +k0jul +Mehrin +kehaan +Lehran +Yabdat +Goshen +e99999 +leagris +Buuz135 +Vash505 +tyra_oa +jorstar +Ilirith +Totilus +ICaxapI +DragDen +Lagarex +repo_alt +Schlaibi +Axlegear +djflippy +Raganork +TheSkera +DarkYuan +Ferelwing +seregheru +Bear989Sr +Bear989jr +BloodyAsp +kei_kouma +laurynasl +Trilexcom +abestone2 +TOFUFreak +Asturrial +CrazyJ1984 +ElectroBot +buizerd007 +negersvend +KrotanHill +mtimmerije +MTesseracT +MarconosII +pitchcherry +adamcirillo +DarthUmbris +crepes_r_us +TheWorstPHO +GrandKaiser +mrgreenacid +stephen_2015 +PrivateDijon +SweetyLizard +FPSaddiction +InsaneyHaney +WindowsBunny +Demosthenexx +Sovereignty89 +ihategravel22 +GeekTechMedia +123mcprorot123 +Nicholas_Manuel +ArcturusCercilus +DoughnutDev +adamros +alexbegt +manf +Plem +bsaa +Heph +dungi +tworf +Hegik +Stute +SpwnX +Kadah +kanni +Bimgo +Ray_CZ +boredi +cdaser +renadi +x_Fame +Nullav +Onlyme +t3hero +Hotchi +jagoly +BH5432 +Sibmer +Sirbab +inceee +foxxx0 +Hartok +TMSama +Shlnen +Carsso +Cerous +Azuxul +Nohicom +Stijn_A +fry_lad +Moothox +Flaver4 +Jirajha +Dracion +zessirb +meep310 +Seldron +freebug +hohounk +yttr1um +Sylphio +jmarler +semig0d +GeoStyx +Ashleee +XanderT +Asutoro +TexanMD +Xyic0re +estebes +danirpg +Mileaos2 +hanakocz +demanzke +Zero Tw0 +Kris1432 +r00teniy +Neonbeta +yinscape +voooon24 +Quintine +Peach774 +lepthymo +bildeman +Kremnari +Saberawr +Aerosalo +invultri +Axlegear +Lushiita +crdl_pls +Morehatz +stepgoku +__tomm__ +456Xander +cmclouser +phone1246 +Bladezz88 +Ralacroix +kei_kouma +grillo126 +samuraijp +OndraSter +oscares91 +Daxx367x2 +Metonymia +VlexStone +MomoNasty +EGERTRONx +djshiny99 +megatronp +DZCreeper +Kane_Hart +Truculent +vidplace7 +simon6689 +Johnstaal +Abouttabs +aka13_404 +ManuCortex +UltraPeeks +xavier0014 +Resursator +melanclock +bpgames123 +Samalingus +UnknownXLV +goreacraft +9000bowser +malcanteth +BadAlchemy +ultrasn0wz +NanoHeart_ +FenixElite +Spungebubb +ProperSAMA +Cerulean627 +msmilkshake +Thanatos_00 +Beardedflea +MysteryDump +Bkarlsson87 +Fluttermine +Misha999777 +Daddy_Cecil +MrMaleficus +TigersFangs +NikitaBuker +cublikefoot +chainman564 +Berserker66 +Dorfschwein +Briareos1981 +XxinsanityxX +Ultimaheart4 +Ultimabunny4 +MiniKatalyst +Deathlycraft +CaballoCraft +Devilin_Pixy +mattiagraz85 +xander_cage_ +Malevolence_ +25FiveDetail +AntiCivilBoy +Three_Pounds +michaelbrady +sebastiank30 +Sovereignty89 +Speedynutty68 +GarretSidzaka +ArchonCerulean +MatthieuLeDieu +I_h4te_M0nd4ys +HallowCharm977 +mastermind1919 +diamondguy2798 +The_Hypersonic +LuxusDarkangel +Pit_of_Darkness +AndrewAmmerlaan +zF4ll3nPr3d4t0r +Nicholas_Manuel +CodingWithClass +Goshen_Ithilien +SuterusuKusanagi +CrafterOfMines57 +XxELIT3xSNIP3RxX +IAmMinecrafter02 +kastaxoxo +Twigpick +Mine_Sasha +codewarrior +SuperCoder79 diff --git a/common/src/main/resources/supporterlistgold.txt b/common/src/main/resources/supporterlistgold.txt new file mode 100644 index 0000000..528a625 --- /dev/null +++ b/common/src/main/resources/supporterlistgold.txt @@ -0,0 +1,57 @@ +OvermindDL1 +Ngar +k0jul +Mehrin +kehaan +Lehran +Yabdat +Goshen +e99999 +leagris +Buuz135 +Vash505 +tyra_oa +jorstar +Ilirith +Totilus +ICaxapI +DragDen +Lagarex +repo_alt +Schlaibi +Axlegear +djflippy +DarkYuan +Ferelwing +seregheru +Bear989Sr +BloodyAsp +kei_kouma +laurynasl +Trilexcom +abestone2 +TOFUFreak +Asturrial +CrazyJ1984 +ElectroBot +buizerd007 +KrotanHill +mtimmerije +MTesseracT +MarconosII +adamcirillo +DarthUmbris +GrandKaiser +crepes_r_us +TheWorstPHO +mrgreenacid +stephen_2015 +PrivateDijon +SweetyLizard +FPSaddiction +InsaneyHaney +WindowsBunny +Demosthenexx +Sovereignty89 +ihategravel22 +123mcprorot123 From 6d68fe2ee37ec1940223dd244eb6abf7f04f7cdc Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Wed, 15 May 2024 18:09:10 -0400 Subject: [PATCH 10/13] updated unimined, switched to using combineWith for source sets --- build.gradle | 5 ++++- fabric/build.gradle | 4 ---- forge/build.gradle | 6 +----- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 2e20712..039ce44 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ import org.gradle.api.tasks.compile.JavaCompile plugins { id "maven-publish" - id "xyz.wagyourtail.unimined" version "1.2.0-SNAPSHOT" apply false + id "xyz.wagyourtail.unimined" version "1.2.6-SNAPSHOT" apply false } //Print out JVM information so that we know what version is running. Extreamly useful for people to know when helping you. @@ -73,6 +73,9 @@ subprojects { unimined.minecraft(sourceSets.main, true) { version minecraft_version + if (project.name != "common"){ + combineWith(":common:main") + } mods { remap(configurations.modCompileOnly){ diff --git a/fabric/build.gradle b/fabric/build.gradle index 6520830..75bc8b3 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -68,7 +68,3 @@ sourcesJar { exclude("fabric.mod.json") } } - -tasks.withType(JavaCompile).configureEach { - source(project(":common").sourceSets.main.allSource) -} diff --git a/forge/build.gradle b/forge/build.gradle index fa14476..7d60929 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -42,8 +42,4 @@ sourcesJar { from(project(':common').sourceSets.main.allSource) { exclude("fabric.mod.json") } -} - -tasks.withType(JavaCompile).configureEach { - source(project(":common").sourceSets.main.allSource) -} +} \ No newline at end of file From 96f98f38076390e2223de90bdbf1f740f4ffc0ad Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Wed, 15 May 2024 21:41:50 -0400 Subject: [PATCH 11/13] changed a couple things in the build.gradle --- build.gradle | 3 ++- common/build.gradle | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 039ce44..e5cf204 100644 --- a/build.gradle +++ b/build.gradle @@ -74,7 +74,7 @@ subprojects { unimined.minecraft(sourceSets.main, true) { version minecraft_version if (project.name != "common"){ - combineWith(":common:main") + combineWith(project(":common"), project(":common").sourceSets.main) } mods { @@ -91,6 +91,7 @@ subprojects { mappings { mojmap() + devFallbackNamespace "official" devNamespace "mojmap" parchment(rootProject.minecraft_version, rootProject.mappings_version) } diff --git a/common/build.gradle b/common/build.gradle index 2b588df..0be0630 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -6,8 +6,7 @@ version = "${project.mod_version}-${rootProject.minecraft_version}" }*/ unimined.minecraft { - fabric { - loader fabric_loader_version + accessWidener { accessWidener(file("src/main/resources/gtcore.accesswidener")) } From 6382ac819a9adb7b4b581638ca910a13559ced33 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Fri, 17 May 2024 21:42:47 -0400 Subject: [PATCH 12/13] fixed compile error --- build.gradle | 10 ++++++++++ common/build.gradle | 1 + .../gtcore/block/BlockMaterialChest.java | 4 +--- .../gtcore/blockentity/BlockEntityBarrel.java | 2 -- .../gtcore/blockentity/BlockEntityChest.java | 4 +--- common/src/main/resources/fabric.mod.json | 16 ---------------- 6 files changed, 13 insertions(+), 24 deletions(-) delete mode 100644 common/src/main/resources/fabric.mod.json diff --git a/build.gradle b/build.gradle index e5cf204..517b9a5 100644 --- a/build.gradle +++ b/build.gradle @@ -75,6 +75,16 @@ subprojects { version minecraft_version if (project.name != "common"){ combineWith(project(":common"), project(":common").sourceSets.main) + } else { + if (project.name == "common") { + mappings { + intermediary() + } + + mods.modImplementation { + namespace("intermediary") + } + } } mods { diff --git a/common/build.gradle b/common/build.gradle index 0be0630..25b843f 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -14,6 +14,7 @@ unimined.minecraft { } dependencies { + compileOnly("org.spongepowered:mixin:0.8.5") modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" modImplementation("io.github.gregtechintergalactical:antimatter-common:${antimatter_version}"){ exclude(group: "maven.modrinth") diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/block/BlockMaterialChest.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/block/BlockMaterialChest.java index 415477c..f6dc80d 100644 --- a/common/src/main/java/io/github/gregtechintergalactical/gtcore/block/BlockMaterialChest.java +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/block/BlockMaterialChest.java @@ -8,8 +8,6 @@ import muramasa.antimatter.gui.SlotType; import muramasa.antimatter.machine.Tier; import muramasa.antimatter.machine.types.Machine; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.Container; @@ -118,7 +116,7 @@ public boolean triggerEvent(BlockState state, Level worldIn, BlockPos pos, int i return tileentity != null && tileentity.triggerEvent(id, param); } - @Environment(EnvType.CLIENT) + //@Environment(EnvType.CLIENT) public static DoubleBlockCombiner.Combiner getLid(final LidBlockEntity p_226917_0_) { return new DoubleBlockCombiner.Combiner() { @Override diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityBarrel.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityBarrel.java index c73a31d..6a91fd4 100644 --- a/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityBarrel.java +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityBarrel.java @@ -4,8 +4,6 @@ import io.github.gregtechintergalactical.gtcore.machine.MaterialMachine; import muramasa.antimatter.gui.container.ContainerMachine; import muramasa.antimatter.machine.MachineState; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; diff --git a/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityChest.java b/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityChest.java index 9f830a0..ea05682 100644 --- a/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityChest.java +++ b/common/src/main/java/io/github/gregtechintergalactical/gtcore/blockentity/BlockEntityChest.java @@ -7,8 +7,6 @@ import muramasa.antimatter.capability.machine.MachineItemHandler; import muramasa.antimatter.gui.SlotType; import muramasa.antimatter.gui.container.ContainerMachine; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; @@ -123,7 +121,7 @@ private static void playSound(Level world, BlockPos pos, BlockState state, Sound } @Override - @Environment(EnvType.CLIENT) + //@Environment(EnvType.CLIENT) public float getOpenNess(float partialTicks) { return lidController.getOpenness(partialTicks); //return Mth.lerp(partialTicks, this.prevLidAngle, this.lidAngle); diff --git a/common/src/main/resources/fabric.mod.json b/common/src/main/resources/fabric.mod.json deleted file mode 100644 index d1f720f..0000000 --- a/common/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "schemaVersion": 1, - "id": "gtcore", - "version": "${version}", - "name": "GT Core", - "description": "Core Items and blocks used by both gti and gt4r", - "authors": [ - "Trinsdar" - ], - "contact": { - "sources": "https://github.com/GregTech-Intergalactical/GT-Core" - }, - - "license": "LGPLv3", - "environment": "*" -} \ No newline at end of file From a8ce62f89eb49ffb683754640aff7660ce496203 Mon Sep 17 00:00:00 2001 From: trinsdar <30245301+Trinsdar@users.noreply.github.com> Date: Fri, 17 May 2024 22:40:32 -0400 Subject: [PATCH 13/13] disabled accesswidener copying on fabric side --- fabric/build.gradle | 11 ++++------- .../src/generated/resources/gtcore.accesswidener | 14 -------------- forge/build.gradle | 2 +- 3 files changed, 5 insertions(+), 22 deletions(-) delete mode 100644 fabric/src/generated/resources/gtcore.accesswidener diff --git a/fabric/build.gradle b/fabric/build.gradle index 75bc8b3..b7d6426 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -45,16 +45,16 @@ task copyAccessWidener(type: Copy) { into generatedResources } -sourceSets { +/*sourceSets { main { resources { srcDir copyAccessWidener } } -} +}*/ processResources { - dependsOn copyAccessWidener + //dependsOn copyAccessWidener inputs.property "version", project.mod_version filesMatching("fabric.mod.json") { @@ -63,8 +63,5 @@ processResources { } sourcesJar { - from(project(':common').sourceSets.main.allSource) { - exclude("gtcore.accesswidener") // duplicate on fabric, unneeded on forge - exclude("fabric.mod.json") - } + from(project(':common').sourceSets.main.allSource) } diff --git a/fabric/src/generated/resources/gtcore.accesswidener b/fabric/src/generated/resources/gtcore.accesswidener deleted file mode 100644 index 591012e..0000000 --- a/fabric/src/generated/resources/gtcore.accesswidener +++ /dev/null @@ -1,14 +0,0 @@ -accessWidener v1 named - -accessible class net/minecraft/world/level/biome/Biome$ClimateSettings -accessible field net/minecraft/world/level/biome/Biome$ClimateSettings temperature F -accessible field net/minecraft/world/level/biome/Biome$ClimateSettings precipitation Lnet/minecraft/world/level/biome/Biome$Precipitation; -accessible method net/minecraft/world/level/levelgen/feature/foliageplacers/FoliagePlacerType (Lcom/mojang/serialization/Codec;)V -accessible method net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacerType (Lcom/mojang/serialization/Codec;)V -extendable method net/minecraft/world/level/levelgen/feature/TreeFeature getMaxFreeTreeHeight (Lnet/minecraft/world/level/LevelSimulatedReader;ILnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/feature/configurations/TreeConfiguration;)I -accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; -accessible class net/minecraft/client/gui/screens/MenuScreens$ScreenConstructor -accessible class net/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier -accessible method net/minecraft/data/loot/BlockLoot createLeavesDrops (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;[F)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; -accessible method net/minecraft/data/loot/BlockLoot createSlabItemTable (Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; -accessible method net/minecraft/data/loot/BlockLoot createSingleItemTable (Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index 7d60929..79fa695 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -40,6 +40,6 @@ processResources { sourcesJar { from(project(':common').sourceSets.main.allSource) { - exclude("fabric.mod.json") + exclude("gtcore.accesswidener") } } \ No newline at end of file