diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch index 069d942dc2..f5772bf7f7 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch @@ -11,7 +11,7 @@ this.minecraft.forceSetScreen(new GenericDirtMessageScreen(Component.translatable("selectWorld.resource_load"))); PackRepository packrepository = ServerPacksSource.createPackRepository(p_309733_); -+ net.minecraftforge.common.ForgeHooks.readAdditionalLevelSaveData(p_312455_, p_309733_.getLevelDirectory()); ++ net.minecraftforge.common.ForgeHooks.readAdditionalLevelSaveData(p_309733_, p_309733_.getLevelDirectory()); + WorldStem worldstem; try { diff --git a/patches/minecraft/net/minecraft/server/Main.java.patch b/patches/minecraft/net/minecraft/server/Main.java.patch index 8322050199..e9cbff0410 100644 --- a/patches/minecraft/net/minecraft/server/Main.java.patch +++ b/patches/minecraft/net/minecraft/server/Main.java.patch @@ -64,7 +64,7 @@ PackRepository packrepository = ServerPacksSource.createPackRepository(levelstoragesource$levelstorageaccess); + if (dynamic != null) -+ net.minecraftforge.common.ForgeHooks.readAdditionalLevelSaveData(dynamic, levelstoragesource$levelstorageaccess.getLevelDirectory()); ++ net.minecraftforge.common.ForgeHooks.readAdditionalLevelSaveData(levelstoragesource$levelstorageaccess, levelstoragesource$levelstorageaccess.getLevelDirectory()); WorldStem worldstem; try { WorldLoader.InitConfig worldloader$initconfig = loadOrCreateConfig(dedicatedserversettings.getProperties(), dynamic1, flag, packrepository); diff --git a/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch b/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch index 76f0fdebf1..b357f8805c 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch @@ -1,5 +1,18 @@ --- a/net/minecraft/world/level/storage/LevelStorageSource.java +++ b/net/minecraft/world/level/storage/LevelStorageSource.java +@@ -470,6 +_,12 @@ + return this.getDataTag(true); + } + ++ public CompoundTag getDataTagRaw(boolean fallback) throws IOException { ++ this.checkLock(); ++ return LevelStorageSource.readLevelDataTagRaw(fallback ? this.levelDirectory.oldDataFile() : this.levelDirectory.dataFile()); ++ ++ } ++ + private Dynamic getDataTag(boolean p_310699_) throws IOException { + this.checkLock(); + return LevelStorageSource.readLevelDataTagFixed(p_310699_ ? this.levelDirectory.oldDataFile() : this.levelDirectory.dataFile(), LevelStorageSource.this.fixerUpper); @@ -483,6 +_,7 @@ CompoundTag compoundtag = p_78292_.createTag(p_78291_, p_78293_); CompoundTag compoundtag1 = new CompoundTag(); diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 7a24fe24f8..6134a989ea 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -5,6 +5,7 @@ package net.minecraftforge.common; +import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Collection; @@ -103,7 +104,6 @@ import net.minecraft.world.Container; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.NbtOps; import net.minecraft.network.protocol.Packet; import net.minecraft.network.syncher.EntityDataSerializer; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -157,7 +157,6 @@ import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingTickEvent; import net.minecraftforge.event.entity.living.LivingChangeTargetEvent.ILivingTargetType; -import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.living.LivingKnockBackEvent; import net.minecraftforge.event.entity.living.LivingMakeBrainEvent; @@ -979,9 +978,20 @@ public class ForgeHooks { } @ApiStatus.Internal - public static void readAdditionalLevelSaveData(Dynamic data, LevelStorageSource.LevelDirectory levelDirectory) { - CompoundTag rootTag = (CompoundTag)data.convert(NbtOps.INSTANCE).getValue(); - CompoundTag tag = rootTag.getCompound("fml"); + public static void readAdditionalLevelSaveData(LevelStorageSource.LevelStorageAccess access, LevelStorageSource.LevelDirectory levelDirectory) { + CompoundTag tag = null; + try { + CompoundTag rootTag = access.getDataTagRaw(false); + tag = rootTag.getCompound("fml"); + } catch (IOException e) { + try { + CompoundTag rootTag = access.getDataTagRaw(true); + tag = rootTag.getCompound("fml"); + } catch (IOException e2) { + LOGGER.error(WORLDPERSISTENCE, "Failed to read level data.. ", e2); + return; + } + } if (tag.contains("LoadingModList")) { ListTag modList = tag.getList("LoadingModList", net.minecraft.nbt.Tag.TAG_COMPOUND); Map mismatchedVersions = new HashMap<>(modList.size());