reduce chance for corruption of RS data (#2792)

This commit is contained in:
Darkere
2021-01-02 11:17:49 +01:00
committed by GitHub
parent c2e543c8fa
commit 7b6bb099f9
4 changed files with 55 additions and 6 deletions

View File

@@ -3,11 +3,11 @@ package com.refinedmods.refinedstorage.apiimpl.network;
import com.refinedmods.refinedstorage.api.network.INetwork;
import com.refinedmods.refinedstorage.api.network.INetworkManager;
import com.refinedmods.refinedstorage.api.network.NetworkType;
import com.refinedmods.refinedstorage.apiimpl.util.RSWorldSavedData;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.storage.WorldSavedData;
import net.minecraftforge.common.util.Constants;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -16,7 +16,7 @@ import javax.annotation.Nullable;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
public class NetworkManager extends WorldSavedData implements INetworkManager {
public class NetworkManager extends RSWorldSavedData implements INetworkManager {
public static final String NAME = "refinedstorage_networks";
private static final String NBT_NETWORKS = "Networks";

View File

@@ -4,12 +4,12 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
import com.refinedmods.refinedstorage.api.network.node.INetworkNodeFactory;
import com.refinedmods.refinedstorage.api.network.node.INetworkNodeManager;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.util.RSWorldSavedData;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.storage.WorldSavedData;
import net.minecraftforge.common.util.Constants;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -18,7 +18,7 @@ import javax.annotation.Nullable;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
public class NetworkNodeManager extends WorldSavedData implements INetworkNodeManager {
public class NetworkNodeManager extends RSWorldSavedData implements INetworkNodeManager {
public static final String NAME = "refinedstorage_nodes";
private static final String NBT_NODES = "Nodes";

View File

@@ -5,12 +5,12 @@ import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskFactory;
import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskManager;
import com.refinedmods.refinedstorage.api.storage.disk.IStorageDiskProvider;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.util.RSWorldSavedData;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.server.ServerWorld;
import net.minecraft.world.storage.WorldSavedData;
import net.minecraftforge.common.util.Constants;
import javax.annotation.Nullable;
@@ -18,7 +18,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class StorageDiskManager extends WorldSavedData implements IStorageDiskManager {
public class StorageDiskManager extends RSWorldSavedData implements IStorageDiskManager {
public static final String NAME = "refinedstorage_disks";
private static final String NBT_DISKS = "Disks";

View File

@@ -0,0 +1,49 @@
package com.refinedmods.refinedstorage.apiimpl.util;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.util.SharedConstants;
import net.minecraft.world.storage.WorldSavedData;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File;
import java.io.IOException;
public abstract class RSWorldSavedData extends WorldSavedData {
private final Logger LOGGER = LogManager.getLogger(RSWorldSavedData.class);
public RSWorldSavedData(String name) {
super(name);
}
@Override
public abstract void read(CompoundNBT nbt);
@Override
public abstract CompoundNBT write(CompoundNBT compound);
@Override
public void save(File fileIn) {
//@Volatile Mostly Copied from WorldSavedData
if (this.isDirty()) {
File tempFile = fileIn.toPath().getParent().resolve(fileIn.getName() + ".temp").toFile();
CompoundNBT compoundnbt = new CompoundNBT();
compoundnbt.put("data", this.write(new CompoundNBT()));
compoundnbt.putInt("DataVersion", SharedConstants.getVersion().getWorldVersion());
try {
CompressedStreamTools.func_244264_a(compoundnbt, tempFile);
if (fileIn.delete()) {
tempFile.renameTo(fileIn);
}
} catch (IOException ioexception) {
LOGGER.error("Could not save data {}", this, ioexception);
}
this.setDirty(false);
}
}
}