From 6e68b2bba065f0e46a6edbecf416effbe233b87e Mon Sep 17 00:00:00 2001 From: Jamalam Date: Fri, 25 Oct 2024 13:22:24 +0100 Subject: [PATCH] wip --- CHANGELOG.md | 5 +- common/build.gradle | 1 + .../utility_belt/mixin/TagLoaderMixin.java | 35 +++++++++++++ .../utility_belt/util/DynamicTags.java | 30 ++++++++++++ .../main/resources/utility_belt.mixins.json | 3 +- .../jamalam360/utility_belt/datagen/Tags.java | 1 + fabric/build.gradle | 14 +++++- .../compat/LambDynamicLightsCompat.java | 49 +++++++++++++++++++ fabric/src/main/resources/fabric.mod.json | 3 ++ gradle.properties | 5 +- libs.versions.toml | 17 ++++--- neoforge/build.gradle | 2 +- 12 files changed, 152 insertions(+), 13 deletions(-) create mode 100644 common/src/main/java/io/github/jamalam360/utility_belt/mixin/TagLoaderMixin.java create mode 100644 common/src/main/java/io/github/jamalam360/utility_belt/util/DynamicTags.java create mode 100644 fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java diff --git a/CHANGELOG.md b/CHANGELOG.md index d427753..04a3c2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1,4 @@ -- (fix) crash when trying to automatically insert items into belt (#55) +- (feat) compat with LambDynamicLights + - When LambDynamicLights is installed, you will be able to put light sources into your Utility Belt and they will illuminate the world around you. + - If you have suggestions for other dynamic lights mods to add compat for, please open an issue on GitHub. + - Closes #56 diff --git a/common/build.gradle b/common/build.gradle index 59b2f88..08d374c 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -28,6 +28,7 @@ dependencies { modImplementation(libs.accessories.common) { exclude group: "mezz.jei" } + compileOnly libs.mixin.extras.common annotationProcessor libs.mixin.extras.common } diff --git a/common/src/main/java/io/github/jamalam360/utility_belt/mixin/TagLoaderMixin.java b/common/src/main/java/io/github/jamalam360/utility_belt/mixin/TagLoaderMixin.java new file mode 100644 index 0000000..3fbde91 --- /dev/null +++ b/common/src/main/java/io/github/jamalam360/utility_belt/mixin/TagLoaderMixin.java @@ -0,0 +1,35 @@ +package io.github.jamalam360.utility_belt.mixin; + +import io.github.jamalam360.utility_belt.UtilityBelt; +import io.github.jamalam360.utility_belt.util.DynamicTags; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.tags.TagEntry; +import net.minecraft.tags.TagLoader; +import net.minecraft.world.item.Item; +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.ArrayList; +import java.util.List; +import java.util.Map; + +@Mixin(TagLoader.class) +public class TagLoaderMixin { + @Inject( + method = "load", + at = @At("TAIL") + ) + private void utilitybelt$injectDynamicTags(ResourceManager resourceManager, CallbackInfoReturnable>> cir) { + Map> map = cir.getReturnValue(); + List list = map.computeIfAbsent(UtilityBelt.ALLOWED_IN_UTILITY_BELT.location(), id -> new ArrayList<>()); + + for (ResourceLocation item : DynamicTags.getExtraItemsAllowedInUtilityBelt()) { + list.add(new TagLoader.EntryWithSource(TagEntry.element(item), "utilitybelt")); + } + } +} diff --git a/common/src/main/java/io/github/jamalam360/utility_belt/util/DynamicTags.java b/common/src/main/java/io/github/jamalam360/utility_belt/util/DynamicTags.java new file mode 100644 index 0000000..1a6de78 --- /dev/null +++ b/common/src/main/java/io/github/jamalam360/utility_belt/util/DynamicTags.java @@ -0,0 +1,30 @@ +package io.github.jamalam360.utility_belt.util; + +import dev.architectury.platform.Platform; +import io.github.jamalam360.utility_belt.UtilityBelt; +import net.minecraft.resources.ResourceLocation; + +import java.util.ArrayList; +import java.util.List; + +public class DynamicTags { + private static final String LAMB_DYNAMIC_LIGHTS = "lambdynlights"; + + public static List getExtraItemsAllowedInUtilityBelt() { + List list = new ArrayList<>(); + + if (Platform.isModLoaded(LAMB_DYNAMIC_LIGHTS)) { + UtilityBelt.LOGGER.info("Registering extra Utility Belt entries for LambDynamicLights compatibility."); + list.add(minecraft("torch")); + list.add(minecraft("redstone_torch")); + list.add(minecraft("soul_torch")); + list.add(minecraft("lantern")); + } + + return list; + } + + private static ResourceLocation minecraft(String path) { + return ResourceLocation.fromNamespaceAndPath("minecraft", path); + } +} diff --git a/common/src/main/resources/utility_belt.mixins.json b/common/src/main/resources/utility_belt.mixins.json index 39e504b..69519d9 100644 --- a/common/src/main/resources/utility_belt.mixins.json +++ b/common/src/main/resources/utility_belt.mixins.json @@ -8,7 +8,8 @@ "LivingEntityMixin", "PlayerMixin", "ServerGamePacketListenerImplMixin", - "ServerPlayerMixin" + "ServerPlayerMixin", + "TagLoaderMixin" ], "client": [ ], diff --git a/datagen/src/main/java/io/github/jamalam360/utility_belt/datagen/Tags.java b/datagen/src/main/java/io/github/jamalam360/utility_belt/datagen/Tags.java index 396d9e8..31faeef 100644 --- a/datagen/src/main/java/io/github/jamalam360/utility_belt/datagen/Tags.java +++ b/datagen/src/main/java/io/github/jamalam360/utility_belt/datagen/Tags.java @@ -7,6 +7,7 @@ import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; +import net.minecraft.world.level.block.Blocks; import java.util.concurrent.CompletableFuture; diff --git a/fabric/build.gradle b/fabric/build.gradle index 836fd16..11ab2da 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -20,13 +20,23 @@ configurations { developmentFabric.extendsFrom common } +repositories { + maven { + name = "Gegy's Maven" + url = "https://maven.gegy.dev" + } +} + dependencies { modImplementation libs.fabric.loader modImplementation libs.fabric.api modImplementation libs.architectury.fabric modImplementation libs.jamlib.fabric + modImplementation libs.accessories.fabric modRuntimeOnly libs.modmenu - modRuntimeOnly libs.accessories.fabric + + // Compat + modImplementation libs.lambdynamiclights common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } @@ -38,7 +48,7 @@ if (System.getenv("CURSEFORGE_API_KEY") != null && System.getenv("MODRINTH_API_K displayName = "V${project.version} (Fabric ${project.minecraft_version})" changelog = rootProject.file("CHANGELOG.md").text releaseType = project.version.contains("beta") ? "beta" : "release" - gameVersions = [project.minecraft_version] + gameVersions = [project.minecraft_version, *project.additional_minecraft_versions.split(",")] gameLoaders = ["fabric", "quilt"] mainPublication tasks.remapJar diff --git a/fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java b/fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java new file mode 100644 index 0000000..9c168e3 --- /dev/null +++ b/fabric/src/main/java/io/github/jamalam360/utility_belt/fabric/compat/LambDynamicLightsCompat.java @@ -0,0 +1,49 @@ +package io.github.jamalam360.utility_belt.fabric.compat; + +import dev.lambdaurora.lambdynlights.LambDynLights; +import dev.lambdaurora.lambdynlights.api.DynamicLightHandler; +import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; +import dev.lambdaurora.lambdynlights.api.DynamicLightsInitializer; +import dev.lambdaurora.lambdynlights.api.item.ItemLightSourceManager; +import io.github.jamalam360.utility_belt.UtilityBelt; +import io.github.jamalam360.utility_belt.UtilityBeltInventory; +import io.github.jamalam360.utility_belt.state.StateManager; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +public class LambDynamicLightsCompat implements DynamicLightsInitializer { + @Override + public void onInitializeDynamicLights(ItemLightSourceManager manager) { + UtilityBelt.LOGGER.info("Initializing LambDynamicLights compat for Utility Belt."); + DynamicLightHandlers.registerDynamicLightHandler(EntityType.PLAYER, DynamicLightHandler.makeHandler(this::getLuminanceInBelt, player -> false)); + } + + private int getLuminanceInBelt(Player player) { + boolean submerged = isEyeSubmergedInFluid(player); + int luminance = 0; + + StateManager stateManager = StateManager.getStateManager(player); + if (stateManager.hasBelt(player)) { + UtilityBeltInventory inv = stateManager.getInventory(player); + + for (ItemStack stack : inv.items()) { + luminance = Math.max(luminance, LambDynLights.getLuminanceFromItemStack(stack, submerged)); + } + } + + return luminance; + } + + // From LambDynLights mod + private static boolean isEyeSubmergedInFluid(LivingEntity entity) { + if (!LambDynLights.get().config.getWaterSensitiveCheck().get()) { + return false; + } else { + BlockPos eyePos = BlockPos.containing(entity.getX(), entity.getEyeY(), entity.getZ()); + return !entity.level().getFluidState(eyePos).isEmpty(); + } + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 9f645d4..bb517b6 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -21,6 +21,9 @@ ], "client": [ "io.github.jamalam360.utility_belt.fabric.UtilityBeltFabricClient" + ], + "dynamiclights": [ + "io.github.jamalam360.utility_belt.fabric.compat.LambDynamicLightsCompat" ] }, "mixins": [ diff --git a/gradle.properties b/gradle.properties index 10ec2de..bcf8a42 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,9 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false org.gradle.parallel=true -version=2.4.3+1.21 -minecraft_version=1.21 +version=2.5.0+1.21.1 +minecraft_version=1.21.1 +additional_minecraft_versions=1.21 branch=main group=io.github.jamalam360 mod_name=Utility Belt diff --git a/libs.versions.toml b/libs.versions.toml index e905bcc..a853cea 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -1,26 +1,29 @@ [versions] # https://modrinth.com/mod/architectury-api/versions -architectury = "13.0.6" +architectury = "13.0.8" # https://projects.neoforged.net/neoforged/neoforge -neoforge = "21.0.144" +neoforge = "21.1.72" # https://fabricmc.net/develop fabric-loader = "0.15.11" -fabric-api = "0.100.7+1.21" +fabric-api = "0.106.0+1.21.1" # https://maven.jamalam.tech/#/releases -jamlib = "1.0.10+1.21" +jamlib = "1.2.1+1.21" # https://modrinth.com/mod/accessories/versions -accessories = "1.0.0-beta.24+1.21" +accessories = "1.1.0-beta.11+1.21.1" # https://github.com/LlamaLad7/MixinExtras/releases -mixin-extras = "0.3.6" +mixin-extras = "0.4.1" # https://modrinth.com/mod/modmenu/versions modmenu = "11.0.1" +# https://modrinth.com/mod/lambdynamiclights/versions +lambdynamiclights = "3.1.0+1.21.1" + [libraries] architectury-common = { module = "dev.architectury:architectury", version.ref = "architectury" } architectury-fabric = { module = "dev.architectury:architectury-fabric", version.ref = "architectury" } @@ -42,3 +45,5 @@ accessories-neoforge = { module = "io.wispforest:accessories-neoforge", version. mixin-extras-common = { module = "io.github.llamalad7:mixinextras-common", version.ref = "mixin-extras" } modmenu = { module = "maven.modrinth:modmenu", version.ref = "modmenu" } + +lambdynamiclights = { module = "dev.lambdaurora.lambdynamiclights:lambdynamiclights-runtime", version.ref = "lambdynamiclights" } diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 78c0740..f4898cb 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -46,7 +46,7 @@ if (System.getenv("CURSEFORGE_API_KEY") != null && System.getenv("MODRINTH_API_K displayName = "V${project.version} (NeoForge ${project.minecraft_version})" changelog = rootProject.file("CHANGELOG.md").text releaseType = project.version.contains("beta") ? "beta" : "release" - gameVersions = [project.minecraft_version] + gameVersions = [project.minecraft_version, *project.additional_minecraft_versions.split(",")] gameLoaders = ["neoforge"] mainPublication tasks.remapJar