diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkManager.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkManager.java index ec59ce8dc..44028dd5e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkManager.java @@ -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"; diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeManager.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeManager.java index 2e656e29e..0b379f9af 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeManager.java @@ -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"; diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/StorageDiskManager.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/StorageDiskManager.java index 8388492fe..3e83a3e16 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/StorageDiskManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/StorageDiskManager.java @@ -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"; diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/util/RSWorldSavedData.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/util/RSWorldSavedData.java new file mode 100644 index 000000000..98e5eeab9 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/util/RSWorldSavedData.java @@ -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); + } + } +}