diff --git a/build.gradle.kts b/build.gradle.kts index 1e67fbd..f897697 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,21 @@ import com.modrinth.minotaur.dependencies.ModDependency import net.darkhax.curseforgegradle.TaskPublishCurseForge +import net.fabricmc.loom.api.mappings.layered.MappingContext +import net.fabricmc.loom.api.mappings.layered.MappingLayer +import net.fabricmc.loom.api.mappings.layered.MappingsNamespace +import net.fabricmc.loom.api.mappings.layered.spec.MappingsSpec +import net.fabricmc.loom.configuration.providers.mappings.intermediary.IntermediaryMappingLayer +import net.fabricmc.loom.configuration.providers.mappings.utils.DstNameFilterMappingVisitor +import net.fabricmc.loom.util.download.DownloadException +import net.fabricmc.mappingio.MappingVisitor +import net.fabricmc.mappingio.adapter.MappingDstNsReorder +import net.fabricmc.mappingio.adapter.MappingSourceNsSwitch +import net.fabricmc.mappingio.format.proguard.ProGuardFileReader +import net.fabricmc.mappingio.tree.MemoryMappingTree +import java.io.IOException +import java.nio.file.Files +import java.nio.file.Path +import java.util.regex.Pattern plugins { id("fabric-loom").version("1.7.+") @@ -98,6 +114,10 @@ repositories { name = "grondag" url = uri("https://maven.dblsaiko.net/") } + maven { + name = "ParchmentMC" + url = uri("https://maven.parchmentmc.org") + } exclusiveContent { forRepository { maven { @@ -116,9 +136,109 @@ loom { runtimeOnlyLog4j = true } +// Based off Loom, this is required as the releases at the time of writing this buildscript have +// a flaw with the mapping layering preventing the usage of the usual MojangMappingLayer. +@Suppress("UnstableApiUsage") +internal data class MojangMappingLayer( + val clientMappings: Path, val serverMappings: Path, val nameSyntheticMembers: Boolean, + val intermediaryMappings: MemoryMappingTree, val logger: Logger +) : MappingLayer { + @Throws(IOException::class) + override fun visit(mappingVisitor: MappingVisitor) { + val mojmap = MemoryMappingTree() + + // Filter out field names matching the pattern + val nameFilter = DstNameFilterMappingVisitor(mojmap, SYNTHETIC_NAME_PATTERN) + + // Make official the source namespace + val nsSwitch = MappingSourceNsSwitch(if (nameSyntheticMembers) mojmap else nameFilter, MappingsNamespace.OFFICIAL.toString()) + + Files.newBufferedReader(clientMappings).use { clientBufferedReader -> + Files.newBufferedReader(serverMappings).use { serverBufferedReader -> + ProGuardFileReader.read( + clientBufferedReader, + MappingsNamespace.NAMED.toString(), + MappingsNamespace.OFFICIAL.toString(), + nsSwitch + ) + ProGuardFileReader.read( + serverBufferedReader, + MappingsNamespace.NAMED.toString(), + MappingsNamespace.OFFICIAL.toString(), + nsSwitch + ) + } + } + + intermediaryMappings.accept(MappingDstNsReorder(mojmap, MappingsNamespace.INTERMEDIARY.toString())) + + val switch = MappingSourceNsSwitch(MappingDstNsReorder(mappingVisitor, MappingsNamespace.NAMED.toString()), MappingsNamespace.INTERMEDIARY.toString(), true) + mojmap.accept(switch) + } + + override fun getSourceNamespace(): MappingsNamespace { + return MappingsNamespace.INTERMEDIARY + } + + override fun dependsOn(): List> { + return listOf(IntermediaryMappingLayer::class.java) + } + + companion object { + private val SYNTHETIC_NAME_PATTERN: Pattern = Pattern.compile("^(access|this|val\\\$this|lambda\\$.*)\\$[0-9]+$") + } +} + +@Suppress("UnstableApiUsage") +internal data class MojangMappingsSpec(val nameSyntheticMembers: Boolean) : MappingsSpec { + override fun createLayer(context: MappingContext): MojangMappingLayer { + val versionInfo = context.minecraftProvider().versionInfo + val clientDownload = versionInfo.download(MANIFEST_CLIENT_MAPPINGS) + val serverDownload = versionInfo.download(MANIFEST_SERVER_MAPPINGS) + + if (clientDownload == null) { + throw RuntimeException("Failed to find official mojang mappings for " + context.minecraftVersion()) + } + + val clientMappings = context.workingDirectory("mojang").resolve("client.txt") + val serverMappings = context.workingDirectory("mojang").resolve("server.txt") + + try { + context.download(clientDownload.url()) + .sha1(clientDownload.sha1()) + .downloadPath(clientMappings) + + context.download(serverDownload.url()) + .sha1(serverDownload.sha1()) + .downloadPath(serverMappings) + } catch (e: DownloadException) { + throw UncheckedIOException("Failed to download mappings", e) + } + + return MojangMappingLayer( + clientMappings, + serverMappings, + nameSyntheticMembers, + context.intermediaryTree().get(), + context.logger + ) + } + + companion object { + // Keys in dependency manifest + private const val MANIFEST_CLIENT_MAPPINGS = "client_mappings" + private const val MANIFEST_SERVER_MAPPINGS = "server_mappings" + } +} + dependencies { minecraft(libs.minecraft) - mappings("net.fabricmc:yarn:${minecraftVersion}+build.${project.property("yarn_mappings")}:v2") + @Suppress("UnstableApiUsage") + mappings(loom.layered { + addLayer(MojangMappingsSpec(false)) + parchment("org.parchmentmc.data:parchment-$minecraftVersion:${libs.versions.mappings.parchment.get()}@zip") + mappings("dev.lambdaurora:yalmm:$minecraftVersion+build.${libs.versions.mappings.yalmm.get()}") + }) modImplementation(libs.fabric.loader) modImplementation(libs.fabric.api) diff --git a/gradle.properties b/gradle.properties index 9004eda..197bc0f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,8 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx2G -# Fabric Properties -# check these on https://fabricmc.net/use -yarn_mappings=2 - # Mod Properties -mod_version = 2.3.4 +mod_version = 3.0.0-alpha.1 maven_group = dev.lambdaurora archives_base_name = lambdynamiclights modrinth_id=yBW8D80W diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4e580cf..8db9460 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,8 @@ minecraft = "1.21" fabric-loader = "0.15.11" fabric-api = "0.100.4+1.21" +mappings-yalmm = "8" +mappings-parchment = "2024.07.07" # Dependencies spruceui = "5.1.0+1.21" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135..2c35211 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 a441313..09523c0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a4..f5feea6 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 6689b85..9b42019 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ 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. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ 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. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightSource.java b/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightSource.java index 6f2cc70..5861727 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightSource.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightSource.java @@ -9,8 +9,8 @@ package dev.lambdaurora.lambdynlights; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.world.World; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -18,7 +18,7 @@ * Represents a dynamic light source. * * @author LambdAurora - * @version 1.3.3 + * @version 3.0.0 * @since 1.0.0 */ public interface DynamicLightSource { @@ -48,7 +48,7 @@ public interface DynamicLightSource { * * @return the world instance */ - World getDynamicLightWorld(); + Level getDynamicLightLevel(); /** * Returns whether the dynamic light is enabled or not. @@ -97,7 +97,7 @@ default void setDynamicLightEnabled(boolean enabled) { */ boolean shouldUpdateDynamicLight(); - boolean lambdynlights$updateDynamicLight(@NotNull WorldRenderer renderer); + boolean lambdynlights$updateDynamicLight(@NotNull LevelRenderer renderer); - void lambdynlights$scheduleTrackedChunksRebuild(@NotNull WorldRenderer renderer); + void lambdynlights$scheduleTrackedChunksRebuild(@NotNull LevelRenderer renderer); } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsConfig.java b/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsConfig.java index 7a9bc1c..de19c75 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsConfig.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsConfig.java @@ -15,9 +15,9 @@ import dev.lambdaurora.spruceui.option.SpruceCyclingOption; import dev.lambdaurora.spruceui.option.SpruceOption; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.NotNull; import java.nio.file.Path; @@ -71,7 +71,7 @@ public DynamicLightsConfig(@NotNull LambDynLights mod) { Text.translatable("lambdynlights.tooltip.self_light_source")) .withOnSet(value -> { if (!value) this.mod.removeLightSources(source -> - source instanceof ClientPlayerEntity && source == MinecraftClient.getInstance().player + source instanceof LocalPlayer && source == Minecraft.getInstance().player ); }); this.blockEntitiesLightSource = new BooleanSettingEntry("light_sources.block_entities", DEFAULT_BLOCK_ENTITIES_LIGHT_SOURCE, this.config, diff --git a/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsMode.java b/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsMode.java index 533f8db..ec44f93 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsMode.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/DynamicLightsMode.java @@ -11,8 +11,8 @@ import dev.lambdaurora.spruceui.SpruceTexts; import dev.lambdaurora.spruceui.util.Nameable; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.TextFormatting; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -26,17 +26,17 @@ * @since 1.0.0 */ public enum DynamicLightsMode implements Nameable { - OFF(0, Formatting.RED, SpruceTexts.OPTIONS_OFF), - FASTEST(500, Formatting.GOLD, SpruceTexts.OPTIONS_GENERIC_FASTEST), - FAST(250, Formatting.YELLOW, SpruceTexts.OPTIONS_GENERIC_FAST), - FANCY(0, Formatting.GREEN, SpruceTexts.OPTIONS_GENERIC_FANCY); + OFF(0, TextFormatting.RED, SpruceTexts.OPTIONS_OFF), + FASTEST(500, TextFormatting.GOLD, SpruceTexts.OPTIONS_GENERIC_FASTEST), + FAST(250, TextFormatting.YELLOW, SpruceTexts.OPTIONS_GENERIC_FAST), + FANCY(0, TextFormatting.GREEN, SpruceTexts.OPTIONS_GENERIC_FANCY); private final int delay; private final Text translatedText; - DynamicLightsMode(int delay, @NotNull Formatting formatting, @NotNull Text translatedText) { + DynamicLightsMode(int delay, @NotNull TextFormatting formatting, @NotNull Text translatedText) { this.delay = delay; - this.translatedText = translatedText.copy().formatted(formatting); + this.translatedText = translatedText.copy().withStyle(formatting); } /** diff --git a/src/main/java/dev/lambdaurora/lambdynlights/ExplosiveLightingMode.java b/src/main/java/dev/lambdaurora/lambdynlights/ExplosiveLightingMode.java index aba8220..77ab2ae 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/ExplosiveLightingMode.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/ExplosiveLightingMode.java @@ -11,8 +11,8 @@ import dev.lambdaurora.spruceui.SpruceTexts; import dev.lambdaurora.spruceui.util.Nameable; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.TextFormatting; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -26,14 +26,14 @@ * @since 1.2.1 */ public enum ExplosiveLightingMode implements Nameable { - OFF(Formatting.RED, SpruceTexts.OPTIONS_OFF), - SIMPLE(Formatting.YELLOW, SpruceTexts.OPTIONS_GENERIC_SIMPLE), - FANCY(Formatting.GREEN, SpruceTexts.OPTIONS_GENERIC_FANCY); + OFF(TextFormatting.RED, SpruceTexts.OPTIONS_OFF), + SIMPLE(TextFormatting.YELLOW, SpruceTexts.OPTIONS_GENERIC_SIMPLE), + FANCY(TextFormatting.GREEN, SpruceTexts.OPTIONS_GENERIC_FANCY); private final Text translatedText; - ExplosiveLightingMode(@NotNull Formatting formatting, @NotNull Text translatedText) { - this.translatedText = translatedText.copy().formatted(formatting); + ExplosiveLightingMode(@NotNull TextFormatting formatting, @NotNull Text translatedText) { + this.translatedText = translatedText.copy().withStyle(formatting); } /** diff --git a/src/main/java/dev/lambdaurora/lambdynlights/LambDynLights.java b/src/main/java/dev/lambdaurora/lambdynlights/LambDynLights.java index 0203f1b..daf2007 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/LambDynLights.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/LambDynLights.java @@ -20,21 +20,21 @@ import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.entrypoint.EntrypointContainer; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.LightmapTextureManager; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.TntEntity; -import net.minecraft.entity.mob.CreeperEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.resource.ResourceManager; -import net.minecraft.resource.ResourceType; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.io.ResourceManager; +import net.minecraft.resources.io.ResourceType; import net.minecraft.util.math.MathHelper; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.PrimedTnt; +import net.minecraft.world.entity.monster.Creeper; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; @@ -88,7 +88,7 @@ public void reload(ResourceManager manager) { }); WorldRenderEvents.START.register(context -> { - MinecraftClient.getInstance().getProfiler().swap("dynamic_lighting"); + Minecraft.getInstance().getProfiler().swap("dynamic_lighting"); this.updateAll(context.worldRenderer()); }); @@ -100,7 +100,7 @@ public void reload(ResourceManager manager) { * * @param renderer the renderer */ - public void updateAll(@NotNull WorldRenderer renderer) { + public void updateAll(@NotNull LevelRenderer renderer) { if (!this.config.getDynamicLightsMode().isEnabled()) return; @@ -145,7 +145,7 @@ public int getLightmapWithDynamicLight(@NotNull BlockPos pos, int lightmap) { * @return the modified lightmap coordinates */ public int getLightmapWithDynamicLight(@NotNull Entity entity, int lightmap) { - int posLightLevel = (int) this.getDynamicLightLevel(entity.getBlockPos()); + int posLightLevel = (int) this.getDynamicLightLevel(entity.getOnPos()); int entityLuminance = ((DynamicLightSource) entity).getLuminance(); return this.getLightmapWithDynamicLight(Math.max(posLightLevel, entityLuminance), lightmap); @@ -163,7 +163,7 @@ public int getLightmapWithDynamicLight(double dynamicLightLevel, int lightmap) { // lightmap is (skyLevel << 20 | blockLevel << 4) // Get vanilla block light level. - int blockLevel = LightmapTextureManager.getBlockLightCoordinates(lightmap); + int blockLevel = LightTexture.block(lightmap); if (dynamicLightLevel > blockLevel) { // Equivalent to a << 4 bitshift with a little quirk: this one ensure more precision (more decimals are saved). int luminance = (int) (dynamicLightLevel * 16.0); @@ -228,7 +228,7 @@ public static double maxDynamicLightLevel(@NotNull BlockPos pos, @NotNull Dynami * @param lightSource the light source to add */ public void addLightSource(@NotNull DynamicLightSource lightSource) { - if (!lightSource.getDynamicLightWorld().isClient()) + if (!lightSource.getDynamicLightLevel().isClientSide()) return; if (!this.config.getDynamicLightsMode().isEnabled()) return; @@ -246,7 +246,7 @@ public void addLightSource(@NotNull DynamicLightSource lightSource) { * @return {@code true} if the light source is tracked, else {@code false} */ public boolean containsLightSource(@NotNull DynamicLightSource lightSource) { - if (!lightSource.getDynamicLightWorld().isClient()) + if (!lightSource.getDynamicLightLevel().isClientSide()) return false; boolean result; @@ -285,8 +285,7 @@ public void removeLightSource(@NotNull DynamicLightSource lightSource) { it = dynamicLightSources.next(); if (it.equals(lightSource)) { dynamicLightSources.remove(); - if (MinecraftClient.getInstance().worldRenderer != null) - lightSource.lambdynlights$scheduleTrackedChunksRebuild(MinecraftClient.getInstance().worldRenderer); + lightSource.lambdynlights$scheduleTrackedChunksRebuild(Minecraft.getInstance().levelRenderer); break; } } @@ -305,11 +304,9 @@ public void clearLightSources() { while (dynamicLightSources.hasNext()) { it = dynamicLightSources.next(); dynamicLightSources.remove(); - if (MinecraftClient.getInstance().worldRenderer != null) { - if (it.getLuminance() > 0) - it.resetDynamicLight(); - it.lambdynlights$scheduleTrackedChunksRebuild(MinecraftClient.getInstance().worldRenderer); - } + if (it.getLuminance() > 0) + it.resetDynamicLight(); + it.lambdynlights$scheduleTrackedChunksRebuild(Minecraft.getInstance().levelRenderer); } this.lightSourcesLock.writeLock().unlock(); @@ -329,11 +326,9 @@ public void removeLightSources(@NotNull Predicate filter) { it = dynamicLightSources.next(); if (filter.test(it)) { dynamicLightSources.remove(); - if (MinecraftClient.getInstance().worldRenderer != null) { - if (it.getLuminance() > 0) - it.resetDynamicLight(); - it.lambdynlights$scheduleTrackedChunksRebuild(MinecraftClient.getInstance().worldRenderer); - } + if (it.getLuminance() > 0) + it.resetDynamicLight(); + it.lambdynlights$scheduleTrackedChunksRebuild(Minecraft.getInstance().levelRenderer); break; } } @@ -345,21 +340,21 @@ public void removeLightSources(@NotNull Predicate filter) { * Removes entities light source from tracked light sources. */ public void removeEntitiesLightSource() { - this.removeLightSources(lightSource -> (lightSource instanceof Entity && !(lightSource instanceof PlayerEntity))); + this.removeLightSources(lightSource -> (lightSource instanceof Entity && !(lightSource instanceof Player))); } /** * Removes Creeper light sources from tracked light sources. */ public void removeCreeperLightSources() { - this.removeLightSources(entity -> entity instanceof CreeperEntity); + this.removeLightSources(entity -> entity instanceof Creeper); } /** * Removes TNT light sources from tracked light sources. */ public void removeTntLightSources() { - this.removeLightSources(entity -> entity instanceof TntEntity); + this.removeLightSources(entity -> entity instanceof PrimedTnt); } /** @@ -393,7 +388,7 @@ public void warn(String info) { * @param renderer the renderer * @param chunkPos the chunk position */ - public static void scheduleChunkRebuild(@NotNull WorldRenderer renderer, @NotNull BlockPos chunkPos) { + public static void scheduleChunkRebuild(@NotNull LevelRenderer renderer, @NotNull BlockPos chunkPos) { scheduleChunkRebuild(renderer, chunkPos.getX(), chunkPos.getY(), chunkPos.getZ()); } @@ -403,12 +398,12 @@ public static void scheduleChunkRebuild(@NotNull WorldRenderer renderer, @NotNul * @param renderer the renderer * @param chunkPos the packed chunk position */ - public static void scheduleChunkRebuild(@NotNull WorldRenderer renderer, long chunkPos) { + public static void scheduleChunkRebuild(@NotNull LevelRenderer renderer, long chunkPos) { scheduleChunkRebuild(renderer, BlockPos.unpackLongX(chunkPos), BlockPos.unpackLongY(chunkPos), BlockPos.unpackLongZ(chunkPos)); } - public static void scheduleChunkRebuild(@NotNull WorldRenderer renderer, int x, int y, int z) { - if (MinecraftClient.getInstance().world != null) + public static void scheduleChunkRebuild(@NotNull LevelRenderer renderer, int x, int y, int z) { + if (Minecraft.getInstance().level != null) ((WorldRendererAccessor) renderer).lambdynlights$scheduleChunkRebuild(x, y, z, false); } @@ -451,14 +446,14 @@ private static boolean isEyeSubmergedInFluid(LivingEntity entity) { } var eyePos = BlockPos.ofFloored(entity.getX(), entity.getEyeY(), entity.getZ()); - return !entity.getWorld().getFluidState(eyePos).isEmpty(); + return !entity.level().getFluidState(eyePos).isEmpty(); } public static int getLivingEntityLuminanceFromItems(LivingEntity entity) { boolean submergedInFluid = isEyeSubmergedInFluid(entity); int luminance = 0; - for (var equipped : entity.getEquippedItems()) { + for (var equipped : entity.getAllSlots()) { if (!equipped.isEmpty()) luminance = Math.max(luminance, LambDynLights.getLuminanceFromItemStack(equipped, submergedInFluid)); } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/LambDynLightsMixinPlugin.java b/src/main/java/dev/lambdaurora/lambdynlights/LambDynLightsMixinPlugin.java index b5d095b..4eaff0a 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/LambDynLightsMixinPlugin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/LambDynLightsMixinPlugin.java @@ -22,17 +22,13 @@ * LambDynamicLights mixin plugin for conditional mixins. * * @author LambdAurora - * @version 2.3.2 + * @version 3.0.0 * @since 1.0.0 */ public class LambDynLightsMixinPlugin implements IMixinConfigPlugin { private final Object2BooleanMap conditionalMixins = new Object2BooleanOpenHashMap<>(); public LambDynLightsMixinPlugin() { - boolean ltrInstalled = LambDynLightsCompat.isLilTaterReloadedInstalled(); - this.conditionalMixins.put("dev.lambdaurora.lambdynlights.mixin.ltr.LilTaterBlocksMixin", ltrInstalled); - this.conditionalMixins.put("dev.lambdaurora.lambdynlights.mixin.ltr.LilTaterBlockEntityMixin", ltrInstalled); - boolean sodium05XInstalled = LambDynLightsCompat.isSodium05XInstalled(); this.conditionalMixins.put("dev.lambdaurora.lambdynlights.mixin.sodium.ArrayLightDataCacheMixin", sodium05XInstalled); this.conditionalMixins.put("dev.lambdaurora.lambdynlights.mixin.sodium.FlatLightPipelineMixin", sodium05XInstalled); diff --git a/src/main/java/dev/lambdaurora/lambdynlights/accessor/DynamicLightHandlerHolder.java b/src/main/java/dev/lambdaurora/lambdynlights/accessor/DynamicLightHandlerHolder.java index 295ca65..00ddcd9 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/accessor/DynamicLightHandlerHolder.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/accessor/DynamicLightHandlerHolder.java @@ -11,11 +11,11 @@ import dev.lambdaurora.lambdynlights.api.DynamicLightHandler; import dev.lambdaurora.lambdynlights.config.LightSourceSettingEntry; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Text; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandler.java b/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandler.java index 4813b75..79a76e1 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandler.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandler.java @@ -10,8 +10,8 @@ package dev.lambdaurora.lambdynlights.api; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.mob.CreeperEntity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.Creeper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -52,7 +52,9 @@ default boolean isWaterSensitive(T lightSource) { * @param The type of the entity. * @return The completed handler. */ - static @NotNull DynamicLightHandler makeHandler(Function luminance, Function waterSensitive) { + static @NotNull DynamicLightHandler makeHandler( + Function luminance, Function waterSensitive + ) { return new DynamicLightHandler<>() { @Override public int getLuminance(T lightSource) { @@ -76,7 +78,7 @@ public boolean isWaterSensitive(T lightSource) { static @NotNull DynamicLightHandler makeLivingEntityHandler(@NotNull DynamicLightHandler handler) { return entity -> { int luminance = 0; - for (var equipped : entity.getEquippedItems()) { + for (var equipped : entity.getAllSlots()) { luminance = Math.max(luminance, LambDynLights.getLuminanceFromItemStack(equipped, entity.isSubmergedInWater())); } return Math.max(luminance, handler.getLuminance(entity)); @@ -90,17 +92,17 @@ public boolean isWaterSensitive(T lightSource) { * @param The type of Creeper entity. * @return The completed handler. */ - static @NotNull DynamicLightHandler makeCreeperEntityHandler(@Nullable DynamicLightHandler handler) { + static @NotNull DynamicLightHandler makeCreeperEntityHandler(@Nullable DynamicLightHandler handler) { return new DynamicLightHandler<>() { @Override public int getLuminance(T entity) { int luminance = 0; - if (entity.getClientFuseTime(0.f) > 0.001) { + if (entity.getSwelling(0.f) > 0.001) { luminance = switch (LambDynLights.get().config.getCreeperLightingMode()) { case OFF -> 0; case SIMPLE -> 10; - case FANCY -> (int) (entity.getClientFuseTime(0.f) * 10.0); + case FANCY -> (int) (entity.getSwelling(0.f) * 10.0); }; } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandlers.java b/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandlers.java index 7e9eadb..961f0bc 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandlers.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightHandlers.java @@ -11,13 +11,13 @@ import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.accessor.DynamicLightHandlerHolder; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; import net.minecraft.util.math.MathHelper; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import org.jetbrains.annotations.Nullable; /** @@ -39,21 +39,21 @@ public static void registerDefaultHandlers() { registerDynamicLightHandler(EntityType.ENDERMAN, entity -> { int luminance = 0; if (entity.getCarriedBlock() != null) - luminance = entity.getCarriedBlock().getLuminance(); + luminance = entity.getCarriedBlock().getLightEmission(); return luminance; }); registerDynamicLightHandler(EntityType.ITEM, - entity -> LambDynLights.getLuminanceFromItemStack(entity.getStack(), entity.isSubmergedInWater())); + entity -> LambDynLights.getLuminanceFromItemStack(entity.getItem(), entity.isSubmergedInWater())); registerDynamicLightHandler(EntityType.ITEM_FRAME, entity -> { - var world = entity.getWorld(); - return LambDynLights.getLuminanceFromItemStack(entity.getHeldItemStack(), !world.getFluidState(entity.getBlockPos()).isEmpty()); + var world = entity.level(); + return LambDynLights.getLuminanceFromItemStack(entity.getItem(), !world.getFluidState(entity.getBlockPos()).isEmpty()); }); registerDynamicLightHandler(EntityType.GLOW_ITEM_FRAME, entity -> { - var world = entity.getWorld(); - return Math.max(14, LambDynLights.getLuminanceFromItemStack(entity.getHeldItemStack(), + var world = entity.level(); + return Math.max(14, LambDynLights.getLuminanceFromItemStack(entity.getItem(), !world.getFluidState(entity.getBlockPos()).isEmpty())); }); - registerDynamicLightHandler(EntityType.MAGMA_CUBE, entity -> (entity.stretch > 0.6) ? 11 : 8); + registerDynamicLightHandler(EntityType.MAGMA_CUBE, entity -> (entity.squish > 0.6) ? 11 : 8); registerDynamicLightHandler(EntityType.SPECTRAL_ARROW, entity -> 8); registerDynamicLightHandler(EntityType.GLOW_SQUID, entity -> (int) MathHelper.clampedLerp(0.f, 12.f, 1.f - entity.getDarkTicksRemaining() / 10.f) @@ -124,7 +124,7 @@ private static void register(DynamicLightHandlerHolder holder, DynamicLig * @return {@code true} if the entity can light up, otherwise {@code false} */ public static boolean canLightUp(T entity) { - if (entity == MinecraftClient.getInstance().player && !LambDynLights.get().config.getSelfLightSource().get()) + if (entity == Minecraft.getInstance().player && !LambDynLights.get().config.getSelfLightSource().get()) return false; var setting = DynamicLightHandlerHolder.cast(entity.getType()).lambdynlights$getSetting(); @@ -154,7 +154,7 @@ public static boolean canLightUp(T entity) { public static int getLuminanceFrom(T entity) { if (!LambDynLights.get().config.getEntitiesLightSource().get()) return 0; - if (entity == MinecraftClient.getInstance().player && !LambDynLights.get().config.getSelfLightSource().get()) + if (entity == Minecraft.getInstance().player && !LambDynLights.get().config.getSelfLightSource().get()) return 0; var handler = (DynamicLightHandler) getDynamicLightHandler(entity.getType()); if (handler == null) @@ -162,7 +162,7 @@ public static int getLuminanceFrom(T entity) { if (!canLightUp(entity)) return 0; if (handler.isWaterSensitive(entity) - && !entity.getWorld().getFluidState(BlockPos.ofFloored(entity.getX(), entity.getEyeY(), entity.getZ())).isEmpty()) + && !entity.level().getFluidState(BlockPos.ofFloored(entity.getX(), entity.getEyeY(), entity.getZ())).isEmpty()) return 0; return handler.getLuminance(entity); } @@ -183,7 +183,7 @@ public static int getLuminanceFrom(T entity) { return 0; if (!canLightUp(entity)) return 0; - if (handler.isWaterSensitive(entity) && entity.getWorld() != null && !entity.getWorld().getFluidState(entity.getPos()).isEmpty()) + if (handler.isWaterSensitive(entity) && entity.getLevel() != null && !entity.getLevel().getFluidState(entity.getPos()).isEmpty()) return 0; return handler.getLuminance(entity); } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightsInitializer.java b/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightsInitializer.java index ad19ee3..b78651d 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightsInitializer.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/api/DynamicLightsInitializer.java @@ -11,8 +11,8 @@ import dev.lambdaurora.lambdynlights.api.item.ItemLightSource; import dev.lambdaurora.lambdynlights.api.item.ItemLightSources; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.entity.EntityType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.entity.BlockEntityType; /** * Represents the entrypoint for LambDynamicLights API. diff --git a/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSource.java b/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSource.java index 5fc4216..b7dda2f 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSource.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSource.java @@ -11,17 +11,16 @@ import com.google.gson.JsonObject; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.BlockStateComponent; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.registry.Registries; -import net.minecraft.state.property.Property; -import net.minecraft.util.Identifier; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.component.BlockItemStateProperties; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; import java.util.Optional; @@ -30,7 +29,7 @@ * Represents an item light source. * * @author LambdAurora - * @version 2.1.0 + * @version 3.0.0 * @since 1.3.0 */ public abstract class ItemLightSource { @@ -98,7 +97,7 @@ public String toString() { } var affectId = Identifier.tryParse(json.get("item").getAsString()); - var item = Registries.ITEM.get(affectId); + var item = BuiltInRegistries.ITEM.get(affectId); if (item == Items.AIR) return Optional.empty(); @@ -114,14 +113,14 @@ public String toString() { var luminanceStr = luminanceElement.getAsString(); if (luminanceStr.equals("block")) { if (item instanceof BlockItem blockItem) { - return Optional.of(new BlockItemLightSource(id, item, blockItem.getBlock().getDefaultState(), waterSensitive)); + return Optional.of(new BlockItemLightSource(id, item, blockItem.getBlock().defaultState(), waterSensitive)); } } else { var blockId = Identifier.tryParse(luminanceStr); if (blockId != null) { - var block = Registries.BLOCK.get(blockId); + var block = BuiltInRegistries.BLOCK.get(blockId); if (block != Blocks.AIR) - return Optional.of(new BlockItemLightSource(id, item, block.getDefaultState(), waterSensitive)); + return Optional.of(new BlockItemLightSource(id, item, block.defaultState(), waterSensitive)); } } } else { @@ -164,17 +163,13 @@ public int getLuminance(ItemStack stack) { } static int getLuminance(ItemStack stack, BlockState state) { - var nbt = stack.getComponents().getOrDefault(DataComponentTypes.BLOCK_STATE, BlockStateComponent.DEFAULT); + var nbt = stack.getComponents().getOrDefault(DataComponents.BLOCK_STATE, BlockItemStateProperties.EMPTY); if (!nbt.isEmpty()) { - state = nbt.applyToState(state); + state = nbt.apply(state); } - return state.getLuminance(); - } - - private static > BlockState with(BlockState state, Property property, String name) { - return property.parse(name).map(value -> state.with(property, value)).orElse(state); + return state.getLightEmission(); } } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSources.java b/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSources.java index 8206b5e..2fb2946 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSources.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/api/item/ItemLightSources.java @@ -12,13 +12,13 @@ import com.google.gson.JsonParser; import dev.lambdaurora.lambdynlights.LambDynLights; import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; -import net.minecraft.resource.Resource; -import net.minecraft.resource.ResourceManager; -import net.minecraft.util.Identifier; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.io.Resource; +import net.minecraft.resources.io.ResourceManager; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import java.io.IOException; import java.io.InputStreamReader; @@ -47,15 +47,15 @@ private ItemLightSources() { public static void load(ResourceManager resourceManager) { ITEM_LIGHT_SOURCES.clear(); - resourceManager.findResources("dynamiclights/item", path -> path.getPath().endsWith(".json")) + resourceManager.findResources("dynamiclights/item", path -> path.path().endsWith(".json")) .forEach(ItemLightSources::load); ITEM_LIGHT_SOURCES.putAll(STATIC_ITEM_LIGHT_SOURCES); } private static void load(Identifier resourceId, Resource resource) { - var id = Identifier.of(resourceId.getNamespace(), resourceId.getPath().replace(".json", "")); - try (var reader = new InputStreamReader(resource.getInputStream())) { + var id = Identifier.of(resourceId.namespace(), resourceId.path().replace(".json", "")); + try (var reader = new InputStreamReader(resource.open())) { var json = JsonParser.parseReader(reader).getAsJsonObject(); ItemLightSource.fromJson(id, json).ifPresent(data -> { @@ -77,7 +77,7 @@ private static void register(ItemLightSource data) { if (other != null) { LambDynLights.get().warn("Failed to register item light source \"" + data.id() + "\", duplicates item \"" - + Registries.ITEM.getId(data.item()) + "\" found in \"" + other.id() + "\"."); + + BuiltInRegistries.ITEM.getId(data.item()) + "\" found in \"" + other.id() + "\"."); return; } @@ -94,7 +94,7 @@ public static void registerItemLightSource(ItemLightSource data) { if (other != null) { LambDynLights.get().warn("Failed to register item light source \"" + data.id() + "\", duplicates item \"" - + Registries.ITEM.getId(data.item()) + "\" found in \"" + other.id() + "\"."); + + BuiltInRegistries.ITEM.getId(data.item()) + "\" found in \"" + other.id() + "\"."); return; } @@ -114,7 +114,7 @@ public static int getLuminance(ItemStack stack, boolean submergedInWater) { if (data != null) { return data.getLuminance(stack, submergedInWater); } else if (stack.getItem() instanceof BlockItem blockItem) - return ItemLightSource.BlockItemLightSource.getLuminance(stack, blockItem.getBlock().getDefaultState()); + return ItemLightSource.BlockItemLightSource.getLuminance(stack, blockItem.getBlock().defaultState()); else return 0; } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/config/BooleanSettingEntry.java b/src/main/java/dev/lambdaurora/lambdynlights/config/BooleanSettingEntry.java index 9403cc9..de42392 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/config/BooleanSettingEntry.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/config/BooleanSettingEntry.java @@ -12,7 +12,7 @@ import com.electronwill.nightconfig.core.Config; import dev.lambdaurora.spruceui.option.SpruceBooleanOption; import dev.lambdaurora.spruceui.option.SpruceOption; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; diff --git a/src/main/java/dev/lambdaurora/lambdynlights/config/LightSourceSettingEntry.java b/src/main/java/dev/lambdaurora/lambdynlights/config/LightSourceSettingEntry.java index e33bb47..aa0f5f7 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/config/LightSourceSettingEntry.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/config/LightSourceSettingEntry.java @@ -13,8 +13,8 @@ import dev.lambdaurora.spruceui.SpruceTexts; import dev.lambdaurora.spruceui.option.SpruceBooleanOption; import dev.lambdaurora.spruceui.option.SpruceOption; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.TextFormatting; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; @@ -48,7 +48,7 @@ public Option(String key, Supplier getter, Consumer setter, @N public Text getDisplayText() { boolean value = this.get(); return SpruceTexts.getToggleText(value).copy() - .formatted(value ? Formatting.GREEN : Formatting.RED); + .withStyle(value ? TextFormatting.GREEN : TextFormatting.RED); } } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/config/SettingEntry.java b/src/main/java/dev/lambdaurora/lambdynlights/config/SettingEntry.java index cc179cf..7c9799f 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/config/SettingEntry.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/config/SettingEntry.java @@ -11,7 +11,7 @@ import com.electronwill.nightconfig.core.Config; import dev.lambdaurora.spruceui.option.SpruceOption; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; diff --git a/src/main/java/dev/lambdaurora/lambdynlights/gui/DynamicLightsOptionsOption.java b/src/main/java/dev/lambdaurora/lambdynlights/gui/DynamicLightsOptionsOption.java index 0d4bd17..50ef326 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/gui/DynamicLightsOptionsOption.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/gui/DynamicLightsOptionsOption.java @@ -11,13 +11,13 @@ import com.mojang.datafixers.util.Unit; import com.mojang.serialization.Codec; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.option.GameOptions; -import net.minecraft.client.option.SimpleOption; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.OptionInstance; +import net.minecraft.client.Options; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Text; import java.util.Optional; import java.util.function.Consumer; @@ -26,26 +26,26 @@ public final class DynamicLightsOptionsOption { private static final String KEY = "lambdynlights.menu.title"; - public static SimpleOption getOption(Screen parent) { - return new SimpleOption<>( - KEY, SimpleOption.emptyTooltip(), + public static OptionInstance getOption(Screen parent) { + return new OptionInstance<>( + KEY, OptionInstance.noTooltip(), (title, object) -> title, new DummyValueSet(parent), Unit.INSTANCE, unit -> {}); } - private record DummyValueSet(Screen parent) implements SimpleOption.Callbacks { - + private record DummyValueSet(Screen parent) implements OptionInstance.ValueSet { @Override - public Function, ClickableWidget> getWidgetCreator(SimpleOption.TooltipFactory tooltipSupplier, GameOptions options, + public Function, AbstractWidget> createButton( + OptionInstance.TooltipSupplier tooltipSupplier, Options options, int x, int y, int width, Consumer changeCallback) { - return option -> ButtonWidget.builder(Text.translatable(KEY), button -> MinecraftClient.getInstance() - .setScreen(new SettingsScreen(this.parent))).dimensions(x, y, width, 20).build(); + return option -> Button.builder(Text.translatable(KEY), button -> Minecraft.getInstance() + .setScreen(new SettingsScreen(this.parent))).bounds(x, y, width, 20).build(); } @Override - public Optional validate(Unit value) { + public Optional validateValue(Unit value) { return Optional.of(Unit.INSTANCE); } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/gui/InnerBackground.java b/src/main/java/dev/lambdaurora/lambdynlights/gui/InnerBackground.java index 0eb1922..56c54f1 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/gui/InnerBackground.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/gui/InnerBackground.java @@ -12,19 +12,18 @@ import dev.lambdaurora.spruceui.background.Background; import dev.lambdaurora.spruceui.background.DirtTexturedBackground; import dev.lambdaurora.spruceui.widget.SpruceWidget; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; public class InnerBackground implements Background { - @Override - public void render(DrawContext drawContext, SpruceWidget widget, int vOffset, int mouseX, int mouseY, float delta) { - if (MinecraftClient.getInstance().world != null) { - drawContext.fillGradient(widget.getX(), widget.getY(), + public void render(GuiGraphics graphics, SpruceWidget widget, int vOffset, int mouseX, int mouseY, float delta) { + if (Minecraft.getInstance().level != null) { + graphics.fillGradient(widget.getX(), widget.getY(), widget.getX() + widget.getWidth(), widget.getY() + widget.getHeight(), 0xc0060606, 0xd0060606); } else { - DirtTexturedBackground.DARKENED.render(drawContext, widget, vOffset, mouseX, mouseY, delta); + DirtTexturedBackground.DARKENED.render(graphics, widget, vOffset, mouseX, mouseY, delta); } } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/gui/LightSourceListWidget.java b/src/main/java/dev/lambdaurora/lambdynlights/gui/LightSourceListWidget.java index 26f72a1..5c7ba13 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/gui/LightSourceListWidget.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/gui/LightSourceListWidget.java @@ -22,10 +22,10 @@ import dev.lambdaurora.spruceui.widget.WithBackground; import dev.lambdaurora.spruceui.widget.container.SpruceEntryListWidget; import dev.lambdaurora.spruceui.widget.container.SpruceParentWidget; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; -import net.minecraft.client.gui.screen.narration.NarrationPart; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.narration.NarratedElementType; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; @@ -65,25 +65,25 @@ public void addAll(List> types) { /* Narration */ @Override - public void appendNarrations(NarrationMessageBuilder builder) { + public void updateNarration(NarrationElementOutput builder) { this.children() .stream() .filter(AbstractSpruceWidget::isMouseHovered) .findFirst() .ifPresentOrElse( hoveredEntry -> { - hoveredEntry.appendNarrations(builder.nextMessage()); + hoveredEntry.updateNarration(builder.nest()); this.appendPositionNarrations(builder, hoveredEntry); }, () -> { var focusedEntry = this.getFocused(); if (focusedEntry != null) { - focusedEntry.appendNarrations(builder.nextMessage()); + focusedEntry.updateNarration(builder.nest()); this.appendPositionNarrations(builder, focusedEntry); } } ); - builder.put(NarrationPart.USAGE, Text.translatable("narration.component_list.usage")); + builder.add(NarratedElementType.USAGE, Text.translatable("narration.component_list.usage")); } public static class LightSourceEntry extends Entry implements SpruceParentWidget, WithBackground { @@ -203,20 +203,20 @@ protected boolean onCharTyped(char chr, int keyCode) { /* Rendering */ - protected void renderWidget(DrawContext drawContext, int mouseX, int mouseY, float delta) { - this.forEach(widget -> widget.render(drawContext, mouseX, mouseY, delta)); + protected void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float delta) { + this.forEach(widget -> widget.render(graphics, mouseX, mouseY, delta)); } - protected void renderBackground(DrawContext drawContext, int mouseX, int mouseY, float delta) { - this.background.render(drawContext, this, 0, mouseX, mouseY, delta); + protected void renderBackground(GuiGraphics graphics, int mouseX, int mouseY, float delta) { + this.background.render(graphics, this, 0, mouseX, mouseY, delta); } /* Narration */ @Override - public void appendNarrations(NarrationMessageBuilder builder) { + public void updateNarration(NarrationElementOutput builder) { var focused = this.getFocused(); - if (focused != null) focused.appendNarrations(builder); + if (focused != null) focused.updateNarration(builder); } /* Navigation */ diff --git a/src/main/java/dev/lambdaurora/lambdynlights/gui/RandomPrideFlagBackground.java b/src/main/java/dev/lambdaurora/lambdynlights/gui/RandomPrideFlagBackground.java index 23a5608..48b9992 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/gui/RandomPrideFlagBackground.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/gui/RandomPrideFlagBackground.java @@ -10,6 +10,7 @@ package dev.lambdaurora.lambdynlights.gui; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; import dev.lambdaurora.spruceui.background.Background; import dev.lambdaurora.spruceui.background.SimpleColorBackground; import dev.lambdaurora.spruceui.util.ColorUtil; @@ -17,9 +18,9 @@ import io.github.queerbric.pride.PrideFlag; import io.github.queerbric.pride.PrideFlagShapes; import io.github.queerbric.pride.PrideFlags; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.*; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.resources.Identifier; import org.joml.Matrix4f; import org.joml.Vector4f; @@ -45,15 +46,15 @@ public RandomPrideFlagBackground(PrideFlag flag) { } @Override - public void render(DrawContext drawContext, SpruceWidget widget, int vOffset, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics graphics, SpruceWidget widget, int vOffset, int mouseX, int mouseY, float delta) { int x = widget.getX(); int y = widget.getY(); - RenderSystem.setShader(GameRenderer::getPositionColorProgram); + RenderSystem.setShader(GameRenderer::getPositionColorShader); if (this.flag.getShape() == PrideFlagShapes.get(Identifier.of("pride", "horizontal_stripes"))) { - var model = drawContext.getMatrices().peek().getPositionMatrix(); + var model = graphics.matrixStack().peek().model(); var tessellator = Tessellator.getInstance(); - var vertices = tessellator.begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR); + var vertices = tessellator.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR); int width = widget.getWidth(); int height = widget.getHeight(); @@ -92,16 +93,16 @@ public void render(DrawContext drawContext, SpruceWidget widget, int vOffset, in vertex(vertices, model, x, leftY, 0).color(color[0], color[1], color[2], color[3]); vertex(vertices, model, x, y + height, 0).color(color[0], color[1], color[2], color[3]); - BuiltBuffer builtBuffer = vertices.endNullable(); + MeshData builtBuffer = vertices.build(); if (builtBuffer != null) { - BufferRenderer.drawWithGlobalProgram(builtBuffer); + BufferUploader.drawWithShader(builtBuffer); } tessellator.clear(); } else { - this.flag.render(drawContext.getMatrices(), x, y, widget.getWidth(), widget.getHeight()); + this.flag.render(graphics.matrixStack(), x, y, widget.getWidth(), widget.getHeight()); } - SECOND_LAYER.render(drawContext, widget, vOffset, mouseX, mouseY, delta); + SECOND_LAYER.render(graphics, widget, vOffset, mouseX, mouseY, delta); } /** @@ -115,6 +116,6 @@ public static Background random() { private static VertexConsumer vertex(BufferBuilder builder, Matrix4f matrix, float x, float y, float z) { Vector4f vector4f = matrix.transform(new Vector4f(x, y, z, 1.0f)); - return builder.vertex(vector4f.x(), vector4f.y(), vector4f.z()); + return builder.addVertex(vector4f.x(), vector4f.y(), vector4f.z()); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/gui/SettingsScreen.java b/src/main/java/dev/lambdaurora/lambdynlights/gui/SettingsScreen.java index d2cc14e..3840583 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/gui/SettingsScreen.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/gui/SettingsScreen.java @@ -29,11 +29,11 @@ import dev.lambdaurora.spruceui.widget.container.SpruceContainerWidget; import dev.lambdaurora.spruceui.widget.container.SpruceOptionListWidget; import dev.lambdaurora.spruceui.widget.container.tabbed.SpruceTabbedWidget; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.registry.Registries; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.TextFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Text; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -85,8 +85,8 @@ public SettingsScreen(@Nullable Screen parent) { ExplosiveLightingMode.FANCY.getTranslatedText())); this.resetOption = SpruceSimpleActionOption.reset(btn -> { this.config.reset(); - MinecraftClient client = MinecraftClient.getInstance(); - this.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); + var client = Minecraft.getInstance(); + this.init(client, client.getWindow().getGuiScaledWidth(), client.getWindow().getGuiScaledHeight()); }); } @@ -97,7 +97,7 @@ public void removed() { } private int getTextHeight() { - return (5 + this.textRenderer.fontHeight) * 3 + 5; + return (5 + this.font.lineHeight) * 3 + 5; } @Override @@ -115,7 +115,7 @@ protected void init() { null, this.tabContainerBuilder(this::buildEntitiesTab)); this.tabbedWidget.addTabEntry(Text.empty().append(dynamicLightSources).append(": ").append(this.blockEntitiesOption.getPrefix()), null, this.tabContainerBuilder(this::buildBlockEntitiesTab)); - this.addSelectableChild(this.tabbedWidget); + this.addWidget(this.tabbedWidget); } private SpruceTabbedWidget.ContainerFactory tabContainerBuilder(SpruceTabbedWidget.ContainerFactory innerFactory) { @@ -124,7 +124,7 @@ private SpruceTabbedWidget.ContainerFactory tabContainerBuilder(SpruceTabbedWidg private SpruceContainerWidget buildTabContainer(int width, int height, SpruceTabbedWidget.ContainerFactory factory) { var container = new SpruceContainerWidget(Position.origin(), width, height); - var label = new SpruceLabelWidget(Position.of(0, 18), this.title.copy().formatted(Formatting.WHITE), width); + var label = new SpruceLabelWidget(Position.of(0, 18), this.title.copy().withStyle(TextFormatting.WHITE), width); label.setCentered(true); container.addChild(label); @@ -134,7 +134,7 @@ private SpruceContainerWidget buildTabContainer(int width, int height, SpruceTab container.addChild(innerWidget); container.setBackground((graphics, widget, vOffset, mouseX, mouseY, delta) -> { - if (this.client.world != null) { + if (this.client.level != null) { graphics.fillGradient(widget.getX(), widget.getY(), widget.getX() + widget.getWidth(), innerWidget.getY(), 0xc0101010, 0xd0101010); @@ -153,7 +153,7 @@ private SpruceContainerWidget buildTabContainer(int width, int height, SpruceTab }); if (LambDynLightsCompat.isCanvasInstalled()) { - var firstLine = new SpruceLabelWidget(Position.of(0, height - 29 - (5 + this.textRenderer.fontHeight) * 3), + var firstLine = new SpruceLabelWidget(Position.of(0, height - 29 - (5 + this.font.lineHeight) * 3), Text.translatable("lambdynlights.menu.canvas.1"), width); firstLine.setCentered(true); container.addChild(firstLine); @@ -183,11 +183,11 @@ private SpruceOptionListWidget buildGeneralTab(int width, int height) { } private LightSourceListWidget buildEntitiesTab(int width, int height) { - return this.buildLightSourcesTab(width, height, Registries.ENTITY_TYPE.stream().map(DynamicLightHandlerHolder::cast).collect(Collectors.toList())); + return this.buildLightSourcesTab(width, height, BuiltInRegistries.ENTITY_TYPE.stream().map(DynamicLightHandlerHolder::cast).collect(Collectors.toList())); } private LightSourceListWidget buildBlockEntitiesTab(int width, int height) { - return this.buildLightSourcesTab(width, height, Registries.BLOCK_ENTITY_TYPE.stream().map(DynamicLightHandlerHolder::cast).collect(Collectors.toList())); + return this.buildLightSourcesTab(width, height, BuiltInRegistries.BLOCK_ENTITY_TYPE.stream().map(DynamicLightHandlerHolder::cast).collect(Collectors.toList())); } private LightSourceListWidget buildLightSourcesTab(int width, int height, List> entries) { diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/BlockEntityTypeMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/BlockEntityTypeMixin.java index f84db55..12030ee 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/BlockEntityTypeMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/BlockEntityTypeMixin.java @@ -13,10 +13,10 @@ import dev.lambdaurora.lambdynlights.accessor.DynamicLightHandlerHolder; import dev.lambdaurora.lambdynlights.api.DynamicLightHandler; import dev.lambdaurora.lambdynlights.config.LightSourceSettingEntry; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.registry.Registries; -import net.minecraft.text.Text; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Text; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -42,13 +42,13 @@ public class BlockEntityTypeMixin implements DynamicLight public LightSourceSettingEntry lambdynlights$getSetting() { if (this.lambdynlights$setting == null) { var self = (BlockEntityType) (Object) this; - var id = Registries.BLOCK_ENTITY_TYPE.getId(self); + var id = BuiltInRegistries.BLOCK_ENTITY_TYPE.getId(self); if (id == null) { return null; } this.lambdynlights$setting = new LightSourceSettingEntry("light_sources.settings.block_entities." - + id.getNamespace() + '.' + id.getPath().replace('/', '.'), + + id.namespace() + '.' + id.path().replace('/', '.'), true, null, null); LambDynLights.get().config.load(this.lambdynlights$setting); } @@ -59,10 +59,10 @@ public class BlockEntityTypeMixin implements DynamicLight @Override public Text lambdynlights$getName() { var self = (BlockEntityType) (Object) this; - var id = Registries.BLOCK_ENTITY_TYPE.getId(self); + var id = BuiltInRegistries.BLOCK_ENTITY_TYPE.getId(self); if (id == null) { return Text.empty(); } - return Text.literal(id.getNamespace() + ':' + id.getPath()); + return Text.literal(id.namespace() + ':' + id.path()); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/ClientWorldMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/ClientLevelMixin.java similarity index 64% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/ClientWorldMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/ClientLevelMixin.java index b7f233d..136d5d3 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/ClientWorldMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/ClientLevelMixin.java @@ -10,23 +10,23 @@ package dev.lambdaurora.lambdynlights.mixin; import dev.lambdaurora.lambdynlights.DynamicLightSource; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.world.entity.EntityLookup; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.entity.LevelEntityGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientWorld.class) -public abstract class ClientWorldMixin { +@Mixin(ClientLevel.class) +public abstract class ClientLevelMixin { @Shadow - protected abstract EntityLookup getEntityLookup(); + protected abstract LevelEntityGetter getEntities(); - @Inject(method = "removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V", at = @At("HEAD")) + @Inject(method = "removeEntity(ILnet/minecraft/world/entity/Entity$RemovalReason;)V", at = @At("HEAD")) private void onFinishRemovingEntity(int entityId, Entity.RemovalReason removalReason, CallbackInfo ci) { - var entity = this.getEntityLookup().get(entityId); + var entity = this.getEntities().get(entityId); if (entity != null) { var dls = (DynamicLightSource) entity; dls.setDynamicLightEnabled(false); diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/CommonWorldRendererMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/CommonLevelRendererMixin.java similarity index 54% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/CommonWorldRendererMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/CommonLevelRendererMixin.java index 6c3b165..dc8baad 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/CommonWorldRendererMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/CommonLevelRendererMixin.java @@ -11,29 +11,29 @@ import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.accessor.WorldRendererAccessor; -import net.minecraft.block.BlockState; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockRenderView; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(value = WorldRenderer.class, priority = 900) -public abstract class CommonWorldRendererMixin implements WorldRendererAccessor { - @Invoker("scheduleChunkRender") +@Mixin(value = LevelRenderer.class, priority = 900) +public abstract class CommonLevelRendererMixin implements WorldRendererAccessor { + @Invoker("setSectionDirty") @Override public abstract void lambdynlights$scheduleChunkRebuild(int x, int y, int z, boolean important); @Inject( - method = "getLightmapCoordinates(Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)I", + method = "getLightColor(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;)I", at = @At("TAIL"), cancellable = true ) - private static void onGetLightmapCoordinates(BlockRenderView world, BlockState state, BlockPos pos, CallbackInfoReturnable cir) { - if (!world.getBlockState(pos).isOpaqueFullCube(world, pos) && LambDynLights.get().config.getDynamicLightsMode().isEnabled()) + private static void onGetLightmapCoordinates(BlockAndTintGetter level, BlockState state, BlockPos pos, CallbackInfoReturnable cir) { + if (!level.getBlockState(pos).isSolidRender(level, pos) && LambDynLights.get().config.getDynamicLightsMode().isEnabled()) cir.setReturnValue(LambDynLights.get().getLightmapWithDynamicLight(pos, cir.getReturnValue())); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/DebugHudMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/DebugScreenOverlayMixin.java similarity index 78% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/DebugHudMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/DebugScreenOverlayMixin.java index baab5ee..0e1a449 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/DebugHudMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/DebugScreenOverlayMixin.java @@ -10,8 +10,8 @@ package dev.lambdaurora.lambdynlights.mixin; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.client.gui.hud.DebugHud; -import net.minecraft.util.Formatting; +import net.minecraft.TextFormatting; +import net.minecraft.client.gui.components.DebugScreenOverlay; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -26,9 +26,9 @@ * @version 1.3.2 * @since 1.3.2 */ -@Mixin(DebugHud.class) -public class DebugHudMixin { - @Inject(method = "getLeftText", at = @At("RETURN")) +@Mixin(DebugScreenOverlay.class) +public class DebugScreenOverlayMixin { + @Inject(method = "getGameInformation", at = @At("RETURN")) private void onGetLeftText(CallbackInfoReturnable> cir) { var list = cir.getReturnValue(); var ldl = LambDynLights.get(); @@ -39,9 +39,9 @@ private void onGetLeftText(CallbackInfoReturnable> cir) { if (!ldl.config.getDynamicLightsMode().isEnabled()) { builder.append(" ; "); - builder.append(Formatting.RED); + builder.append(TextFormatting.RED); builder.append("Disabled"); - builder.append(Formatting.RESET); + builder.append(TextFormatting.RESET); } builder.append(')'); diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityRendererMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityRendererMixin.java index 22a46a5..53e1994 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityRendererMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityRendererMixin.java @@ -11,9 +11,9 @@ import dev.lambdaurora.lambdynlights.DynamicLightSource; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.client.render.entity.EntityRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -21,7 +21,7 @@ @Mixin(EntityRenderer.class) public class EntityRendererMixin { - @Inject(method = "getBlockLight", at = @At("RETURN"), cancellable = true) + @Inject(method = "getBlockLightLevel", at = @At("RETURN"), cancellable = true) private void onGetBlockLight(T entity, BlockPos pos, CallbackInfoReturnable cir) { if (!LambDynLights.get().config.getDynamicLightsMode().isEnabled()) return; // Do not touch to the value. diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityTypeMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityTypeMixin.java index c2bd8d7..c5f60ae 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityTypeMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityTypeMixin.java @@ -13,10 +13,10 @@ import dev.lambdaurora.lambdynlights.accessor.DynamicLightHandlerHolder; import dev.lambdaurora.lambdynlights.api.DynamicLightHandler; import dev.lambdaurora.lambdynlights.config.LightSourceSettingEntry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.registry.Registries; -import net.minecraft.text.Text; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Text; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -25,7 +25,7 @@ @Mixin(EntityType.class) public abstract class EntityTypeMixin implements DynamicLightHandlerHolder { @Shadow - public abstract Text getName(); + public abstract Text getDescription(); @Unique private DynamicLightHandler lambdynlights$lightHandler; @@ -46,13 +46,13 @@ public abstract class EntityTypeMixin implements DynamicLightH public LightSourceSettingEntry lambdynlights$getSetting() { if (this.lambdynlights$setting == null) { var self = (EntityType) (Object) this; - var id = Registries.ENTITY_TYPE.getId(self); - if (id.getNamespace().equals("minecraft") && id.getPath().equals("pig") && self != EntityType.PIG) { + var id = BuiltInRegistries.ENTITY_TYPE.getId(self); + if (id.namespace().equals("minecraft") && id.path().equals("pig") && self != EntityType.PIG) { return null; } this.lambdynlights$setting = new LightSourceSettingEntry("light_sources.settings.entities." - + id.getNamespace() + '.' + id.getPath().replace('/', '.'), + + id.namespace() + '.' + id.path().replace('/', '.'), true, null, null); LambDynLights.get().config.load(this.lambdynlights$setting); } @@ -62,7 +62,7 @@ public abstract class EntityTypeMixin implements DynamicLightH @Override public Text lambdynlights$getName() { - var name = this.getName(); + var name = this.getDescription(); if (name == null) { return Text.translatable("lambdynlights.dummy"); } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/WorldMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/LevelMixin.java similarity index 58% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/WorldMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/LevelMixin.java index 4e2a4c9..d05d320 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/WorldMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/LevelMixin.java @@ -11,11 +11,11 @@ import dev.lambdaurora.lambdynlights.DynamicLightSource; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.profiler.Profiler; -import net.minecraft.world.World; -import net.minecraft.world.chunk.BlockEntityTickInvoker; +import net.minecraft.core.BlockPos; +import net.minecraft.util.profiling.Profiler; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.TickingBlockEntity; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -26,21 +26,28 @@ import java.util.Iterator; -@Mixin(World.class) -public abstract class WorldMixin { +@Mixin(Level.class) +public abstract class LevelMixin { @Shadow - public abstract boolean isClient(); + public abstract boolean isClientSide(); @Shadow public abstract @Nullable BlockEntity getBlockEntity(BlockPos pos); @Inject( method = "tickBlockEntities", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/chunk/BlockEntityTickInvoker;tick()V", shift = At.Shift.BEFORE), + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/block/entity/TickingBlockEntity;tick()V", + shift = At.Shift.BEFORE + ), locals = LocalCapture.CAPTURE_FAILEXCEPTION ) - private void onBlockEntityTick(CallbackInfo ci, Profiler profiler, Iterator iterator, boolean isRemoved, BlockEntityTickInvoker blockEntityTickInvoker) { - if (this.isClient() && LambDynLights.get().config.getBlockEntitiesLightSource().get() && !isRemoved) { + private void onBlockEntityTick( + CallbackInfo ci, + Profiler profiler, Iterator iterator, boolean isRemoved, TickingBlockEntity blockEntityTickInvoker + ) { + if (this.isClientSide() && LambDynLights.get().config.getBlockEntitiesLightSource().get() && !isRemoved) { var blockEntity = this.getBlockEntity(blockEntityTickInvoker.getPos()); if (blockEntity != null) ((DynamicLightSource) blockEntity).dynamicLightTick(); diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/MinecraftClientMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/MinecraftClientMixin.java index bd6e38b..b1c4520 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/MinecraftClientMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/MinecraftClientMixin.java @@ -10,8 +10,8 @@ package dev.lambdaurora.lambdynlights.mixin; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -26,10 +26,10 @@ * @version 1.3.2 * @since 1.3.2 */ -@Mixin(MinecraftClient.class) +@Mixin(Minecraft.class) public class MinecraftClientMixin { - @Inject(method = "setWorld", at = @At("HEAD")) - private void onSetWorld(ClientWorld world, CallbackInfo ci) { + @Inject(method = "updateLevelInEngines", at = @At("HEAD")) + private void onUpdateLevelInEngines(ClientLevel level, CallbackInfo ci) { LambDynLights.get().clearLightSources(); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/VideoOptionsScreenMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/VideoSettingsScreenMixin.java similarity index 52% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/VideoOptionsScreenMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/VideoSettingsScreenMixin.java index faf96d5..2091c2f 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/VideoOptionsScreenMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/VideoSettingsScreenMixin.java @@ -11,14 +11,14 @@ import dev.lambdaurora.lambdynlights.gui.DynamicLightsOptionsOption; import dev.lambdaurora.spruceui.Tooltip; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.option.GameOptionsScreen; -import net.minecraft.client.gui.screen.option.VideoOptionsScreen; -import net.minecraft.client.option.GameOptions; -import net.minecraft.client.option.SimpleOption; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.OptionInstance; +import net.minecraft.client.Options; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.options.OptionsSubScreen; +import net.minecraft.client.gui.screens.options.VideoSettingsScreen; +import net.minecraft.network.chat.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -26,17 +26,17 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(VideoOptionsScreen.class) -public abstract class VideoOptionsScreenMixin extends GameOptionsScreen { +@Mixin(VideoSettingsScreen.class) +public abstract class VideoSettingsScreenMixin extends OptionsSubScreen { @Unique - private SimpleOption lambdynlights$option; + private OptionInstance lambdynlights$option; - public VideoOptionsScreenMixin(Screen parent, GameOptions gameOptions, Text title) { + public VideoSettingsScreenMixin(Screen parent, Options gameOptions, Text title) { super(parent, gameOptions, title); } @Inject(method = "", at = @At("TAIL")) - private void onConstruct(Screen parent, MinecraftClient client, GameOptions gameOptions, CallbackInfo ci) { + private void onConstruct(Screen parent, Minecraft client, Options gameOptions, CallbackInfo ci) { this.lambdynlights$option = DynamicLightsOptionsOption.getOption(this); } @@ -44,19 +44,19 @@ private void onConstruct(Screen parent, MinecraftClient client, GameOptions game method = "addOptions", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/gui/widget/OptionListWidget;addAll([Lnet/minecraft/client/option/SimpleOption;)V" + target = "Lnet/minecraft/client/gui/components/OptionsList;addSmall([Lnet/minecraft/client/OptionInstance;)V" ), index = 0 ) - private SimpleOption[] addOptionButton(SimpleOption[] old) { - var options = new SimpleOption[old.length + 1]; + private OptionInstance[] addOptionButton(OptionInstance[] old) { + var options = new OptionInstance[old.length + 1]; System.arraycopy(old, 0, options, 0, old.length); options[options.length - 1] = this.lambdynlights$option; return options; } @Override - public void render(DrawContext graphics, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) { Tooltip.renderAll(graphics); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/fabric/AoCalculatorMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/fabric/AoCalculatorMixin.java index 5347cea..da9ce8d 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/fabric/AoCalculatorMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/fabric/AoCalculatorMixin.java @@ -10,9 +10,9 @@ package dev.lambdaurora.lambdynlights.mixin.fabric; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockRenderView; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -25,8 +25,8 @@ public abstract class AoCalculatorMixin { @Dynamic @Inject(method = "getLightmapCoordinates", at = @At(value = "RETURN", ordinal = 0), require = 0, cancellable = true, remap = false) - private static void onGetLightmapCoordinates(BlockRenderView world, BlockState state, BlockPos pos, CallbackInfoReturnable cir) { - if (!world.getBlockState(pos).isOpaqueFullCube(world, pos) && LambDynLights.get().config.getDynamicLightsMode().isEnabled()) + private static void onGetLightmapCoordinates(BlockAndTintGetter level, BlockState state, BlockPos pos, CallbackInfoReturnable cir) { + if (!level.getBlockState(pos).isSolidRender(level, pos) && LambDynLights.get().config.getDynamicLightsMode().isEnabled()) cir.setReturnValue(LambDynLights.get().getLightmapWithDynamicLight(pos, cir.getReturnValue())); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/ExplosiveProjectileEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractHurtingProjectileEntityMixin.java similarity index 63% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/ExplosiveProjectileEntityMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractHurtingProjectileEntityMixin.java index c8f2410..dc1e7a3 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/ExplosiveProjectileEntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractHurtingProjectileEntityMixin.java @@ -12,16 +12,16 @@ import dev.lambdaurora.lambdynlights.DynamicLightSource; import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.projectile.ExplosiveProjectileEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.projectile.AbstractHurtingProjectile; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; -@Mixin(ExplosiveProjectileEntity.class) -public abstract class ExplosiveProjectileEntityMixin extends Entity implements DynamicLightSource { - public ExplosiveProjectileEntityMixin(EntityType type, World world) { - super(type, world); +@Mixin(AbstractHurtingProjectile.class) +public abstract class AbstractHurtingProjectileEntityMixin extends Entity implements DynamicLightSource { + public AbstractHurtingProjectileEntityMixin(EntityType type, Level level) { + super(type, level); } @Override diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractMinecartEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractMinecartEntityMixin.java index 7bae186..2b26b46 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractMinecartEntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractMinecartEntityMixin.java @@ -12,11 +12,11 @@ import dev.lambdaurora.lambdynlights.DynamicLightSource; import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.vehicle.AbstractMinecartEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -31,22 +31,22 @@ * @version 2.0.2 * @since 1.3.2 */ -@Mixin(AbstractMinecartEntity.class) +@Mixin(AbstractMinecart.class) public abstract class AbstractMinecartEntityMixin extends Entity implements DynamicLightSource { @Shadow - public abstract BlockState getContainedBlock(); + public abstract BlockState getDisplayBlockState(); @Unique private int lambdynlights$luminance; - public AbstractMinecartEntityMixin(EntityType type, World world) { - super(type, world); + public AbstractMinecartEntityMixin(EntityType type, Level level) { + super(type, level); } @Inject(method = "tick", at = @At("HEAD")) private void onTick(CallbackInfo ci) { // We do not want to update the entity on the server. - if (this.getWorld().isClient()) { + if (this.level().isClientSide()) { if (this.isRemoved()) { this.setDynamicLightEnabled(false); } else { @@ -64,7 +64,7 @@ public void dynamicLightTick() { this.lambdynlights$luminance = Math.max( Math.max( this.isOnFire() ? 15 : 0, - this.getContainedBlock().getLuminance() + this.getDisplayBlockState().getLightEmission() ), DynamicLightHandlers.getLuminanceFrom(this) ); diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractDecorationEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/BlockAttachedEntityMixin.java similarity index 59% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractDecorationEntityMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/BlockAttachedEntityMixin.java index c87d584..07f026e 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/AbstractDecorationEntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/BlockAttachedEntityMixin.java @@ -12,26 +12,23 @@ import dev.lambdaurora.lambdynlights.DynamicLightSource; import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.decoration.AbstractDecorationEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.decoration.BlockAttachedEntity; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(AbstractDecorationEntity.class) -public abstract class AbstractDecorationEntityMixin extends Entity implements DynamicLightSource { - public AbstractDecorationEntityMixin(EntityType type, World world) { - super(type, world); +@Mixin(BlockAttachedEntity.class) +public abstract class BlockAttachedEntityMixin extends Entity implements DynamicLightSource { + public BlockAttachedEntityMixin(EntityType type, Level level) { + super(type, level); } @Override public void tick() { super.tick(); // We do not want to update the entity on the server. - if (this.getWorld().isClient()) { + if (this.level().isClientSide()) { if (this.isRemoved()) { this.setDynamicLightEnabled(false); } else { diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/BlockEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/BlockEntityMixin.java index e1b1e47..7bddd10 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/BlockEntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/BlockEntityMixin.java @@ -13,13 +13,13 @@ import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Final; @@ -38,7 +38,7 @@ public abstract class BlockEntityMixin implements DynamicLightSource { @Shadow @Nullable - protected World world; + protected Level level; @Shadow protected boolean removed; @@ -68,8 +68,8 @@ public double getDynamicLightZ() { } @Override - public World getDynamicLightWorld() { - return this.world; + public Level getDynamicLightLevel() { + return this.level; } @Inject(method = "markRemoved", at = @At("TAIL")) @@ -85,7 +85,7 @@ public void resetDynamicLight() { @Override public void dynamicLightTick() { // We do not want to update the entity on the server. - if (this.world == null || !this.world.isClient()) + if (this.level == null || !this.level.isClientSide()) return; if (!this.removed) { this.luminance = DynamicLightHandlers.getLuminanceFrom((BlockEntity) (Object) this); @@ -119,7 +119,7 @@ public boolean shouldUpdateDynamicLight() { } @Override - public boolean lambdynlights$updateDynamicLight(@NotNull WorldRenderer renderer) { + public boolean lambdynlights$updateDynamicLight(@NotNull LevelRenderer renderer) { if (!this.shouldUpdateDynamicLight()) return false; @@ -162,8 +162,8 @@ public boolean shouldUpdateDynamicLight() { } @Override - public void lambdynlights$scheduleTrackedChunksRebuild(@NotNull WorldRenderer renderer) { - if (this.world == MinecraftClient.getInstance().world) + public void lambdynlights$scheduleTrackedChunksRebuild(@NotNull LevelRenderer renderer) { + if (this.level == Minecraft.getInstance().level) for (long pos : this.lambdynlights$trackedLitChunkPos) { LambDynLights.scheduleChunkRebuild(renderer, pos); } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/EntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/EntityMixin.java index 792dc3d..c7bda5e 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/EntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/EntityMixin.java @@ -13,12 +13,16 @@ import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.util.math.*; -import net.minecraft.world.World; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.ChunkSectionPos; +import net.minecraft.core.Direction; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -30,7 +34,7 @@ @Mixin(Entity.class) public abstract class EntityMixin implements DynamicLightSource { @Shadow - public World world; + public Level level; @Shadow public abstract double getX(); @@ -57,7 +61,7 @@ public abstract class EntityMixin implements DynamicLightSource { public abstract boolean isRemoved(); @Shadow - public abstract ChunkPos getChunkPos(); + public abstract ChunkPos chunkPosition(); @Unique protected int lambdynlights$luminance = 0; @@ -77,7 +81,7 @@ public abstract class EntityMixin implements DynamicLightSource { @Inject(method = "tick", at = @At("TAIL")) public void onTick(CallbackInfo ci) { // We do not want to update the entity on the server. - if (this.world.isClient()) { + if (this.level.isClientSide()) { if (this.isRemoved()) { this.setDynamicLightEnabled(false); } else { @@ -92,7 +96,7 @@ public void onTick(CallbackInfo ci) { @Inject(method = "remove", at = @At("TAIL")) public void onRemove(CallbackInfo ci) { - if (this.world.isClient()) + if (this.level.isClientSide()) this.setDynamicLightEnabled(false); } @@ -112,8 +116,8 @@ public double getDynamicLightZ() { } @Override - public World getDynamicLightWorld() { - return this.world; + public Level getDynamicLightLevel() { + return this.level; } @Override @@ -152,7 +156,7 @@ public int getLuminance() { } @Override - public boolean lambdynlights$updateDynamicLight(@NotNull WorldRenderer renderer) { + public boolean lambdynlights$updateDynamicLight(@NotNull LevelRenderer renderer) { if (!this.shouldUpdateDynamicLight()) return false; double deltaX = this.getX() - this.lambdynlights$prevX; @@ -170,8 +174,8 @@ public int getLuminance() { var newPos = new LongOpenHashSet(); if (luminance > 0) { - var entityChunkPos = this.getChunkPos(); - var chunkPos = new BlockPos.Mutable(entityChunkPos.x, ChunkSectionPos.getSectionCoord(this.getEyeY()), entityChunkPos.z); + var entityChunkPos = this.chunkPosition(); + var chunkPos = new BlockPos.Mutable(entityChunkPos.x, ChunkSectionPos.blockToSectionCoord(this.getEyeY()), entityChunkPos.z); LambDynLights.scheduleChunkRebuild(renderer, chunkPos); LambDynLights.updateTrackedChunks(chunkPos, this.lambdynlights$trackedLitChunkPos, newPos); @@ -206,8 +210,8 @@ public int getLuminance() { } @Override - public void lambdynlights$scheduleTrackedChunksRebuild(@NotNull WorldRenderer renderer) { - if (MinecraftClient.getInstance().world == this.world) + public void lambdynlights$scheduleTrackedChunksRebuild(@NotNull LevelRenderer renderer) { + if (Minecraft.getInstance().level == this.level) for (long pos : this.lambdynlights$trackedLitChunkPos) { LambDynLights.scheduleChunkRebuild(renderer, pos); } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/LivingEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/LivingEntityMixin.java index 39a553e..84382a1 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/LivingEntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/LivingEntityMixin.java @@ -12,10 +12,10 @@ import dev.lambdaurora.lambdynlights.DynamicLightSource; import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -24,8 +24,8 @@ public abstract class LivingEntityMixin extends Entity implements DynamicLightSo @Unique protected int lambdynlights$luminance; - public LivingEntityMixin(EntityType type, World world) { - super(type, world); + public LivingEntityMixin(EntityType type, Level level) { + super(type, level); } @Override @@ -35,7 +35,7 @@ public void dynamicLightTick() { return; } - if (this.isOnFire() || this.isGlowing()) { + if (this.isOnFire() || this.isCurrentlyGlowing()) { this.lambdynlights$luminance = 15; } else { this.lambdynlights$luminance = LambDynLights.getLivingEntityLuminanceFromItems((LivingEntity) (Object) this); diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/PlayerEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/PlayerEntityMixin.java index 66b8d05..b59f31b 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/PlayerEntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/PlayerEntityMixin.java @@ -12,15 +12,15 @@ import dev.lambdaurora.lambdynlights.DynamicLightSource; import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; -@Mixin(PlayerEntity.class) +@Mixin(Player.class) public abstract class PlayerEntityMixin extends LivingEntity implements DynamicLightSource { @Shadow public abstract boolean isSpectator(); @@ -28,10 +28,10 @@ public abstract class PlayerEntityMixin extends LivingEntity implements DynamicL @Unique protected int lambdynlights$luminance; @Unique - private World lambdynlights$lastWorld; + private Level lambdynlights$lastWorld; - protected PlayerEntityMixin(EntityType entityType, World world) { - super(entityType, world); + protected PlayerEntityMixin(EntityType type, Level level) { + super(type, level); } @Override @@ -41,7 +41,7 @@ public void dynamicLightTick() { return; } - if (this.isOnFire() || this.isGlowing()) { + if (this.isOnFire() || this.isCurrentlyGlowing()) { this.lambdynlights$luminance = 15; } else { this.lambdynlights$luminance = Math.max( @@ -53,8 +53,8 @@ public void dynamicLightTick() { if (this.isSpectator()) this.lambdynlights$luminance = 0; - if (this.lambdynlights$lastWorld != this.getWorld()) { - this.lambdynlights$lastWorld = this.getWorld(); + if (this.lambdynlights$lastWorld != this.level()) { + this.lambdynlights$lastWorld = this.level(); this.lambdynlights$luminance = 0; } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/TntEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/PrimedTntEntityMixin.java similarity index 76% rename from src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/TntEntityMixin.java rename to src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/PrimedTntEntityMixin.java index 58b0adb..2ff8e78 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/TntEntityMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/lightsource/PrimedTntEntityMixin.java @@ -13,10 +13,10 @@ import dev.lambdaurora.lambdynlights.ExplosiveLightingMode; import dev.lambdaurora.lambdynlights.LambDynLights; import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.TntEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.item.PrimedTnt; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -24,8 +24,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(TntEntity.class) -public abstract class TntEntityMixin extends Entity implements DynamicLightSource { +@Mixin(PrimedTnt.class) +public abstract class PrimedTntEntityMixin extends Entity implements DynamicLightSource { @Shadow public abstract int getFuse(); @@ -34,19 +34,19 @@ public abstract class TntEntityMixin extends Entity implements DynamicLightSourc @Unique private int lambdynlights$luminance; - public TntEntityMixin(EntityType type, World world) { - super(type, world); + public PrimedTntEntityMixin(EntityType type, Level level) { + super(type, level); } - @Inject(method = "(Lnet/minecraft/entity/EntityType;Lnet/minecraft/world/World;)V", at = @At("TAIL")) - private void onNew(EntityType entityType, World world, CallbackInfo ci) { + @Inject(method = "(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/level/Level;)V", at = @At("TAIL")) + private void onNew(EntityType type, Level level, CallbackInfo ci) { this.startFuseTimer = this.getFuse(); } @Inject(method = "tick", at = @At("TAIL")) private void onTick(CallbackInfo ci) { // We do not want to update the entity on the server. - if (this.getWorld().isClient()) { + if (this.level().isClientSide()) { if (!LambDynLights.get().config.getTntLightingMode().isEnabled()) return; diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/ltr/LilTaterBlockEntityMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/ltr/LilTaterBlockEntityMixin.java deleted file mode 100644 index 7ab687f..0000000 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/ltr/LilTaterBlockEntityMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2020 LambdAurora - * - * This file is part of LambDynamicLights. - * - * Licensed under the Lambda License. For more information, - * see the LICENSE file. - */ - -package dev.lambdaurora.lambdynlights.mixin.ltr; - -import dev.lambdaurora.lambdynlights.util.LilTaterBlockEntityAccessor; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.util.collection.DefaultedList; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Pseudo -@Mixin(targets = "mods.ltr.entities.LilTaterBlockEntity") -public abstract class LilTaterBlockEntityMixin implements Inventory, LilTaterBlockEntityAccessor { - @Override - public boolean lambdynlights$isEmpty() { - return this.isEmpty(); - } - - @Accessor(value = "items", remap = false) - public abstract DefaultedList lambdynlights$getItems(); -} diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/ltr/LilTaterBlocksMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/ltr/LilTaterBlocksMixin.java deleted file mode 100644 index f16dca0..0000000 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/ltr/LilTaterBlocksMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright © 2020 LambdAurora - * - * This file is part of LambDynamicLights. - * - * Licensed under the Lambda License. For more information, - * see the LICENSE file. - */ - -package dev.lambdaurora.lambdynlights.mixin.ltr; - -import dev.lambdaurora.lambdynlights.LambDynLights; -import dev.lambdaurora.lambdynlights.api.DynamicLightHandlers; -import dev.lambdaurora.lambdynlights.util.LilTaterBlockEntityAccessor; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.item.ItemStack; -import org.spongepowered.asm.mixin.Dynamic; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Pseudo -@Mixin(targets = "mods.ltr.registry.LilTaterBlocks", remap = false) -public class LilTaterBlocksMixin { - @Accessor("LIL_TATER_BLOCK_ENTITY") - private static BlockEntityType getLilTaterBlockEntity() { - throw new IllegalStateException("Accessor did not apply properly."); - } - - @Dynamic - @Inject(method = "init", at = @At("TAIL")) - private static void onInit(CallbackInfo ci) { - DynamicLightHandlers.registerDynamicLightHandler(getLilTaterBlockEntity(), entity -> { - int luminance = 0; - if (!((LilTaterBlockEntityAccessor) entity).lambdynlights$isEmpty()) { - for (ItemStack item : ((LilTaterBlockEntityAccessor) entity).lambdynlights$getItems()) { - luminance = Math.max(luminance, LambDynLights.getLuminanceFromItemStack(item, !entity.getCachedState().getFluidState().isEmpty())); - } - } - return luminance; - }); - } -} diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/ArrayLightDataCacheMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/ArrayLightDataCacheMixin.java index ec46190..fb2ec7d 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/ArrayLightDataCacheMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/ArrayLightDataCacheMixin.java @@ -33,6 +33,6 @@ public abstract class ArrayLightDataCacheMixin { // Store the current light position. // This is possible under smooth lighting scenarios, because AoFaceData in Sodium runs a get() call // before getting the lightmap. - SodiumDynamicLightHandler.pos.get().set(x, y, z); + SodiumDynamicLightHandler.POS.get().set(x, y, z); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/FlatLightPipelineMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/FlatLightPipelineMixin.java index 537d49c..a73c7cb 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/FlatLightPipelineMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/FlatLightPipelineMixin.java @@ -10,8 +10,8 @@ package dev.lambdaurora.lambdynlights.mixin.sodium; import dev.lambdaurora.lambdynlights.util.SodiumDynamicLightHandler; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; diff --git a/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/LightDataAccessMixin.java b/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/LightDataAccessMixin.java index 10f138c..42ec56a 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/LightDataAccessMixin.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/mixin/sodium/LightDataAccessMixin.java @@ -26,7 +26,7 @@ public abstract class LightDataAccessMixin { @Dynamic @Inject(method = "getLightmap", at = @At("RETURN"), remap = false, require = 0, cancellable = true) private static void lambdynlights$getLightmap(int word, CallbackInfoReturnable cir) { - int lightmap = SodiumDynamicLightHandler.getLightmap(SodiumDynamicLightHandler.pos.get(), word, cir.getReturnValueI()); + int lightmap = SodiumDynamicLightHandler.getLightmap(SodiumDynamicLightHandler.POS.get(), word, cir.getReturnValueI()); cir.setReturnValue(lightmap); } } diff --git a/src/main/java/dev/lambdaurora/lambdynlights/util/LilTaterBlockEntityAccessor.java b/src/main/java/dev/lambdaurora/lambdynlights/util/LilTaterBlockEntityAccessor.java deleted file mode 100644 index 32e3c67..0000000 --- a/src/main/java/dev/lambdaurora/lambdynlights/util/LilTaterBlockEntityAccessor.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright © 2020 LambdAurora - * - * This file is part of LambDynamicLights. - * - * Licensed under the Lambda License. For more information, - * see the LICENSE file. - */ - -package dev.lambdaurora.lambdynlights.util; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.collection.DefaultedList; - -public interface LilTaterBlockEntityAccessor { - boolean lambdynlights$isEmpty(); - - DefaultedList lambdynlights$getItems(); -} diff --git a/src/main/java/dev/lambdaurora/lambdynlights/util/SodiumDynamicLightHandler.java b/src/main/java/dev/lambdaurora/lambdynlights/util/SodiumDynamicLightHandler.java index 9b49a66..a967ca8 100644 --- a/src/main/java/dev/lambdaurora/lambdynlights/util/SodiumDynamicLightHandler.java +++ b/src/main/java/dev/lambdaurora/lambdynlights/util/SodiumDynamicLightHandler.java @@ -10,7 +10,7 @@ package dev.lambdaurora.lambdynlights.util; import dev.lambdaurora.lambdynlights.LambDynLights; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; import org.jetbrains.annotations.ApiStatus; @ApiStatus.Internal @@ -18,7 +18,7 @@ public interface SodiumDynamicLightHandler { // Stores the current light position being used by ArrayLightDataCache#get // We use ThreadLocal because Sodium's chunk builder is multithreaded, otherwise it will break // catastrophically. - ThreadLocal pos = ThreadLocal.withInitial(BlockPos.Mutable::new); + ThreadLocal POS = ThreadLocal.withInitial(BlockPos.Mutable::new); static int getLightmap(BlockPos pos, int word, int lightmap) { if (!LambDynLights.get().config.getDynamicLightsMode().isEnabled()) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 2469322..d274211 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,15 +32,14 @@ "fabricloader": ">=0.15.11", "fabric-api": ">=0.100.4+1.21", "minecraft": "~1.21", - "spruceui": ">=5.0.3", + "spruceui": ">=5.1.0", "java": ">=21" }, "recommends": { - "modmenu": ">=8.0.0" + "modmenu": ">=11.0.0" }, "suggests": { "ears": "*", - "ltr": "*", "sodium": "*" }, "breaks": { diff --git a/src/main/resources/lambdynlights.accesswidener b/src/main/resources/lambdynlights.accesswidener index 1db1120..934fd1a 100644 --- a/src/main/resources/lambdynlights.accesswidener +++ b/src/main/resources/lambdynlights.accesswidener @@ -1,3 +1,3 @@ accessWidener v2 named -accessible class net/minecraft/client/option/SimpleOption$Callbacks \ No newline at end of file +accessible class net/minecraft/client/OptionInstance$ValueSet diff --git a/src/main/resources/lambdynlights.lightsource.mixins.json b/src/main/resources/lambdynlights.lightsource.mixins.json index 99c145d..83d63ae 100644 --- a/src/main/resources/lambdynlights.lightsource.mixins.json +++ b/src/main/resources/lambdynlights.lightsource.mixins.json @@ -1,16 +1,16 @@ { "required": true, "package": "dev.lambdaurora.lambdynlights.mixin.lightsource", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "client": [ - "AbstractDecorationEntityMixin", + "AbstractHurtingProjectileEntityMixin", "AbstractMinecartEntityMixin", + "BlockAttachedEntityMixin", "BlockEntityMixin", "EntityMixin", - "ExplosiveProjectileEntityMixin", "LivingEntityMixin", "PlayerEntityMixin", - "TntEntityMixin" + "PrimedTntEntityMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/lambdynlights.mixins.json b/src/main/resources/lambdynlights.mixins.json index 5d55f7d..9c98841 100644 --- a/src/main/resources/lambdynlights.mixins.json +++ b/src/main/resources/lambdynlights.mixins.json @@ -2,19 +2,17 @@ "required": true, "package": "dev.lambdaurora.lambdynlights.mixin", "plugin": "dev.lambdaurora.lambdynlights.LambDynLightsMixinPlugin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "client": [ "BlockEntityTypeMixin", - "ClientWorldMixin", - "CommonWorldRendererMixin", - "DebugHudMixin", + "ClientLevelMixin", + "CommonLevelRendererMixin", + "DebugScreenOverlayMixin", "EntityRendererMixin", "EntityTypeMixin", + "LevelMixin", "MinecraftClientMixin", - "VideoOptionsScreenMixin", - "WorldMixin", - "ltr.LilTaterBlockEntityMixin", - "ltr.LilTaterBlocksMixin", + "VideoSettingsScreenMixin", "sodium.ArrayLightDataCacheMixin", "sodium.FlatLightPipelineMixin", "sodium.LightDataAccessMixin",