From: shedaniel Date: Fri, 13 Aug 2021 13:42:58 +0000 (+0800) Subject: Support 1.17 Forge X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=9e7a93b3660d6b6aa3959a85305ed9306e9805e8;p=LightOverlay.git Support 1.17 Forge Signed-off-by: shedaniel --- diff --git a/build.gradle b/build.gradle index 59744a3..2ab6ad7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { - id "architectury-plugin" version "3.2-SNAPSHOT" - id "dev.architectury.loom" version "0.7.2-SNAPSHOT" apply false + id "architectury-plugin" version "3.3-SNAPSHOT" + id "dev.architectury.loom" version "0.7.4-SNAPSHOT" apply false } architectury { diff --git a/common/build.gradle b/common/build.gradle index f1f5bb3..f0b4f2a 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -9,5 +9,5 @@ dependencies { } architectury { - common(false) + common() } \ No newline at end of file diff --git a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java index 7204963..9505cb9 100644 --- a/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java +++ b/common/src/main/java/me/shedaniel/lightoverlay/common/LightOverlayRenderer.java @@ -113,7 +113,6 @@ public class LightOverlayRenderer implements Consumer { builder.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - System.out.println(ticker.CHUNK_MAP.size()); for (Map.Entry entry : ticker.CHUNK_MAP.entrySet()) { CubicChunkPos chunkPos = entry.getKey(); if (LightOverlay.caching && (Mth.abs(chunkPos.x - playerPosX) > chunkRange || Mth.abs(chunkPos.y - playerPosY) > Math.max(1, chunkRange >> 1) || Mth.abs(chunkPos.z - playerPosZ) > chunkRange)) { diff --git a/forge/build.gradle b/forge/build.gradle index fe2097e..ce0bbf0 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.github.johnrengelman.shadow" version "5.0.0" + id "com.github.johnrengelman.shadow" version "7.0.0" } configurations { @@ -11,10 +11,6 @@ architectury { forge() } -loom { - mixinConfig "lightoverlay-forge.mixins.json" -} - processResources { filesMatching("META-INF/mods.toml") { expand "version": project.version @@ -26,8 +22,8 @@ dependencies { minecraft("com.mojang:minecraft:${rootProject.architectury.minecraft}") mappings(minecraft.officialMojangMappings()) forge("net.minecraftforge:forge:${rootProject.architectury.minecraft}-${project.forge_version}") - modCompile("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") - modCompile("me.shedaniel:architectury:${rootProject.architectury_version}:forge") + modImplementation("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") + modImplementation("dev.architectury:architectury-forge:${rootProject.architectury_version}") implementation(project(path: ":common")) { transitive = false diff --git a/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlay.java b/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlay.java index 4c840aa..eeee0e7 100644 --- a/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlay.java +++ b/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlay.java @@ -2,16 +2,15 @@ package me.shedaniel.lightoverlay.forge; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ExtensionPoint; +import net.minecraftforge.fml.IExtensionPoint; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.network.FMLNetworkConstants; -import org.apache.commons.lang3.tuple.Pair; +import net.minecraftforge.fmllegacy.network.FMLNetworkConstants; @Mod("lightoverlay") public class LightOverlay { public LightOverlay() { - ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.DISPLAYTEST, () -> Pair.of(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true)); + ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true)); DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> LightOverlayImpl::register); } } diff --git a/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayCloth.java b/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayCloth.java index ed6fea3..2b65c39 100644 --- a/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayCloth.java +++ b/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayCloth.java @@ -1,13 +1,13 @@ package me.shedaniel.lightoverlay.forge; import me.shedaniel.lightoverlay.common.ClothScreen; -import net.minecraftforge.fml.ExtensionPoint; import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fmlclient.ConfigGuiHandler; public class LightOverlayCloth { public static void register() { - ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (client, parent) -> { + ModLoadingContext.get().registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class, () -> new ConfigGuiHandler.ConfigGuiFactory((client, parent) -> { return ClothScreen.getConfigScreenByCloth(parent); - }); + })); } } diff --git a/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayImpl.java b/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayImpl.java index 624b9be..676208d 100644 --- a/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayImpl.java +++ b/forge/src/main/java/me/shedaniel/lightoverlay/forge/LightOverlayImpl.java @@ -1,12 +1,15 @@ package me.shedaniel.lightoverlay.forge; +import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.lightoverlay.common.LightOverlay; import net.minecraft.client.renderer.culling.Frustum; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; +import java.util.function.Consumer; + public class LightOverlayImpl { - public static Runnable debugRenderer = () -> {}; + public static Consumer debugRenderer = poses -> {}; public static void register() { LightOverlay.register(); @@ -23,7 +26,7 @@ public class LightOverlayImpl { return FrustumHelper.isVisible(clippingHelper, v, v1, v2, v3, v4, v5); } - public static void renderWorldLast() { - debugRenderer.run(); + public static void renderWorldLast(PoseStack stack) { + debugRenderer.accept(stack); } } diff --git a/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinClientConnection.java b/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinClientConnection.java index 02f46de..fcf74b7 100644 --- a/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinClientConnection.java +++ b/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinClientConnection.java @@ -2,36 +2,50 @@ package me.shedaniel.lightoverlay.forge.mixin; import me.shedaniel.lightoverlay.common.CubicChunkPos; import me.shedaniel.lightoverlay.common.LightOverlay; -import net.minecraft.network.Connection; +//import net.minecraft.network.Connection; +import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.network.PacketListener; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; import net.minecraft.network.protocol.game.ClientboundLightUpdatePacket; import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket; -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.CallbackInfo; +import net.minecraft.util.Mth; +//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.CallbackInfo; -@Mixin(Connection.class) +//@Mixin(Connection.class) public class MixinClientConnection { - @Inject(method = "genericsFtw", at = @At("HEAD")) - private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) { - if (packet instanceof ClientboundBlockUpdatePacket) { - LightOverlay.queueChunkAndNear(new CubicChunkPos(((ClientboundBlockUpdatePacket) packet).getPos())); - } else if (packet instanceof ClientboundSetChunkCacheCenterPacket) { - for (int y = 0; y <= 15; y++) { - LightOverlay.queueChunkAndNear(new CubicChunkPos(((ClientboundSetChunkCacheCenterPacket) packet).getX(), y, ((ClientboundSetChunkCacheCenterPacket) packet).getZ())); - } - } else if (packet instanceof ClientboundSectionBlocksUpdatePacket) { - for (int y = 0; y <= 15; y++) { - LightOverlay.queueChunkAndNear(new CubicChunkPos(((ClientboundSectionBlocksUpdatePacket) packet).sectionPos.getX(), y, ((ClientboundSectionBlocksUpdatePacket) packet).sectionPos.getZ())); - } - } else if (packet instanceof ClientboundLightUpdatePacket) { - for (int y = 0; y <= 15; y++) { - LightOverlay.queueChunk(new CubicChunkPos(((ClientboundLightUpdatePacket) packet).getX(), y, ((ClientboundLightUpdatePacket) packet).getZ())); +// @Inject(method = "genericsFtw", at = @At("HEAD")) +// private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) { +// +// } + public static void handlePacket(Packet packet, PacketListener listener) { + try { + if (!(listener instanceof ClientPacketListener packetListener)) return; + var level = packetListener.getLevel(); + if (level == null) return; + if (packet instanceof ClientboundBlockUpdatePacket p) { + LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getPos())); + } else if (packet instanceof ClientboundSetChunkCacheCenterPacket p) { + var height = Mth.ceil(level.getHeight() / 32.0); + var start = Math.floorDiv(level.getMinBuildHeight(), 32); + for (int y = start; y < start + height; y++) { + LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getX(), y, p.getZ())); + } + } else if (packet instanceof ClientboundSectionBlocksUpdatePacket p) { + LightOverlay.queueChunkAndNear(new CubicChunkPos(p.sectionPos.getX(), p.sectionPos.getY() >> 1, p.sectionPos.getZ())); + } else if (packet instanceof ClientboundLightUpdatePacket p) { + var height = Mth.ceil(level.getHeight() / 32.0); + var start = Math.floorDiv(level.getMinBuildHeight(), 32); + for (int y = start; y < start + height; y++) { + LightOverlay.queueChunk(new CubicChunkPos(p.getX(), y, p.getZ())); + } } + } catch (Throwable throwable) { + new RuntimeException("Light Overlay failed to process packet", throwable).printStackTrace(); } } } diff --git a/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinDebugRenderer.java b/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinDebugRenderer.java index dd29fd9..b34bf71 100644 --- a/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinDebugRenderer.java +++ b/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinDebugRenderer.java @@ -2,17 +2,22 @@ package me.shedaniel.lightoverlay.forge.mixin; import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.lightoverlay.forge.LightOverlayImpl; +/*import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.debug.DebugRenderer; 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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;*/ -@Mixin(DebugRenderer.class) +//@Mixin(DebugRenderer.class) public class MixinDebugRenderer { - @Inject(method = "render", at = @At("HEAD")) - private void render(PoseStack arg, MultiBufferSource.BufferSource arg2, double d, double e, double f, CallbackInfo ci) { - LightOverlayImpl.renderWorldLast(); +// @Inject(method = "render", at = @At("HEAD")) +// private void render(PoseStack arg, MultiBufferSource.BufferSource arg2, double d, double e, double f, CallbackInfo ci) { +// LightOverlayImpl.renderWorldLast(); +// } + + public static void render(PoseStack stack) { + LightOverlayImpl.renderWorldLast(stack); } } diff --git a/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinLevelRenderer.java b/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinLevelRenderer.java index e77d2d6..3b9277c 100644 --- a/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinLevelRenderer.java +++ b/forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinLevelRenderer.java @@ -1,18 +1,22 @@ package me.shedaniel.lightoverlay.forge.mixin; import me.shedaniel.lightoverlay.common.LightOverlay; -import net.minecraft.client.Camera; -import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.culling.Frustum; -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.CallbackInfo; +//import net.minecraft.client.Camera; +//import net.minecraft.client.renderer.LevelRenderer; +//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.CallbackInfo; -@Mixin(LevelRenderer.class) +//@Mixin(LevelRenderer.class) public class MixinLevelRenderer { - @Inject(method = "setupRender", at = @At("HEAD")) - private void setupTerrain(Camera camera, Frustum frustum, boolean bl, int i, boolean bl2, CallbackInfo ci) { - LightOverlay.frustum = frustum; +// @Inject(method = "setupRender", at = @At("HEAD")) +// private void setupTerrain(Camera camera, Frustum frustum, boolean bl, int i, boolean bl2, CallbackInfo ci) { +// LightOverlay.renderer.frustum = frustum; +// } + + public static void setupTerrain(Frustum frustum) { + LightOverlay.renderer.frustum = frustum; } } diff --git a/forge/src/main/resources/META-INF/Connection.js b/forge/src/main/resources/META-INF/Connection.js new file mode 100644 index 0000000..7f7e122 --- /dev/null +++ b/forge/src/main/resources/META-INF/Connection.js @@ -0,0 +1,33 @@ +var Opcodes = Java.type("org.objectweb.asm.Opcodes"); +var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode"); +var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode"); +var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI"); + +function transformMethod(method) { + var instructions = method.instructions; + instructions.insert(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/mixin/MixinClientConnection", "handlePacket", "(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;)V", false)); + instructions.insert(new VarInsnNode(Opcodes.ALOAD, 1)); + instructions.insert(new VarInsnNode(Opcodes.ALOAD, 0)); +} + +function initializeCoreMod() { + return { + "lightoverlay": { + 'target': { + 'type': 'CLASS', + 'name': 'net.minecraft.network.Connection' + }, + 'transformer': function (classNode) { + var genericsFtw = ASMAPI.mapMethod("m_129517_"); + for (i in classNode.methods) { + var method = classNode.methods[i]; + if (method.name === genericsFtw) { + transformMethod(method) + break; + } + } + return classNode; + } + } + } +} \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/DebugRenderer.js b/forge/src/main/resources/META-INF/DebugRenderer.js new file mode 100644 index 0000000..c67dba3 --- /dev/null +++ b/forge/src/main/resources/META-INF/DebugRenderer.js @@ -0,0 +1,32 @@ +var Opcodes = Java.type("org.objectweb.asm.Opcodes"); +var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode"); +var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode"); +var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI"); + +function transformMethod(method) { + var instructions = method.instructions; + instructions.insert(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/mixin/MixinDebugRenderer", "render", "(Lcom/mojang/blaze3d/vertex/PoseStack;)V", false)); + instructions.insert(new VarInsnNode(Opcodes.ALOAD, 1)); +} + +function initializeCoreMod() { + return { + "lightoverlay": { + 'target': { + 'type': 'CLASS', + 'name': 'net.minecraft.client.renderer.debug.DebugRenderer' + }, + 'transformer': function (classNode) { + var render = ASMAPI.mapMethod("m_113457_"); + for (i in classNode.methods) { + var method = classNode.methods[i]; + if (method.name === render) { + transformMethod(method) + break; + } + } + return classNode; + } + } + } +} \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/LevelRenderer.js b/forge/src/main/resources/META-INF/LevelRenderer.js new file mode 100644 index 0000000..6ad2b6d --- /dev/null +++ b/forge/src/main/resources/META-INF/LevelRenderer.js @@ -0,0 +1,32 @@ +var Opcodes = Java.type("org.objectweb.asm.Opcodes"); +var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode"); +var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode"); +var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI"); + +function transformMethod(method) { + var instructions = method.instructions; + instructions.insert(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/mixin/MixinLevelRenderer", "setupTerrain", "(Lnet/minecraft/client/renderer/culling/Frustum;)V", false)); + instructions.insert(new VarInsnNode(Opcodes.ALOAD, 2)); +} + +function initializeCoreMod() { + return { + "lightoverlay": { + 'target': { + 'type': 'CLASS', + 'name': 'net.minecraft.client.renderer.LevelRenderer' + }, + 'transformer': function (classNode) { + var setupRender = ASMAPI.mapMethod("m_109695_"); + for (i in classNode.methods) { + var method = classNode.methods[i]; + if (method.name === setupRender) { + transformMethod(method) + break; + } + } + return classNode; + } + } + } +} \ 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 c459c1b..6c6bb47 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -1,5 +1,5 @@ -public net.minecraft.client.renderer.culling.ClippingHelper field_228949_b_ #cameraX -public net.minecraft.client.renderer.culling.ClippingHelper field_228950_c_ #cameraY -public net.minecraft.client.renderer.culling.ClippingHelper field_228951_d_ #cameraZ -public net.minecraft.client.renderer.culling.ClippingHelper field_228948_a_ #frustum -public net.minecraft.network.play.server.SMultiBlockChangePacket field_244305_a #field_244305_a \ No newline at end of file +public net.minecraft.client.renderer.culling.Frustum f_112996_ # camX +public net.minecraft.client.renderer.culling.Frustum f_112997_ # camY +public net.minecraft.client.renderer.culling.Frustum f_112998_ # camZ +public net.minecraft.client.renderer.culling.Frustum f_112995_ # frustumData +public net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket f_132980_ # sectionPos \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/coremods.json b/forge/src/main/resources/META-INF/coremods.json new file mode 100644 index 0000000..17c6500 --- /dev/null +++ b/forge/src/main/resources/META-INF/coremods.json @@ -0,0 +1,5 @@ +{ + "Connection": "META-INF/Connection.js", + "DebugRenderer": "META-INF/DebugRenderer.js", + "LevelRenderer": "META-INF/LevelRenderer.js" +} \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index d4f372d..a04bdd6 100755 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[33,)" +loaderVersion = "[37,)" issueTrackerURL = "https://github.com/shedaniel/LightOverlay/issues/" #optional logoFile = "icon.png" authors = "shedaniel" @@ -13,15 +13,15 @@ To provide users with NEI-like light overlay. ''' [[dependencies.lightoverlay]] -modId = "cloth-config" +modId = "cloth_config" mandatory = true -versionRange = "[4.10.13,)" +versionRange = "[5.0.38,)" ordering = "NONE" side = "CLIENT" [[dependencies.lightoverlay]] modId = "architectury" mandatory = true -versionRange = "[1.5.112,)" +versionRange = "[2.3.24,)" ordering = "NONE" side = "CLIENT" \ No newline at end of file diff --git a/forge/src/main/resources/lightoverlay-forge.mixins.json b/forge/src/main/resources/lightoverlay-forge.mixins.json deleted file mode 100644 index 798efb5..0000000 --- a/forge/src/main/resources/lightoverlay-forge.mixins.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "required": true, - "package": "me.shedaniel.lightoverlay.forge.mixin", - "minVersion": "0.7.11", - "compatibilityLevel": "JAVA_8", - "mixins": [], - "client": [ - "MixinClientConnection", - "MixinDebugRenderer", - "MixinLevelRenderer" - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index b18dc03..edc7831 100755 --- a/gradle.properties +++ b/gradle.properties @@ -2,15 +2,15 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false mod_version=6.0.0 -minecraft_version=1.17 +minecraft_version=1.17.1 -architectury_version=2.0.9 +architectury_version=2.3.24 # fabric fabric_loader_version=0.11.6 -fabric_api_version=0.35.1+1.17 -cloth_config_version=5.0.34 +fabric_api_version=0.37.2+1.17 +cloth_config_version=5.0.38 modmenu_version=2.0.2 # forge -forge_version=35.1.7 \ No newline at end of file +forge_version=37.0.13 \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 323a92b..a232ac9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,5 +11,5 @@ rootProject.name = "light-overlay" include("common") include("fabric") -//include("forge") +include("forge")