mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-24 16:24:11 +00:00
# Conflicts: # Minecraft.Client/Network/PlayerChunkMap.cpp # Minecraft.Client/Network/PlayerList.cpp # Minecraft.Client/Network/ServerChunkCache.cpp # Minecraft.Client/Platform/Common/Consoles_App.cpp # Minecraft.Client/Platform/Common/DLC/DLCManager.cpp # Minecraft.Client/Platform/Common/GameRules/LevelGenerationOptions.cpp # Minecraft.Client/Platform/Common/GameRules/LevelRuleset.cpp # Minecraft.Client/Platform/Common/Tutorial/Tutorial.cpp # Minecraft.Client/Platform/Common/Tutorial/TutorialTask.cpp # Minecraft.Client/Platform/Common/UI/IUIScene_CreativeMenu.cpp # Minecraft.Client/Platform/Common/UI/UIComponent_Panorama.cpp # Minecraft.Client/Platform/Common/UI/UIController.cpp # Minecraft.Client/Platform/Common/UI/UIController.h # Minecraft.Client/Platform/Extrax64Stubs.cpp # Minecraft.Client/Platform/Windows64/4JLibs/inc/4J_Input.h # Minecraft.Client/Platform/Windows64/4JLibs/inc/4J_Storage.h # Minecraft.Client/Player/EntityTracker.cpp # Minecraft.Client/Player/ServerPlayer.cpp # Minecraft.Client/Rendering/EntityRenderers/PlayerRenderer.cpp # Minecraft.Client/Textures/Packs/DLCTexturePack.cpp # Minecraft.Client/Textures/Stitching/StitchedTexture.cpp # Minecraft.Client/Textures/Stitching/TextureMap.cpp # Minecraft.Client/Textures/Textures.cpp # Minecraft.World/Blocks/NotGateTile.cpp # Minecraft.World/Blocks/PressurePlateTile.cpp # Minecraft.World/Blocks/TileEntities/PotionBrewing.cpp # Minecraft.World/Enchantments/EnchantmentHelper.cpp # Minecraft.World/Entities/HangingEntity.cpp # Minecraft.World/Entities/LeashFenceKnotEntity.cpp # Minecraft.World/Entities/LivingEntity.cpp # Minecraft.World/Entities/Mobs/Boat.cpp # Minecraft.World/Entities/Mobs/Minecart.cpp # Minecraft.World/Entities/Mobs/Witch.cpp # Minecraft.World/Entities/SyncedEntityData.cpp # Minecraft.World/Items/LeashItem.cpp # Minecraft.World/Items/PotionItem.cpp # Minecraft.World/Level/BaseMobSpawner.cpp # Minecraft.World/Level/CustomLevelSource.cpp # Minecraft.World/Level/Level.cpp # Minecraft.World/Level/Storage/DirectoryLevelStorage.cpp # Minecraft.World/Level/Storage/McRegionLevelStorage.cpp # Minecraft.World/Level/Storage/RegionFileCache.cpp # Minecraft.World/Player/Player.cpp # Minecraft.World/WorldGen/Biomes/BiomeCache.cpp # Minecraft.World/WorldGen/Features/RandomScatteredLargeFeature.cpp # Minecraft.World/WorldGen/Layers/BiomeOverrideLayer.cpp
121 lines
3.8 KiB
C++
121 lines
3.8 KiB
C++
#include "../../Platform/stdafx.h"
|
|
#include "../../IO/Files/File.h"
|
|
#include "../LevelData.h"
|
|
#include "LevelSummary.h"
|
|
#include "../../Headers/com.mojang.nbt.h"
|
|
#include "DirectoryLevelStorage.h"
|
|
#include "DirectoryLevelStorageSource.h"
|
|
|
|
#include "../../IO/Files/ConsoleSaveFileIO.h"
|
|
#include "../../IO/Files/ConsoleSaveFileOriginal.h"
|
|
|
|
class LevelStorage;
|
|
|
|
DirectoryLevelStorageSource::DirectoryLevelStorageSource(const File dir)
|
|
: baseDir(dir) {
|
|
// if (!dir.exists()) dir.mkdirs(); // 4J Removed
|
|
// this->baseDir = dir;
|
|
}
|
|
|
|
std::wstring DirectoryLevelStorageSource::getName() { return L"Old Format"; }
|
|
|
|
std::vector<LevelSummary*>* DirectoryLevelStorageSource::getLevelList() {
|
|
// 4J Stu - We don't use directory list with the Xbox save locations
|
|
std::vector<LevelSummary*>* levels = new std::vector<LevelSummary*>;
|
|
return levels;
|
|
}
|
|
|
|
void DirectoryLevelStorageSource::clearAll() {}
|
|
|
|
LevelData* DirectoryLevelStorageSource::getDataTagFor(
|
|
ConsoleSaveFile* saveFile, const std::wstring& levelId) {
|
|
// File dataFile(dir, L"level.dat");
|
|
ConsoleSavePath dataFile = ConsoleSavePath(std::wstring(L"level.dat"));
|
|
if (saveFile->doesFileExist(dataFile)) {
|
|
ConsoleSaveFileInputStream fis =
|
|
ConsoleSaveFileInputStream(saveFile, dataFile);
|
|
CompoundTag* root = NbtIo::readCompressed(&fis);
|
|
CompoundTag* tag = root->getCompound(L"Data");
|
|
LevelData* ret = new LevelData(tag);
|
|
delete root;
|
|
return ret;
|
|
}
|
|
|
|
return nullptr;
|
|
}
|
|
|
|
void DirectoryLevelStorageSource::renameLevel(
|
|
const std::wstring& levelId, const std::wstring& newLevelName) {
|
|
ConsoleSaveFileOriginal tempSave(levelId);
|
|
|
|
// File dataFile = File(dir, L"level.dat");
|
|
ConsoleSavePath dataFile = ConsoleSavePath(std::wstring(L"level.dat"));
|
|
if (tempSave.doesFileExist(dataFile)) {
|
|
ConsoleSaveFileInputStream fis =
|
|
ConsoleSaveFileInputStream(&tempSave, dataFile);
|
|
CompoundTag* root = NbtIo::readCompressed(&fis);
|
|
CompoundTag* tag = root->getCompound(L"Data");
|
|
tag->putString(L"LevelName", newLevelName);
|
|
|
|
ConsoleSaveFileOutputStream fos =
|
|
ConsoleSaveFileOutputStream(&tempSave, dataFile);
|
|
NbtIo::writeCompressed(root, &fos);
|
|
}
|
|
}
|
|
|
|
bool DirectoryLevelStorageSource::isNewLevelIdAcceptable(
|
|
const std::wstring& levelId) {
|
|
// 4J Jev, removed try/catch.
|
|
|
|
File levelFolder = File(baseDir, levelId);
|
|
if (levelFolder.exists()) {
|
|
return false;
|
|
}
|
|
|
|
levelFolder.mkdir();
|
|
|
|
return true;
|
|
}
|
|
|
|
void DirectoryLevelStorageSource::deleteLevel(const std::wstring& levelId) {
|
|
File dir = File(baseDir, levelId);
|
|
if (!dir.exists()) return;
|
|
|
|
deleteRecursive(dir.listFiles());
|
|
dir._delete();
|
|
}
|
|
|
|
void DirectoryLevelStorageSource::deleteRecursive(std::vector<File*>* files) {
|
|
auto itEnd = files->end();
|
|
for (auto it = files->begin(); it != itEnd; it++) {
|
|
File* file = *it;
|
|
if (file->isDirectory()) {
|
|
deleteRecursive(file->listFiles());
|
|
}
|
|
file->_delete();
|
|
}
|
|
}
|
|
|
|
std::shared_ptr<LevelStorage> DirectoryLevelStorageSource::selectLevel(
|
|
ConsoleSaveFile* saveFile, const std::wstring& levelId,
|
|
bool createPlayerDir) {
|
|
return std::shared_ptr<LevelStorage>(
|
|
new DirectoryLevelStorage(saveFile, baseDir, levelId, createPlayerDir));
|
|
}
|
|
|
|
bool DirectoryLevelStorageSource::isConvertible(ConsoleSaveFile* saveFile,
|
|
const std::wstring& levelId) {
|
|
return false;
|
|
}
|
|
|
|
bool DirectoryLevelStorageSource::requiresConversion(
|
|
ConsoleSaveFile* saveFile, const std::wstring& levelId) {
|
|
return false;
|
|
}
|
|
|
|
bool DirectoryLevelStorageSource::convertLevel(ConsoleSaveFile* saveFile,
|
|
const std::wstring& levelId,
|
|
ProgressListener* progress) {
|
|
return false;
|
|
}
|