@@ -13,6 +13,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.brigadier.tree.CommandNode;
|
||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
import com.mojang.serialization.Dynamic;
|
||||
import com.mojang.serialization.DynamicOps;
|
||||
import com.mojang.serialization.Lifecycle;
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||
@@ -56,6 +57,8 @@ import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.nbt.DynamicOpsNBT;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NbtException;
|
||||
import net.minecraft.nbt.ReportedNbtException;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import net.minecraft.resources.RegistryOps;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
@@ -113,6 +116,7 @@ import net.minecraft.world.level.material.FluidType;
|
||||
import net.minecraft.world.level.saveddata.maps.MapIcon;
|
||||
import net.minecraft.world.level.saveddata.maps.WorldMap;
|
||||
import net.minecraft.world.level.storage.Convertable;
|
||||
import net.minecraft.world.level.storage.LevelDataAndDimensions;
|
||||
import net.minecraft.world.level.storage.SaveData;
|
||||
import net.minecraft.world.level.storage.WorldDataServer;
|
||||
import net.minecraft.world.level.storage.WorldNBTStorage;
|
||||
@@ -1081,17 +1085,54 @@ public final class CraftServer implements Server {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
|
||||
Dynamic<?> dynamic;
|
||||
if (worldSession.hasWorldData()) {
|
||||
net.minecraft.world.level.storage.WorldInfo worldinfo;
|
||||
|
||||
try {
|
||||
dynamic = worldSession.getDataTag();
|
||||
worldinfo = worldSession.getSummary(dynamic);
|
||||
} catch (NbtException | ReportedNbtException | IOException ioexception) {
|
||||
Convertable.b convertable_b = worldSession.getLevelDirectory();
|
||||
|
||||
MinecraftServer.LOGGER.warn("Failed to load world data from {}", convertable_b.dataFile(), ioexception);
|
||||
MinecraftServer.LOGGER.info("Attempting to use fallback");
|
||||
|
||||
try {
|
||||
dynamic = worldSession.getDataTagFallback();
|
||||
worldinfo = worldSession.getSummary(dynamic);
|
||||
} catch (NbtException | ReportedNbtException | IOException ioexception1) {
|
||||
MinecraftServer.LOGGER.error("Failed to load world data from {}", convertable_b.oldDataFile(), ioexception1);
|
||||
MinecraftServer.LOGGER.error("Failed to load world data from {} and {}. World files may be corrupted. Shutting down.", convertable_b.dataFile(), convertable_b.oldDataFile());
|
||||
return null;
|
||||
}
|
||||
|
||||
worldSession.restoreLevelDataFromOld();
|
||||
}
|
||||
|
||||
if (worldinfo.requiresManualConversion()) {
|
||||
MinecraftServer.LOGGER.info("This world must be opened in an older version (like 1.6.4) to be safely converted");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!worldinfo.isCompatible()) {
|
||||
MinecraftServer.LOGGER.info("This world was created by an incompatible version.");
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
dynamic = null;
|
||||
}
|
||||
|
||||
boolean hardcore = creator.hardcore();
|
||||
|
||||
WorldDataServer worlddata;
|
||||
WorldLoader.a worldloader_a = console.worldLoader;
|
||||
IRegistry<WorldDimension> iregistry = worldloader_a.datapackDimensions().registryOrThrow(Registries.LEVEL_STEM);
|
||||
DynamicOps<NBTBase> dynamicops = RegistryOps.create(DynamicOpsNBT.INSTANCE, (HolderLookup.b) worldloader_a.datapackWorldgen());
|
||||
Pair<SaveData, WorldDimensions.b> pair = worldSession.getDataTag(dynamicops, worldloader_a.dataConfiguration(), iregistry, worldloader_a.datapackWorldgen().allRegistriesLifecycle());
|
||||
if (dynamic != null) {
|
||||
LevelDataAndDimensions leveldataanddimensions = Convertable.getLevelDataAndDimensions(dynamic, worldloader_a.dataConfiguration(), iregistry, worldloader_a.datapackWorldgen());
|
||||
|
||||
if (pair != null) {
|
||||
worlddata = (WorldDataServer) pair.getFirst();
|
||||
iregistry = pair.getSecond().dimensions();
|
||||
worlddata = (WorldDataServer) leveldataanddimensions.worldData();
|
||||
iregistry = leveldataanddimensions.dimensions().dimensions();
|
||||
} else {
|
||||
WorldSettings worldsettings;
|
||||
WorldOptions worldoptions = new WorldOptions(creator.seed(), creator.generateStructures(), false);
|
||||
|
||||
Reference in New Issue
Block a user