Skip to content

Commit cc8ed88

Browse files
committed
Fix leaky FakeLevelData
1 parent 91ffe66 commit cc8ed88

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

src/main/java/com/ldtteam/common/fakelevel/FakeLevel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public FakeLevel(final SOURCE levelSource,
130130
final boolean overrideBeLevel)
131131
{
132132
// we have to pass null in ctor, so realLevel can be used
133-
super(new FakeLevelData(realLevel.getLevelData(), lightProvider),
133+
super(new FakeLevelData(realLevel::getLevelData, lightProvider),
134134
realLevel.dimension(),
135135
realLevel.registryAccess(),
136136
realLevel.dimensionTypeRegistration(),
@@ -149,6 +149,7 @@ public FakeLevel(final SOURCE levelSource,
149149
this.lightEngine = new FakeLevelLightEngine(this);
150150

151151
setRealLevel(realLevel); // intentionally due to init
152+
((FakeLevelData) getLevelData()).vanillaLevelData = () -> realLevel().getLevelData();
152153
}
153154

154155
// ========================================
@@ -168,7 +169,6 @@ public void setRealLevel(final Level realLevel)
168169
}
169170

170171
this.realLevel = realLevel;
171-
((FakeLevelData) this.getLevelData()).vanillaLevelData = realLevel == null ? null : realLevel.getLevelData();
172172
}
173173

174174
public Level realLevel()

src/main/java/com/ldtteam/common/fakelevel/FakeLevelData.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@
55
import net.minecraft.world.level.GameRules;
66
import net.minecraft.world.level.storage.LevelData;
77
import net.minecraft.world.level.storage.WritableLevelData;
8+
import java.util.function.Supplier;
89

910
/**
1011
* Porting: class is relatively small, just check super class manually (all of missing methods are/were just aliases)
1112
*/
1213
public class FakeLevelData implements WritableLevelData
1314
{
14-
protected LevelData vanillaLevelData;
15+
protected Supplier<LevelData> vanillaLevelData;
1516
protected final IFakeLevelLightProvider lightProvider;
1617

17-
protected FakeLevelData(final LevelData vanillaLevelData, final IFakeLevelLightProvider lightProvider)
18+
protected FakeLevelData(final Supplier<LevelData> vanillaLevelData, final IFakeLevelLightProvider lightProvider)
1819
{
1920
this.vanillaLevelData = vanillaLevelData;
2021
this.lightProvider = lightProvider;
@@ -35,13 +36,13 @@ public float getSpawnAngle()
3536
@Override
3637
public long getGameTime()
3738
{
38-
return vanillaLevelData.getGameTime();
39+
return vanillaLevelData.get().getGameTime();
3940
}
4041

4142
@Override
4243
public long getDayTime()
4344
{
44-
return lightProvider.forceOwnLightLevel() ? lightProvider.getDayTime() : vanillaLevelData.getDayTime();
45+
return lightProvider.forceOwnLightLevel() ? lightProvider.getDayTime() : vanillaLevelData.get().getDayTime();
4546
}
4647

4748
@Override
@@ -71,7 +72,7 @@ public boolean isHardcore()
7172
@Override
7273
public GameRules getGameRules()
7374
{
74-
return vanillaLevelData.getGameRules();
75+
return vanillaLevelData.get().getGameRules();
7576
}
7677

7778
@Override

0 commit comments

Comments
 (0)