Skip to content

Commit 2e272f9

Browse files
committed
Merge 1.19.2 into 1.19.4
2 parents 351e4d3 + 1580e75 commit 2e272f9

File tree

4 files changed

+59
-1
lines changed

4 files changed

+59
-1
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.embeddedt.modernfix.common.mixin.bugfix.world_leaks;
2+
3+
import net.minecraft.client.Minecraft;
4+
import net.minecraft.client.multiplayer.ClientLevel;
5+
import net.minecraft.world.level.chunk.LevelChunk;
6+
import net.minecraft.world.level.lighting.LevelLightEngine;
7+
import org.embeddedt.modernfix.ModernFix;
8+
import org.jetbrains.annotations.Nullable;
9+
import org.objectweb.asm.Opcodes;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Inject;
14+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
15+
16+
import java.util.concurrent.atomic.AtomicReferenceArray;
17+
18+
@Mixin(Minecraft.class)
19+
public class MinecraftMixin {
20+
@Shadow @Nullable public ClientLevel level;
21+
22+
/**
23+
* To mitigate the effect of leaked client worlds, clear most of the data structures that waste memory.
24+
*/
25+
@Inject(method = "clearLevel(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;"))
26+
private void clearLevelDataForLeaks(CallbackInfo ci) {
27+
if(this.level != null) {
28+
try {
29+
AtomicReferenceArray<LevelChunk> chunks = this.level.getChunkSource().storage.chunks;
30+
for(int i = 0; i < chunks.length(); i++) {
31+
chunks.set(i, null);
32+
}
33+
this.level.getChunkSource().lightEngine = new LevelLightEngine(this.level.getChunkSource(), false, false);
34+
// clear BE list otherwise they will hold chunks
35+
this.level.blockEntityTickers.clear();
36+
} catch(RuntimeException e) {
37+
ModernFix.LOGGER.error("Exception clearing level data", e);
38+
}
39+
}
40+
}
41+
}

common/src/main/java/org/embeddedt/modernfix/util/CanonizingStringMap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* Replacement backing map for CompoundTags that interns keys.
1313
*/
1414
public class CanonizingStringMap<T> extends HashMap<String, T> {
15-
private static final Interner<String> KEY_INTERNER = Interners.newStrongInterner();
15+
private static final Interner<String> KEY_INTERNER = Interners.newWeakInterner();
1616

1717
private static String intern(String key) {
1818
return key != null ? KEY_INTERNER.intern(key) : null;

common/src/main/resources/modernfix.accesswidener

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
accessWidener v2 named
22

3+
accessible field net/minecraft/client/multiplayer/ClientChunkCache storage Lnet/minecraft/client/multiplayer/ClientChunkCache$Storage;
4+
accessible field net/minecraft/client/multiplayer/ClientChunkCache lightEngine Lnet/minecraft/world/level/lighting/LevelLightEngine;
5+
mutable field net/minecraft/client/multiplayer/ClientChunkCache lightEngine Lnet/minecraft/world/level/lighting/LevelLightEngine;
6+
accessible class net/minecraft/client/multiplayer/ClientChunkCache$Storage
7+
accessible field net/minecraft/client/multiplayer/ClientChunkCache$Storage chunks Ljava/util/concurrent/atomic/AtomicReferenceArray;
8+
9+
accessible field net/minecraft/world/level/Level blockEntityTickers Ljava/util/List;
10+
311
accessible class net/minecraft/client/renderer/RenderType$CompositeRenderType
412
accessible method net/minecraft/nbt/CompoundTag <init> (Ljava/util/Map;)V
513

fabric/src/main/resources/fabric.mod.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@
1414
},
1515
"license": "LGPL-3.0",
1616
"icon": "icon.png",
17+
"custom": {
18+
"modmenu": {
19+
"links": {
20+
"modmenu.kofi": "https://ko-fi.com/embeddedt",
21+
"modmenu.github_releases": "https://github.com/embeddedt/ModernFix/releases",
22+
"modmenu.curseforge": "https://www.curseforge.com/minecraft/mc-mods/modernfix"
23+
}
24+
}
25+
},
1726
"environment": "*",
1827
"entrypoints": {
1928
"main": [

0 commit comments

Comments
 (0)