Skip to content

Commit b4f9576

Browse files
committed
Hotfix performance issues due to a bad Mixin.
1 parent 308469c commit b4f9576

File tree

9 files changed

+39
-20
lines changed

9 files changed

+39
-20
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,10 @@
320320
- Added missing Spanish Mexican translations from Spanish translations as a stop-gap.
321321
- Updated German translations (thanks zOnlyKroks).
322322

323+
### 4.2.3
324+
325+
- Hotfix performance issues due to a wrong Mixin injection.
326+
323327
[SpruceUI]: https://github.com/LambdAurora/SpruceUI "SpruceUI page"
324328
[pridelib]: https://github.com/Queerbric/pridelib "Pridelib page"
325329
[Sodium]: https://modrinth.com/mod/sodium "Sodium Modrinth page"

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ Wait... what? **Lasers?!** They do pack a punch...
8787

8888
![light levels](assets/guardian_laser.png)
8989

90+
### Fireflies
91+
92+
Fireflies particle will emit light as they fly!
93+
94+
![Fireflies](assets/fireflies.png)
95+
9096
### Configuration GUI
9197

9298
As of v4.0.0.

assets/fireflies.png

698 KB
Loading

build_logic/src/main/kotlin/lambdynamiclights/Constants.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ object Constants {
88
const val NAME = "lambdynamiclights"
99
const val NAMESPACE = "lambdynlights"
1010
const val PRETTY_NAME = "LambDynamicLights"
11-
const val VERSION = "4.2.2"
11+
const val VERSION = "4.2.3"
1212
const val JAVA_VERSION = 21
1313

1414
const val DESCRIPTION = "The most feature-complete dynamic lighting mod for Fabric."

build_logic/src/main/kotlin/lambdynamiclights/Utils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ object Utils {
77
fun parseReadme(project: Project): String {
88
return ModUtils.parseReadme(
99
project,
10-
"https://raw.githubusercontent.com/LambdAurora/LambDynamicLights/1.21.4/\$2"
10+
"https://raw.githubusercontent.com/LambdAurora/LambDynamicLights/1.21.5/\$2"
1111
)
1212
}
1313

src/main/java/dev/lambdaurora/lambdynlights/LambDynLights.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
package dev.lambdaurora.lambdynlights;
1111

12-
import dev.lambdaurora.lambdynlights.accessor.WorldRendererAccessor;
12+
import dev.lambdaurora.lambdynlights.mixin.LevelRendererAccessor;
1313
import dev.lambdaurora.lambdynlights.api.DynamicLightsContext;
1414
import dev.lambdaurora.lambdynlights.api.DynamicLightsInitializer;
1515
import dev.lambdaurora.lambdynlights.api.behavior.DynamicLightBehavior;
@@ -478,7 +478,7 @@ private void scheduleChunkRebuild(@NotNull LevelRenderer renderer, long chunkPos
478478

479479
public static void scheduleChunkRebuild(@NotNull LevelRenderer renderer, int x, int y, int z) {
480480
if (Minecraft.getInstance().level != null)
481-
((WorldRendererAccessor) renderer).lambdynlights$scheduleChunkRebuild(x, y, z, false);
481+
((LevelRendererAccessor) renderer).lambdynlights$scheduleChunkRebuild(x, y, z, false);
482482
}
483483

484484
/**

src/main/java/dev/lambdaurora/lambdynlights/mixin/CommonLevelRendererMixin.java renamed to src/main/java/dev/lambdaurora/lambdynlights/mixin/BrightnessGetterMixin.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright © 2020 LambdAurora <email@lambdaurora.dev>
2+
* Copyright © 2025 LambdAurora <email@lambdaurora.dev>
33
*
44
* This file is part of LambDynamicLights.
55
*
@@ -10,30 +10,32 @@
1010
package dev.lambdaurora.lambdynlights.mixin;
1111

1212
import dev.lambdaurora.lambdynlights.LambDynLights;
13-
import dev.lambdaurora.lambdynlights.accessor.WorldRendererAccessor;
1413
import net.minecraft.client.renderer.LevelRenderer;
1514
import net.minecraft.core.BlockPos;
1615
import net.minecraft.world.level.BlockAndTintGetter;
17-
import net.minecraft.world.level.block.state.BlockState;
1816
import org.spongepowered.asm.mixin.Mixin;
19-
import org.spongepowered.asm.mixin.gen.Invoker;
2017
import org.spongepowered.asm.mixin.injection.At;
2118
import org.spongepowered.asm.mixin.injection.Inject;
2219
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
2320

24-
@Mixin(value = LevelRenderer.class, priority = 900)
25-
public abstract class CommonLevelRendererMixin implements WorldRendererAccessor {
26-
@Invoker("setSectionDirty")
27-
@Override
28-
public abstract void lambdynlights$scheduleChunkRebuild(int x, int y, int z, boolean important);
29-
21+
/**
22+
* Injects the dynamic lighting into the default brightness getter.
23+
* <p>
24+
* Injecting into the default brightness getter allows to benefit from brightness caching in the Vanilla renderer.
25+
*
26+
* @author LambdAurora
27+
* @version 4.2.3
28+
* @since 4.2.3
29+
*/
30+
@Mixin(value = LevelRenderer.BrightnessGetter.class, priority = 900)
31+
public interface BrightnessGetterMixin {
3032
@Inject(
31-
method = "getLightColor(Lnet/minecraft/client/renderer/LevelRenderer$BrightnessGetter;Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;)I",
33+
method = "method_68890",
3234
at = @At("TAIL"),
3335
cancellable = true
3436
)
3537
private static void onGetLightmapCoordinates(
36-
LevelRenderer.BrightnessGetter getter, BlockAndTintGetter level, BlockState state, BlockPos pos,
38+
BlockAndTintGetter level, BlockPos pos,
3739
CallbackInfoReturnable<Integer> cir
3840
) {
3941
if (!level.getBlockState(pos).isSolidRender() && LambDynLights.get().config.getDynamicLightsMode().isEnabled())

src/main/java/dev/lambdaurora/lambdynlights/accessor/WorldRendererAccessor.java renamed to src/main/java/dev/lambdaurora/lambdynlights/mixin/LevelRendererAccessor.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,21 @@
77
* see the LICENSE file.
88
*/
99

10-
package dev.lambdaurora.lambdynlights.accessor;
10+
package dev.lambdaurora.lambdynlights.mixin;
11+
12+
import net.minecraft.client.renderer.LevelRenderer;
13+
import org.spongepowered.asm.mixin.Mixin;
14+
import org.spongepowered.asm.mixin.gen.Invoker;
1115

1216
/**
1317
* Represents an accessor for WorldRenderer.
1418
*
1519
* @author LambdAurora
16-
* @version 1.0.0
20+
* @version 4.2.3
1721
* @since 1.0.0
1822
*/
19-
public interface WorldRendererAccessor {
23+
@Mixin(LevelRenderer.class)
24+
public interface LevelRendererAccessor {
2025
/**
2126
* Schedules a chunk rebuild.
2227
*
@@ -25,5 +30,6 @@ public interface WorldRendererAccessor {
2530
* @param z Z coordinates of the chunk
2631
* @param important {@code true} if important, else {@code false}
2732
*/
33+
@Invoker("setSectionDirty")
2834
void lambdynlights$scheduleChunkRebuild(int x, int y, int z, boolean important);
2935
}

src/main/resources/lambdynlights.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44
"plugin": "dev.lambdaurora.lambdynlights.LambDynLightsMixinPlugin",
55
"compatibilityLevel": "JAVA_21",
66
"client": [
7+
"BrightnessGetterMixin",
78
"ClientLevelMixin",
8-
"CommonLevelRendererMixin",
99
"DebugRendererMixin",
1010
"DebugScreenOverlayMixin",
1111
"DevModeMixin",
1212
"EntityRendererMixin",
1313
"EntityTypeMixin",
14+
"LevelRendererAccessor",
1415
"MinecraftClientMixin",
1516
"VideoSettingsScreenMixin",
1617
"fabric.AoCalculatorMixin",

0 commit comments

Comments
 (0)