Fix MC-194811 - Removing structures causes chunk save errors.

This commit is contained in:
Alex O'Neill authored and GitHub committed 2020-11-20 10:23:50 -08:00
1 parent fa46f3dd49
commit 56e538e8a9
2 files changed
+27

No files matched your search

@@ -43,6 +43,8 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import it.unimi.dsi.fastutil.longs.LongSet;
import net.minecraft.advancements.Advancement;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
@@ -91,6 +93,8 @@ import net.minecraft.potion.PotionUtils;
import net.minecraft.stats.Stats;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.*;
import net.minecraft.world.chunk.IChunk;
import net.minecraft.world.gen.feature.structure.Structure;
import net.minecraft.world.spawner.AbstractSpawner;
import net.minecraft.tileentity.FurnaceTileEntity;
import net.minecraft.tileentity.TileEntity;
@@ -1232,4 +1236,18 @@ public class ForgeHooks
modpacks.add("vanilla");
return modpacks;
}
/**
* Fixes MC-194811
* When a structure mod is removed, this map may contain null keys. This will make the world unable to save if this persists.
* If we remove a structure from the save data in this way, we then mark the chunk for saving
*/
public static void fixNullStructureReferences(IChunk chunk, Map<Structure<?>, LongSet> structureReferences)
{
if (structureReferences.remove(null) != null)
{
chunk.setModified(true);
}
chunk.setStructureReferences(structureReferences);
}
}