diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 823aca8..ccb0c56 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,19 @@ -# gradle - -.gradle/ -out/ -classes/ build/ - -# idea - -.idea/ -*.iml *.ipr +run/ *.iws - -# vscode - -.settings/ -.vscode/ +out/ +*.iml +.gradle/ +output/ bin/ +libs/ + .classpath .project - -# fabric - -run/ \ No newline at end of file +.idea/ +classes/ +.metadata +.vscode +.settings +*.launch \ No newline at end of file diff --git a/build.gradle b/build.gradle old mode 100755 new mode 100644 index 6746173..fabba74 --- a/build.gradle +++ b/build.gradle @@ -1,82 +1,47 @@ plugins { - id 'fabric-loom' version '0.11-SNAPSHOT' - id 'maven-publish' + id "architectury-plugin" version "3.4-SNAPSHOT" + id "dev.architectury.loom" version "1.0-SNAPSHOT" apply false } -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 - -archivesBaseName = project.archives_base_name -version = project.mod_version -group = project.maven_group - -repositories { - maven { url "https://maven.terraformersmc.com/releases" } - maven { url "https://jitpack.io" } +architectury { + minecraft = rootProject.minecraft_version } -dependencies { - //to change the versions see the gradle.properties file - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" +subprojects { + apply plugin: "dev.architectury.loom" - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - - modImplementation ("com.terraformersmc:modmenu:${project.mod_menu_version}") + dependencies { + minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" + // The following line declares the mojmap mappings, you may use other mappings as well + //mappings loom.officialMojangMappings() + // The following line declares the yarn mappings you may select this one as well. + mappings "net.fabricmc:yarn:1.19.2+build.3:v2" + } } -processResources { - inputs.property "version", project.version +allprojects { + apply plugin: "java" + apply plugin: "architectury-plugin" + apply plugin: "maven-publish" - filesMatching("fabric.mod.json") { - expand "version": project.version - } -} - -tasks.withType(JavaCompile).configureEach { - // ensure that the encoding is set to UTF-8, no matter what the system default is - // this fixes some edge cases with special characters not displaying correctly - // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html - // If Javadoc is generated, this must be specified in that task too. - it.options.encoding = "UTF-8" - - // Minecraft 1.17 (21w19a) upwards uses Java 16. - it.options.release = 17 -} - -java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. - withSourcesJar() -} - -jar { - from("LICENSE") { - rename { "${it}_${project.archivesBaseName}"} - } -} - -// configure the maven publication -publishing { - publications { - mavenJava(MavenPublication) { - // add all the jars that should be included when publishing to maven - artifact(remapJar) { - builtBy remapJar - } - artifact(sourcesJar) { - builtBy remapSourcesJar - } - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. - } + archivesBaseName = rootProject.archives_base_name + version = rootProject.mod_version + group = rootProject.maven_group + + repositories { + // Add repositories to retrieve artifacts from in here. + // You should only use this when depending on other mods because + // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. + // See https://docs.gradle.org/current/userguide/declaring_repositories.html + // for more information about repositories. + } + + tasks.withType(JavaCompile) { + options.encoding = "UTF-8" + options.release = 17 + } + + java { + withSourcesJar() + } } diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 0000000..4b57e84 --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,26 @@ +architectury { + common(rootProject.enabled_platforms.split(",")) +} + +loom { +} + +dependencies { + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies + // Do NOT use other classes from fabric loader + modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" +} + +publishing { + publications { + mavenCommon(MavenPublication) { + artifactId = rootProject.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/common/src/main/java/eu/midnightdust/core/MidnightLibClient.java b/common/src/main/java/eu/midnightdust/core/MidnightLibClient.java new file mode 100755 index 0000000..549c7a1 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/core/MidnightLibClient.java @@ -0,0 +1,21 @@ +package eu.midnightdust.core; + +import eu.midnightdust.core.config.MidnightLibConfig; +import eu.midnightdust.hats.web.HatLoader; +import eu.midnightdust.lib.config.MidnightConfig; + +import java.util.ArrayList; +import java.util.List; + +public class MidnightLibClient { + public static List hiddenMods = new ArrayList<>(); + + public static final String MOD_ID = "midnightlib"; + + public static void onInitializeClient() { + MidnightConfig.init("midnightlib", MidnightLibConfig.class); + hiddenMods.add("puzzle"); + + if (MidnightLibConfig.special_hats) HatLoader.init(); + } +} diff --git a/src/main/java/eu/midnightdust/core/MidnightLibServer.java b/common/src/main/java/eu/midnightdust/core/MidnightLibServer.java similarity index 75% rename from src/main/java/eu/midnightdust/core/MidnightLibServer.java rename to common/src/main/java/eu/midnightdust/core/MidnightLibServer.java index 966acb1..50c0349 100755 --- a/src/main/java/eu/midnightdust/core/MidnightLibServer.java +++ b/common/src/main/java/eu/midnightdust/core/MidnightLibServer.java @@ -1,15 +1,14 @@ package eu.midnightdust.core; +import eu.midnightdust.core.config.MidnightLibConfig; import eu.midnightdust.lib.config.AutoCommand; import eu.midnightdust.lib.config.MidnightConfig; -import net.fabricmc.api.DedicatedServerModInitializer; import java.lang.reflect.Field; -public class MidnightLibServer implements DedicatedServerModInitializer { +public class MidnightLibServer { - @Override - public void onInitializeServer() { + public static void onInitializeServer() { MidnightConfig.configClass.forEach((modid, config) -> { for (Field field : config.getFields()) { if (field.isAnnotationPresent(MidnightConfig.Entry.class) && !field.isAnnotationPresent(MidnightConfig.Client.class) && !field.isAnnotationPresent(MidnightConfig.Hidden.class)) diff --git a/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java b/common/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java old mode 100755 new mode 100644 similarity index 74% rename from src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java rename to common/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java index f9412a2..8c7e80e --- a/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java +++ b/common/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java @@ -1,12 +1,12 @@ package eu.midnightdust.core.config; import eu.midnightdust.lib.config.MidnightConfig; -import net.fabricmc.loader.api.FabricLoader; +import eu.midnightdust.lib.util.PlatformVariables; public class MidnightLibConfig extends MidnightConfig { @Comment(centered = true) public static Comment midnightlib_description; @Entry // Enable or disable the MidnightConfig overview screen button - public static ConfigButton config_screen_list = FabricLoader.getInstance().isModLoaded("modmenu") ? ConfigButton.MODMENU : ConfigButton.TRUE; + public static ConfigButton config_screen_list = PlatformVariables.isModLoaded("modmenu") ? ConfigButton.MODMENU : ConfigButton.TRUE; @Comment(centered = true) public static Comment midnighthats_description; @Entry // Enable or disable hats for contributors, friends and donors. public static boolean special_hats = true; diff --git a/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java b/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java similarity index 90% rename from src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java rename to common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java index c6b0fc3..c5d2cdd 100755 --- a/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java +++ b/common/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java @@ -2,8 +2,8 @@ package eu.midnightdust.core.mixin; import eu.midnightdust.core.config.MidnightLibConfig; import eu.midnightdust.core.screen.MidnightConfigOverviewScreen; +import eu.midnightdust.lib.util.PlatformVariables; import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget; -import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.OptionsScreen; import net.minecraft.text.Text; @@ -24,7 +24,7 @@ public class MixinOptionsScreen extends Screen { @Inject(at = @At("HEAD"),method = "init") private void midnightlib$init(CallbackInfo ci) { - if (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.TRUE) || (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.MODMENU) && !FabricLoader.getInstance().isModLoaded("modmenu"))) + if (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.TRUE) || (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.MODMENU) && !PlatformVariables.isModLoaded("modmenu"))) this.addDrawableChild(new TexturedOverlayButtonWidget(this.width / 2 + 158, this.height / 6 - 12, 20, 20, 0, 0, 20, MIDNIGHTLIB_ICON_TEXTURE, 32, 64, (buttonWidget) -> Objects.requireNonNull(client).setScreen(new MidnightConfigOverviewScreen(this)), Text.translatable("midnightlib.overview.title"))); } } diff --git a/src/main/java/eu/midnightdust/core/mixin/MixinPlayerEntityRenderer.java b/common/src/main/java/eu/midnightdust/core/mixin/MixinPlayerEntityRenderer.java similarity index 100% rename from src/main/java/eu/midnightdust/core/mixin/MixinPlayerEntityRenderer.java rename to common/src/main/java/eu/midnightdust/core/mixin/MixinPlayerEntityRenderer.java diff --git a/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java b/common/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java similarity index 100% rename from src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java rename to common/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java diff --git a/src/main/java/eu/midnightdust/hats/web/HatLoader.java b/common/src/main/java/eu/midnightdust/hats/web/HatLoader.java similarity index 96% rename from src/main/java/eu/midnightdust/hats/web/HatLoader.java rename to common/src/main/java/eu/midnightdust/hats/web/HatLoader.java index 79f1f76..e6e9e27 100755 --- a/src/main/java/eu/midnightdust/hats/web/HatLoader.java +++ b/common/src/main/java/eu/midnightdust/hats/web/HatLoader.java @@ -11,7 +11,9 @@ import java.io.Reader; import java.lang.reflect.Type; import java.net.MalformedURLException; import java.net.URL; -import java.util.*; +import java.util.Collections; +import java.util.Map; +import java.util.UUID; import java.util.concurrent.CompletableFuture; @SuppressWarnings("UnstableApiUsage") diff --git a/src/main/java/eu/midnightdust/hats/web/PlayerHatData.java b/common/src/main/java/eu/midnightdust/hats/web/PlayerHatData.java similarity index 100% rename from src/main/java/eu/midnightdust/hats/web/PlayerHatData.java rename to common/src/main/java/eu/midnightdust/hats/web/PlayerHatData.java diff --git a/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java b/common/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java similarity index 100% rename from src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java rename to common/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java diff --git a/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java b/common/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java similarity index 76% rename from src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java rename to common/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java index 0f38baa..38b6288 100755 --- a/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java +++ b/common/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java @@ -7,7 +7,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; public class WitchHatModel extends SinglePartEntityModel { - private final ModelPart headwear; + private final ModelPart headwear; public WitchHatModel(ModelPart root) { headwear = root; @@ -37,13 +37,13 @@ public class WitchHatModel extends SinglePartEntityModel return modelData; } - @Override - public void setAngles(T entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { - } + @Override + public void setAngles(T entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + } - @Override - public void render(MatrixStack matrixStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){ - headwear.render(matrixStack, buffer, packedLight, packedOverlay, red, green, blue, alpha); + @Override + public void render(MatrixStack matrixStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){ + headwear.render(matrixStack, buffer, packedLight, packedOverlay, red, green, blue, alpha); } @Override @@ -51,9 +51,9 @@ public class WitchHatModel extends SinglePartEntityModel return headwear; } - public void setRotationAngle(ModelPart bone, float x, float y, float z) { - bone.pitch = x; - bone.yaw = y; - bone.roll = z; + public void setRotationAngle(ModelPart bone, float x, float y, float z) { + bone.pitch = x; + bone.yaw = y; + bone.roll = z; } } \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/lib/config/AutoCommand.java b/common/src/main/java/eu/midnightdust/lib/config/AutoCommand.java similarity index 86% rename from src/main/java/eu/midnightdust/lib/config/AutoCommand.java rename to common/src/main/java/eu/midnightdust/lib/config/AutoCommand.java index e63e39e..a94b984 100644 --- a/src/main/java/eu/midnightdust/lib/config/AutoCommand.java +++ b/common/src/main/java/eu/midnightdust/lib/config/AutoCommand.java @@ -4,15 +4,18 @@ import com.mojang.brigadier.arguments.DoubleArgumentType; import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import eu.midnightdust.lib.util.PlatformVariables; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.Text; import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; public class AutoCommand { + public static List> commands = new ArrayList<>(); private LiteralArgumentBuilder command; final Field entry; final String modid; @@ -27,7 +30,7 @@ public class AutoCommand { command(); LiteralArgumentBuilder finalized = CommandManager.literal("midnightconfig").requires(source -> source.hasPermissionLevel(2)).then(command); - CommandRegistrationCallback.EVENT.register((dispatcher, dedicated, registrationEnvironment) -> dispatcher.register(finalized)); + PlatformVariables.registerCommand(finalized); commands.add(finalized); } private void command() { @@ -61,10 +64,10 @@ public class AutoCommand { } } else - command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( - CommandManager.argument("value", StringArgumentType.string()) - .executes(ctx -> this.setValue(ctx.getSource(), StringArgumentType.getString(ctx, "value"))) - )); + command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( + CommandManager.argument("value", StringArgumentType.string()) + .executes(ctx -> this.setValue(ctx.getSource(), StringArgumentType.getString(ctx, "value"))) + )); } private int setValue(ServerCommandSource source, Object value) { diff --git a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java similarity index 98% rename from src/main/java/eu/midnightdust/lib/config/MidnightConfig.java rename to common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index ddd7a6e..f2a89e4 100755 --- a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/common/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -4,9 +4,9 @@ import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import eu.midnightdust.lib.util.PlatformVariables; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; @@ -74,13 +74,13 @@ public abstract class MidnightConfig { private static final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).excludeFieldsWithModifiers(Modifier.PRIVATE).addSerializationExclusionStrategy(new HiddenAnnotationExclusionStrategy()).setPrettyPrinting().create(); public static void init(String modid, Class config) { - path = FabricLoader.getInstance().getConfigDir().resolve(modid + ".json"); + path = PlatformVariables.getConfigDirectory().resolve(modid + ".json"); configClass.put(modid, config); for (Field field : config.getFields()) { EntryInfo info = new EntryInfo(); if ((field.isAnnotationPresent(Entry.class) || field.isAnnotationPresent(Comment.class)) && !field.isAnnotationPresent(Server.class) && !field.isAnnotationPresent(Hidden.class)) - if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) initClient(modid, field, info); + if (PlatformVariables.isClientEnv()) initClient(modid, field, info); if (field.isAnnotationPresent(Comment.class)) info.centered = field.getAnnotation(Comment.class).centered(); if (field.isAnnotationPresent(Entry.class)) try { @@ -174,7 +174,7 @@ public abstract class MidnightConfig { } public static void write(String modid) { - path = FabricLoader.getInstance().getConfigDir().resolve(modid + ".json"); + path = PlatformVariables.getConfigDirectory().resolve(modid + ".json"); try { if (!Files.exists(path)) Files.createFile(path); Files.write(path, gson.toJson(configClass.get(modid).getDeclaredConstructor().newInstance()).getBytes()); diff --git a/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java b/common/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java similarity index 96% rename from src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java rename to common/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java index f46f972..b627121 100755 --- a/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java +++ b/common/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java @@ -1,6 +1,6 @@ package eu.midnightdust.lib.util; -import java.awt.Color; +import java.awt.*; public class MidnightColorUtil { public static float hue; diff --git a/src/main/java/eu/midnightdust/lib/util/MidnightMathUtil.java b/common/src/main/java/eu/midnightdust/lib/util/MidnightMathUtil.java similarity index 100% rename from src/main/java/eu/midnightdust/lib/util/MidnightMathUtil.java rename to common/src/main/java/eu/midnightdust/lib/util/MidnightMathUtil.java diff --git a/common/src/main/java/eu/midnightdust/lib/util/PlatformVariables.java b/common/src/main/java/eu/midnightdust/lib/util/PlatformVariables.java new file mode 100644 index 0000000..a30488d --- /dev/null +++ b/common/src/main/java/eu/midnightdust/lib/util/PlatformVariables.java @@ -0,0 +1,32 @@ +package eu.midnightdust.lib.util; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.minecraft.server.command.ServerCommandSource; + +import java.nio.file.Path; +import java.util.function.Supplier; + +public class PlatformVariables { + @ExpectPlatform + public static Path getConfigDirectory() { + // Just throw an error, the content should get replaced at runtime. + throw new AssertionError(); + } + @ExpectPlatform + public static boolean isClientEnv() { + // Just throw an error, the content should get replaced at runtime. + throw new AssertionError(); + } + @ExpectPlatform + public static boolean isModLoaded(String modid) { + // Just throw an error, the content should get replaced at runtime. + throw new AssertionError(); + } + @ExpectPlatform + public static void registerCommand(LiteralArgumentBuilder command) { + // Just throw an error, the content should get replaced at runtime. + throw new AssertionError(); + } +} diff --git a/src/main/java/eu/midnightdust/lib/util/screen/TexturedOverlayButtonWidget.java b/common/src/main/java/eu/midnightdust/lib/util/screen/TexturedOverlayButtonWidget.java similarity index 100% rename from src/main/java/eu/midnightdust/lib/util/screen/TexturedOverlayButtonWidget.java rename to common/src/main/java/eu/midnightdust/lib/util/screen/TexturedOverlayButtonWidget.java diff --git a/common/src/main/resources/architectury.common.json b/common/src/main/resources/architectury.common.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/common/src/main/resources/architectury.common.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/assets/midnightlib/icon.png b/common/src/main/resources/assets/midnightlib/icon.png similarity index 100% rename from src/main/resources/assets/midnightlib/icon.png rename to common/src/main/resources/assets/midnightlib/icon.png diff --git a/src/main/resources/assets/midnightlib/lang/de_de.json b/common/src/main/resources/assets/midnightlib/lang/de_de.json similarity index 100% rename from src/main/resources/assets/midnightlib/lang/de_de.json rename to common/src/main/resources/assets/midnightlib/lang/de_de.json diff --git a/src/main/resources/assets/midnightlib/lang/en_us.json b/common/src/main/resources/assets/midnightlib/lang/en_us.json similarity index 100% rename from src/main/resources/assets/midnightlib/lang/en_us.json rename to common/src/main/resources/assets/midnightlib/lang/en_us.json diff --git a/src/main/resources/assets/midnightlib/lang/pt_br.json b/common/src/main/resources/assets/midnightlib/lang/pt_br.json similarity index 100% rename from src/main/resources/assets/midnightlib/lang/pt_br.json rename to common/src/main/resources/assets/midnightlib/lang/pt_br.json diff --git a/src/main/resources/assets/midnightlib/lang/uk_ua.json b/common/src/main/resources/assets/midnightlib/lang/uk_ua.json similarity index 100% rename from src/main/resources/assets/midnightlib/lang/uk_ua.json rename to common/src/main/resources/assets/midnightlib/lang/uk_ua.json diff --git a/src/main/resources/assets/midnightlib/textures/gui/midnightlib_button.png b/common/src/main/resources/assets/midnightlib/textures/gui/midnightlib_button.png similarity index 100% rename from src/main/resources/assets/midnightlib/textures/gui/midnightlib_button.png rename to common/src/main/resources/assets/midnightlib/textures/gui/midnightlib_button.png diff --git a/src/main/resources/assets/midnightlib/textures/hats/overlay.png b/common/src/main/resources/assets/midnightlib/textures/hats/overlay.png similarity index 100% rename from src/main/resources/assets/midnightlib/textures/hats/overlay.png rename to common/src/main/resources/assets/midnightlib/textures/hats/overlay.png diff --git a/src/main/resources/midnightlib.mixins.json b/common/src/main/resources/midnightlib.mixins.json old mode 100755 new mode 100644 similarity index 76% rename from src/main/resources/midnightlib.mixins.json rename to common/src/main/resources/midnightlib.mixins.json index 5060852..6871913 --- a/src/main/resources/midnightlib.mixins.json +++ b/common/src/main/resources/midnightlib.mixins.json @@ -1,7 +1,8 @@ { "required": true, + "minVersion": "0.8", "package": "eu.midnightdust.core.mixin", - "compatibilityLevel": "JAVA_16", + "compatibilityLevel": "JAVA_17", "client": [ "MixinOptionsScreen", "MixinPlayerEntityRenderer" diff --git a/fabric-like/build.gradle b/fabric-like/build.gradle new file mode 100644 index 0000000..8d69c87 --- /dev/null +++ b/fabric-like/build.gradle @@ -0,0 +1,19 @@ +architectury { + common(rootProject.enabled_platforms.split(",")) +} +repositories { + maven { url "https://maven.terraformersmc.com/releases" } +} + +loom { +} + +dependencies { + modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" + modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" + // Remove the next line if you don't want to depend on the API + modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}" + modImplementation ("com.terraformersmc:modmenu:${rootProject.mod_menu_version}") + + compileClasspath(project(path: ":common", configuration: "namedElements")) { transitive false } +} diff --git a/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java b/fabric-like/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java similarity index 81% rename from src/main/java/eu/midnightdust/lib/config/AutoModMenu.java rename to fabric-like/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java index 0435997..4a16c68 100755 --- a/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java +++ b/fabric-like/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java @@ -19,9 +19,9 @@ public class AutoModMenu implements ModMenuApi { public Map> getProvidedConfigScreenFactories() { HashMap> map = new HashMap<>(); MidnightConfig.configClass.forEach((modid, cClass) -> { - if (!MidnightLibClient.hiddenMods.contains(modid)) - map.put(modid, parent -> MidnightConfig.getScreen(parent, modid)); - } + if (!MidnightLibClient.hiddenMods.contains(modid)) + map.put(modid, parent -> MidnightConfig.getScreen(parent, modid)); + } ); return map; } diff --git a/fabric/build.gradle b/fabric/build.gradle new file mode 100644 index 0000000..c282345 --- /dev/null +++ b/fabric/build.gradle @@ -0,0 +1,81 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" +} + +architectury { + platformSetupLoomIde() + fabric() +} + +loom { +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common +} + +dependencies { + 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")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + common(project(path: ":fabric-like", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":fabric-like", configuration: "transformProductionFabric")) { transitive false } +} + +processResources { + inputs.property "version", project.version + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +shadowJar { + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + injectAccessWidener = true + input.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/src/main/java/eu/midnightdust/core/MidnightLibClient.java b/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibClientFabric.java old mode 100755 new mode 100644 similarity index 52% rename from src/main/java/eu/midnightdust/core/MidnightLibClient.java rename to fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibClientFabric.java index 5381cc0..41c8057 --- a/src/main/java/eu/midnightdust/core/MidnightLibClient.java +++ b/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibClientFabric.java @@ -1,29 +1,17 @@ -package eu.midnightdust.core; +package eu.midnightdust.fabric.core; -import eu.midnightdust.core.config.MidnightLibConfig; -import eu.midnightdust.hats.web.HatLoader; +import eu.midnightdust.core.MidnightLibClient; import eu.midnightdust.hats.witch.WitchHatFeatureRenderer; -import eu.midnightdust.lib.config.MidnightConfig; import eu.midnightdust.lib.util.MidnightColorUtil; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; -import java.util.ArrayList; -import java.util.List; - -public class MidnightLibClient implements ClientModInitializer { - public static List hiddenMods = new ArrayList<>(); - - public static final String MOD_ID = "midnightlib"; - +public class MidnightLibClientFabric implements ClientModInitializer { @Override public void onInitializeClient() { - MidnightConfig.init("midnightlib", MidnightLibConfig.class); - hiddenMods.add("puzzle"); - EntityModelLayerRegistry.registerModelLayer(WitchHatFeatureRenderer.WITCH_HAT_MODEL_LAYER, WitchHatFeatureRenderer::getTexturedModelData); - if (MidnightLibConfig.special_hats) HatLoader.init(); + MidnightLibClient.onInitializeClient(); ClientTickEvents.END_CLIENT_TICK.register( client -> MidnightColorUtil.tick() ); diff --git a/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibServerFabric.java b/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibServerFabric.java new file mode 100644 index 0000000..90fb7bb --- /dev/null +++ b/fabric/src/main/java/eu/midnightdust/fabric/core/MidnightLibServerFabric.java @@ -0,0 +1,11 @@ +package eu.midnightdust.fabric.core; + +import eu.midnightdust.core.MidnightLibServer; +import net.fabricmc.api.DedicatedServerModInitializer; + +public class MidnightLibServerFabric implements DedicatedServerModInitializer { + @Override + public void onInitializeServer() { + MidnightLibServer.onInitializeServer(); + } +} diff --git a/fabric/src/main/java/eu/midnightdust/lib/util/fabric/PlatformVariablesImpl.java b/fabric/src/main/java/eu/midnightdust/lib/util/fabric/PlatformVariablesImpl.java new file mode 100644 index 0000000..918d448 --- /dev/null +++ b/fabric/src/main/java/eu/midnightdust/lib/util/fabric/PlatformVariablesImpl.java @@ -0,0 +1,28 @@ +package eu.midnightdust.lib.util.fabric; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import eu.midnightdust.lib.util.PlatformVariables; +import net.fabricmc.api.EnvType; +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.server.command.ServerCommandSource; + +import java.nio.file.Path; + +public class PlatformVariablesImpl { + /** + * This is our actual method to {@link PlatformVariables#getConfigDirectory()}. + */ + public static Path getConfigDirectory() { + return FabricLoader.getInstance().getConfigDir(); + } + public static boolean isClientEnv() { + return FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT; + } + public static boolean isModLoaded(String modid) { + return FabricLoader.getInstance().isModLoaded(modid); + } + public static void registerCommand(LiteralArgumentBuilder command) { + CommandRegistrationCallback.EVENT.register((dispatcher, dedicated, registrationEnvironment) -> dispatcher.register(command)); + } +} diff --git a/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json old mode 100755 new mode 100644 similarity index 90% rename from src/main/resources/fabric.mod.json rename to fabric/src/main/resources/fabric.mod.json index 3681d0f..39b136c --- a/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -21,10 +21,10 @@ "environment": "*", "entrypoints": { "client": [ - "eu.midnightdust.core.MidnightLibClient" + "eu.midnightdust.fabric.core.MidnightLibClientFabric" ], "server": [ - "eu.midnightdust.core.MidnightLibServer" + "eu.midnightdust.fabric.core.MidnightLibServerFabric" ], "modmenu": [ "eu.midnightdust.lib.config.AutoModMenu" diff --git a/forge/build.gradle b/forge/build.gradle new file mode 100644 index 0000000..2bc05c3 --- /dev/null +++ b/forge/build.gradle @@ -0,0 +1,81 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" +} + +architectury { + platformSetupLoomIde() + forge() +} + +loom { + forge { + mixinConfig "midnightlib.mixins.json" + } +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentForge.extendsFrom common +} + +dependencies { + forge "net.minecraftforge:forge:${rootProject.forge_version}" + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } +} + +processResources { + inputs.property "version", project.version + + filesMatching("META-INF/mods.toml") { + expand "version": project.version + } +} + +shadowJar { + exclude "fabric.mod.json" + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenForge(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/forge/gradle.properties b/forge/gradle.properties new file mode 100644 index 0000000..32f842a --- /dev/null +++ b/forge/gradle.properties @@ -0,0 +1 @@ +loom.platform=forge \ No newline at end of file diff --git a/forge/src/main/java/eu/midnightdust/forge/MidnightLibEvents.java b/forge/src/main/java/eu/midnightdust/forge/MidnightLibEvents.java new file mode 100644 index 0000000..4603c8c --- /dev/null +++ b/forge/src/main/java/eu/midnightdust/forge/MidnightLibEvents.java @@ -0,0 +1,31 @@ +package eu.midnightdust.forge; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import eu.midnightdust.hats.witch.WitchHatFeatureRenderer; +import eu.midnightdust.lib.config.AutoCommand; +import eu.midnightdust.lib.util.MidnightColorUtil; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = "midnightlib", bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) +public class MidnightLibEvents { + @SubscribeEvent + public static void registerLayerDefinition(EntityRenderersEvent.RegisterLayerDefinitions event) { + event.registerLayerDefinition(WitchHatFeatureRenderer.WITCH_HAT_MODEL_LAYER, WitchHatFeatureRenderer::getTexturedModelData); + } + @SubscribeEvent + public void registerCommands(RegisterCommandsEvent event) { + for (LiteralArgumentBuilder command : AutoCommand.commands){ + event.getDispatcher().register(command); + } + } + @SubscribeEvent + public void registerClientTick(TickEvent.ClientTickEvent event) { + MidnightColorUtil.tick(); + } +} diff --git a/forge/src/main/java/eu/midnightdust/forge/MidnightLibForge.java b/forge/src/main/java/eu/midnightdust/forge/MidnightLibForge.java new file mode 100644 index 0000000..809c501 --- /dev/null +++ b/forge/src/main/java/eu/midnightdust/forge/MidnightLibForge.java @@ -0,0 +1,38 @@ +package eu.midnightdust.forge; + +import eu.midnightdust.core.MidnightLibClient; +import eu.midnightdust.core.MidnightLibServer; +import eu.midnightdust.lib.config.MidnightConfig; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.ConfigScreenHandler; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.IExtensionPoint; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.network.NetworkConstants; + +@Mod("midnightlib") +public class MidnightLibForge { + public MidnightLibForge() { + // Submit our event bus to let architectury register our content on the right time + //EventBuses.registerModEventBus("midnightlib", FMLJavaModLoadingContext.get().getModEventBus()); + ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (remote, server) -> true)); + DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> MidnightLibClient::onInitializeClient); + DistExecutor.safeRunWhenOn(Dist.DEDICATED_SERVER, () -> MidnightLibServer::onInitializeServer); + ModList.get().applyForEachModContainer(modContainer -> { + if (MidnightConfig.configClass.containsKey(modContainer.getModId())) { + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> + new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, modContainer.getModId()))); + } + System.out.println(modContainer.getModId()); + System.out.println("motschen"); + return true; + } + ); + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> + new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, "midnightlib"))); + MinecraftForge.EVENT_BUS.register(new MidnightLibEvents()); + } +} diff --git a/forge/src/main/java/eu/midnightdust/lib/util/forge/PlatformVariablesImpl.java b/forge/src/main/java/eu/midnightdust/lib/util/forge/PlatformVariablesImpl.java new file mode 100644 index 0000000..33f9fd3 --- /dev/null +++ b/forge/src/main/java/eu/midnightdust/lib/util/forge/PlatformVariablesImpl.java @@ -0,0 +1,29 @@ +package eu.midnightdust.lib.util.forge; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import eu.midnightdust.lib.util.PlatformVariables; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.fml.loading.FMLPaths; + +import java.nio.file.Path; + +public class PlatformVariablesImpl { + /** + * This is our actual method to {@link PlatformVariables#getConfigDirectory()}. + */ + public static Path getConfigDirectory() { + return FMLPaths.CONFIGDIR.get(); + } + public static boolean isClientEnv() { + return FMLEnvironment.dist.isClient(); + } + public static boolean isModLoaded(String modid) { + return ModList.get().isLoaded(modid); + } + public static void registerCommand(LiteralArgumentBuilder command) { + // Ignored here, see MidnightLibEvents#registerCommands + } +} diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..f35466c --- /dev/null +++ b/forge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,28 @@ +modLoader = "javafml" +loaderVersion = "[43,)" +#issueTrackerURL = "" +license = "MIT License" + +[[mods]] +modId = "midnightlib" +version = "${version}" +displayName = "MidnightLib" +authors = "TeamMidnightDust, Motschen" +description = ''' +Common Library for Team MidnightDust's mods. +''' +#logoFile = "" + +[[dependencies.midnightlib]] +modId = "forge" +mandatory = true +versionRange = "[43,)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.midnightlib]] +modId = "minecraft" +mandatory = true +versionRange = "[1.19.2,)" +ordering = "NONE" +side = "BOTH" \ No newline at end of file diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..0a839a6 --- /dev/null +++ b/forge/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "MidnightLib", + "pack_format": 9 + } +} diff --git a/gradle.properties b/gradle.properties old mode 100755 new mode 100644 index ca9e55f..f4d5280 --- a/gradle.properties +++ b/gradle.properties @@ -1,18 +1,19 @@ -# Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx4096M -# Fabric Properties - # check these on https://fabricmc.net/use - minecraft_version=1.19-rc2 - yarn_mappings=1.19-rc2+build.1 - loader_version=0.14.6 +minecraft_version=1.19.2 +enabled_platforms=quilt,fabric,forge -# Mod Properties - mod_version = 0.6.2 - maven_group = eu.midnightdust - archives_base_name = midnightlib +archives_base_name=midnightlib +mod_version=1.0.0 +maven_group=eu.midnightdust -# Dependencies - # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.55.1+1.19 - mod_menu_version = 4.0.0-beta.4 +architectury_version=6.2.43 + +fabric_loader_version=0.14.9 +fabric_api_version=0.59.0+1.19.2 + +forge_version=1.19.2-43.0.8 + +quilt_loader_version=0.17.2-beta.3 +quilt_fabric_api_version=4.0.0-beta.7+0.59.0-1.19.2 +mod_menu_version = 4.0.6 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180..249e583 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a2..ae04661 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..a69d9cb 100755 --- a/gradlew +++ b/gradlew @@ -205,6 +205,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..53a6b23 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,89 +1,91 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/logs/latest.log b/logs/latest.log deleted file mode 100755 index e69de29..0000000 diff --git a/quilt/build.gradle b/quilt/build.gradle new file mode 100644 index 0000000..fc809fb --- /dev/null +++ b/quilt/build.gradle @@ -0,0 +1,88 @@ +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" +} + +repositories { + maven { url "https://maven.quiltmc.org/repository/release/" } +} + +architectury { + platformSetupLoomIde() + loader("quilt") +} + +loom { +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentQuilt.extendsFrom common +} + +dependencies { + modImplementation "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}" + modApi "org.quiltmc.quilted-fabric-api:quilted-fabric-api:${rootProject.quilt_fabric_api_version}" + // Remove the next few lines if you don't want to depend on the API + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionQuilt")) { transitive false } + common(project(path: ":fabric-like", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":fabric-like", configuration: "transformProductionQuilt")) { transitive false } +} + +processResources { + inputs.property "group", rootProject.maven_group + inputs.property "version", project.version + + filesMatching("quilt.mod.json") { + expand "group": rootProject.maven_group, + "version": project.version + } +} + +shadowJar { + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + classifier "dev-shadow" +} + +remapJar { + injectAccessWidener = true + input.set shadowJar.archiveFile + dependsOn shadowJar + classifier null +} + +jar { + classifier "dev" +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenQuilt(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/quilt/gradle.properties b/quilt/gradle.properties new file mode 100644 index 0000000..96758ce --- /dev/null +++ b/quilt/gradle.properties @@ -0,0 +1 @@ +loom.platform=quilt \ No newline at end of file diff --git a/quilt/src/main/java/eu/midnightdust/lib/util/quilt/PlatformVariablesImpl.java b/quilt/src/main/java/eu/midnightdust/lib/util/quilt/PlatformVariablesImpl.java new file mode 100644 index 0000000..bb0bbff --- /dev/null +++ b/quilt/src/main/java/eu/midnightdust/lib/util/quilt/PlatformVariablesImpl.java @@ -0,0 +1,30 @@ +package eu.midnightdust.lib.util.quilt; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import eu.midnightdust.lib.util.PlatformVariables; +import net.fabricmc.api.EnvType; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.server.command.ServerCommandSource; +import org.quiltmc.loader.api.QuiltLoader; +import org.quiltmc.loader.impl.QuiltLoaderImpl; +import org.quiltmc.qsl.command.api.CommandRegistrationCallback; + +import java.nio.file.Path; + +public class PlatformVariablesImpl { + /** + * This is our actual method to {@link PlatformVariables#getConfigDirectory()}. + */ + public static Path getConfigDirectory() { + return QuiltLoader.getConfigDir(); + } + public static boolean isClientEnv() { + return QuiltLoaderImpl.INSTANCE.getEnvironmentType() == EnvType.CLIENT; + } + public static boolean isModLoaded(String modid) { + return QuiltLoader.isModLoaded(modid); + } + public static void registerCommand(LiteralArgumentBuilder command) { + CommandRegistrationCallback.EVENT.register((dispatcher, dedicated, registrationEnvironment) -> dispatcher.register(command)); + } +} diff --git a/quilt/src/main/java/eu/midnightdust/quilt/core/MidnightLibClientQuilt.java b/quilt/src/main/java/eu/midnightdust/quilt/core/MidnightLibClientQuilt.java new file mode 100644 index 0000000..e3c5121 --- /dev/null +++ b/quilt/src/main/java/eu/midnightdust/quilt/core/MidnightLibClientQuilt.java @@ -0,0 +1,20 @@ +package eu.midnightdust.quilt.core; + +import eu.midnightdust.core.MidnightLibClient; +import eu.midnightdust.hats.witch.WitchHatFeatureRenderer; +import eu.midnightdust.lib.util.MidnightColorUtil; +import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; +import org.quiltmc.loader.api.ModContainer; +import org.quiltmc.qsl.base.api.entrypoint.client.ClientModInitializer; +import org.quiltmc.qsl.lifecycle.api.client.event.ClientTickEvents; + +public class MidnightLibClientQuilt implements ClientModInitializer { + @Override + public void onInitializeClient(ModContainer mod) { + EntityModelLayerRegistry.registerModelLayer(WitchHatFeatureRenderer.WITCH_HAT_MODEL_LAYER, WitchHatFeatureRenderer::getTexturedModelData); + MidnightLibClient.onInitializeClient(); + ClientTickEvents.END.register( + client -> MidnightColorUtil.tick() + ); + } +} diff --git a/quilt/src/main/java/eu/midnightdust/quilt/core/MidnightLibServerQuilt.java b/quilt/src/main/java/eu/midnightdust/quilt/core/MidnightLibServerQuilt.java new file mode 100644 index 0000000..e37654c --- /dev/null +++ b/quilt/src/main/java/eu/midnightdust/quilt/core/MidnightLibServerQuilt.java @@ -0,0 +1,12 @@ +package eu.midnightdust.quilt.core; + +import eu.midnightdust.core.MidnightLibServer; +import org.quiltmc.loader.api.ModContainer; +import org.quiltmc.qsl.base.api.entrypoint.server.DedicatedServerModInitializer; + +public class MidnightLibServerQuilt implements DedicatedServerModInitializer { + @Override + public void onInitializeServer(ModContainer mod) { + MidnightLibServer.onInitializeServer(); + } +} diff --git a/quilt/src/main/resources/quilt.mod.json b/quilt/src/main/resources/quilt.mod.json new file mode 100644 index 0000000..215efb6 --- /dev/null +++ b/quilt/src/main/resources/quilt.mod.json @@ -0,0 +1,44 @@ +{ + "schema_version": 1, + "quilt_loader": { + "group": "${group}", + "id": "midnightlib", + "version": "${version}", + "name": "MidnightLib", + "description": "Common Library for Team MidnightDust's mods.", + "authors": ["TeamMidnightDust","Motschen"], + "contact": { + "homepage": "https://www.midnightdust.eu/", + "sources": "https://github.com/TeamMidnightDust/MidnightLib", + "issues": "https://github.com/TeamMidnightDust/MidnightLib/issues" + }, + "license": "MIT License", + "icon": "assets/midnightlib/icon.png", + "intermediate_mappings": "net.fabricmc:intermediary", + "environment": "*", + "entrypoints": { + "client": [ + "eu.midnightdust.quilt.core.MidnightLibClientQuilt" + ], + "server": [ + "eu.midnightdust.quilt.core.MidnightLibServerQuilt" + ], + "modmenu": [ + "eu.midnightdust.lib.config.AutoModMenu" + ] + }, + "mixins": [ + "midnightlib.mixins.json" + ], + "depends": [ + { + "id": "quilt_loader", + "version": "*" + }, + { + "id": "quilt_base", + "version": "*" + } + ] + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle old mode 100755 new mode 100644 index 5b60df3..c86c020 --- a/settings.gradle +++ b/settings.gradle @@ -1,10 +1,16 @@ pluginManagement { repositories { - jcenter() - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } + maven { url "https://maven.fabricmc.net/" } + maven { url "https://maven.architectury.dev/" } + maven { url "https://maven.minecraftforge.net/" } gradlePluginPortal() } } + +include("common") +include("fabric-like") +include("fabric") +include("quilt") +include("forge") + +rootProject.name = "midnightlib" diff --git a/src/main/java/eu/midnightdust/lib/config/MidnightConfigExample.java b/src/main/java/eu/midnightdust/lib/config/MidnightConfigExample.java deleted file mode 100644 index 553702a..0000000 --- a/src/main/java/eu/midnightdust/lib/config/MidnightConfigExample.java +++ /dev/null @@ -1,59 +0,0 @@ -package eu.midnightdust.lib.config; - -import java.util.List; - -/** MidnightConfig documentation & examples: - * Thanks for choosing MidnightConfig - the fancy, tiny and lightweight config library. - * If you want to use the lib in your mod, here are some examples and hints: - * Every option in a MidnightConfig class has to be public and static, so we can access it from other classes. - * The config class also has to extend MidnightConfig*/ - -public class MidnightConfigExample extends MidnightConfig { - - @Comment public static Comment text1; // Comments are rendered like an option without a button and are excluded from the config file - @Entry public static int fabric = 16777215; // Example for a int option - @Entry public static double world = 1.4D; // Example for a double option - @Entry public static boolean showInfo = true; // Example for a boolean option - @Entry public static String name = "Hello World!"; // Example for a string option - @Entry public static TestEnum testEnum = TestEnum.FABRIC; // Example for a enum option - public enum TestEnum { // Enums allow the user to cycle through predefined options - QUILT, FABRIC - } - @Entry(min=69,max=420) public static int hello = 420; // - The entered number has to be larger than 69 and smaller than 420 - @Entry(width = 7, min = 7, isColor = true, name = "I am a color!") public static String titleColor = "#ffffff"; // The isColor property adds a preview box for a hexadecimal color - @Entry(name = "I am an array list!") public static List arrayList = List.of("String1", "String2"); // Array String Lists are also supported - // The name field can be used to specify a custom translation string or plain text - - public static int imposter = 16777215; // - Entries without an @Entry or @Comment annotation are ignored - - /* - The .json language file for your config class could look similar to this: - { - "modid.midnightconfig.title":"I am a title", // "*.midnightconfig.title" defines the title of the screen - "modid.midnightconfig.text1":"I am a comment *u*", // Translation for the comment "text1" defined in the example config - "modid.midnightconfig.name":"I am a string!", // Translation for the field "name" defined in the example config - - "modid.midnightconfig.name.tooltip":"uwu \n I am a new line", - // When hovering over the option "showInfo", - // this text will appear as a tooltip. - // "\n" inserts a line break. - - "modid.midnightconfig.fabric":"I am an int", - "modid.midnightconfig.world":"I am a double", - "modid.midnightconfig.showInfo":"I am a boolean", - "modid.midnightconfig.hello":"I am a limited int!", - "modid.midnightconfig.testEnum":"I am an enum!", - "modid.midnightconfig.enum.TestEnum.FABRIC":"Fancy", - "modid.midnightconfig.enum.TestEnum.QUILT":"Fabulous" - } - To initialize the config you have to call "MidnightConfig.init("modid", MidnightConfigExample.class)" in your ModInitializer - - To get an instance of the config screen you have to call "MidnightConfig.getScreen(parent, "modid");" - - The code in your ModMenu integration class would look something like this: - @Override - public ConfigScreenFactory getModConfigScreenFactory() { - return parent -> MidnightConfig.getScreen(parent, "modid"); - } - */ -}