mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 15:18:34 +01:00
Cleaned up NBT Data Saving
This commit is contained in:
parent
a7c8a3c6e4
commit
c282d6a8ef
4 changed files with 58 additions and 49 deletions
|
@ -42,6 +42,7 @@ import ellpeck.actuallyadditions.tile.TileEntityBase;
|
|||
import ellpeck.actuallyadditions.update.UpdateChecker;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.Util;
|
||||
import ellpeck.actuallyadditions.util.playerdata.PersistentServerData;
|
||||
import net.minecraft.init.Items;
|
||||
|
||||
// So that BuildCraft Oil always gets used
|
||||
|
@ -125,7 +126,8 @@ public class ActuallyAdditions{
|
|||
|
||||
@EventHandler
|
||||
public void serverStopped(FMLServerStoppedEvent event){
|
||||
//Clear all Network Connections so that they won't be carried over into other worlds
|
||||
//Clear Data so that it won't be carried over to other worlds
|
||||
LaserRelayConnectionHandler.getInstance().networks.clear();
|
||||
PersistentServerData.playerSaveData.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,37 +54,35 @@ public class WorldData extends WorldSavedData{
|
|||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound){
|
||||
//Laser World Data
|
||||
NBTTagList list = compound.getTagList("Networks", 10);
|
||||
for(int i = 0; i < list.tagCount(); i++){
|
||||
LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(list.getCompoundTagAt(i));
|
||||
NBTTagList networkList = compound.getTagList("Networks", 10);
|
||||
for(int i = 0; i < networkList.tagCount(); i++){
|
||||
LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i));
|
||||
LaserRelayConnectionHandler.getInstance().networks.add(network);
|
||||
}
|
||||
|
||||
//Player Data
|
||||
int dataSize = compound.getInteger("PersistentDataSize");
|
||||
PersistentServerData.playerSaveData.clear();
|
||||
for(int i = 0; i < dataSize; i++){
|
||||
PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(compound, "PlayerSaveData"+i);
|
||||
if(aSave != null){
|
||||
NBTTagList playerList = compound.getTagList("PlayerData", 10);
|
||||
for(int i = 0; i < playerList.tagCount(); i++){
|
||||
PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i));
|
||||
PersistentServerData.playerSaveData.add(aSave);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound compound){
|
||||
//Laser World Data
|
||||
NBTTagList list = new NBTTagList();
|
||||
NBTTagList networkList = new NBTTagList();
|
||||
for(LaserRelayConnectionHandler.Network network : LaserRelayConnectionHandler.getInstance().networks){
|
||||
list.appendTag(LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(network));
|
||||
networkList.appendTag(LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(network));
|
||||
}
|
||||
compound.setTag("Networks", list);
|
||||
compound.setTag("Networks", networkList);
|
||||
|
||||
//Player Data
|
||||
compound.setInteger("PersistentDataSize", PersistentServerData.playerSaveData.size());
|
||||
NBTTagList playerList = new NBTTagList();
|
||||
for(int i = 0; i < PersistentServerData.playerSaveData.size(); i++){
|
||||
PersistentServerData.PlayerSave theSave = PersistentServerData.playerSaveData.get(i);
|
||||
theSave.toNBT(compound, "PlayerSaveData"+i);
|
||||
playerList.appendTag(theSave.toNBT());
|
||||
}
|
||||
compound.setTag("PlayerData", playerList);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,17 +32,18 @@ public class PersistentClientData{
|
|||
private static File theFile;
|
||||
|
||||
public static void saveBookPage(BookletIndexEntry entry, BookletChapter chapter, BookletPage page, int pageInIndex){
|
||||
NBTTagCompound compound = readCompound();
|
||||
if(compound != null){
|
||||
compound.setInteger(getName("Entry"), entry == null ? -1 : InitBooklet.entries.indexOf(entry));
|
||||
compound.setInteger(getName("Chapter"), entry == null || chapter == null ? -1 : entry.chapters.indexOf(chapter));
|
||||
compound.setInteger(getName("Page"), page == null ? -1 : page.getID());
|
||||
compound.setInteger(getName("PageInIndex"), pageInIndex);
|
||||
writeCompound(compound);
|
||||
NBTTagCompound baseCompound = getBaseCompound();
|
||||
NBTTagCompound worldCompound = getCompoundForWorld(baseCompound);
|
||||
if(worldCompound != null){
|
||||
worldCompound.setInteger("Entry", entry == null ? -1 : InitBooklet.entries.indexOf(entry));
|
||||
worldCompound.setInteger("Chapter", entry == null || chapter == null ? -1 : entry.chapters.indexOf(chapter));
|
||||
worldCompound.setInteger("Page", page == null ? -1 : page.getID());
|
||||
worldCompound.setInteger("PageInIndex", pageInIndex);
|
||||
writeCompound(baseCompound, worldCompound);
|
||||
}
|
||||
}
|
||||
|
||||
private static NBTTagCompound readCompound(){
|
||||
private static NBTTagCompound getBaseCompound(){
|
||||
try{
|
||||
return CompressedStreamTools.readCompressed(new FileInputStream(getTheFile()));
|
||||
}
|
||||
|
@ -51,14 +52,18 @@ public class PersistentClientData{
|
|||
}
|
||||
}
|
||||
|
||||
private static String getName(String name){
|
||||
return (Minecraft.getMinecraft().isIntegratedServerRunning() ? Minecraft.getMinecraft().getIntegratedServer().getFolderName() : Minecraft.getMinecraft().func_147104_D().serverIP)+"-"+name;
|
||||
private static String getName(){
|
||||
return Minecraft.getMinecraft().isIntegratedServerRunning() ? Minecraft.getMinecraft().getIntegratedServer().getFolderName() : Minecraft.getMinecraft().func_147104_D().serverIP;
|
||||
}
|
||||
|
||||
private static void writeCompound(NBTTagCompound compound){
|
||||
try{
|
||||
private static NBTTagCompound getCompoundForWorld(NBTTagCompound mainCompound){
|
||||
return mainCompound.getCompoundTag(getName());
|
||||
}
|
||||
|
||||
CompressedStreamTools.writeCompressed(compound, new FileOutputStream(getTheFile()));
|
||||
private static void writeCompound(NBTTagCompound baseCompound, NBTTagCompound worldCompound){
|
||||
baseCompound.setTag(getName(), worldCompound);
|
||||
try{
|
||||
CompressedStreamTools.writeCompressed(baseCompound, new FileOutputStream(getTheFile()));
|
||||
}
|
||||
catch(Exception e){
|
||||
ModUtil.LOGGER.fatal("Couldn't write Persistent Variable!", e);
|
||||
|
@ -82,17 +87,17 @@ public class PersistentClientData{
|
|||
}
|
||||
|
||||
public static void openLastBookPage(GuiBooklet gui){
|
||||
NBTTagCompound compound = readCompound();
|
||||
if(compound != null){
|
||||
if(compound.hasKey(getName("Entry"))){
|
||||
int entry = compound.getInteger(getName("Entry"));
|
||||
int chapter = compound.getInteger(getName("Chapter"));
|
||||
int page = compound.getInteger(getName("Page"));
|
||||
NBTTagCompound worldCompound = getCompoundForWorld(getBaseCompound());
|
||||
if(worldCompound != null){
|
||||
if(worldCompound.hasKey("Entry")){
|
||||
int entry = worldCompound.getInteger("Entry");
|
||||
int chapter = worldCompound.getInteger("Chapter");
|
||||
int page = worldCompound.getInteger("Page");
|
||||
|
||||
BookletIndexEntry currentIndexEntry = entry == -1 ? null : InitBooklet.entries.get(entry);
|
||||
BookletChapter currentChapter = chapter == -1 || entry == -1 || currentIndexEntry.chapters.size() <= chapter ? null : currentIndexEntry.chapters.get(chapter);
|
||||
BookletPage currentPage = chapter == -1 || currentChapter == null || currentChapter.pages.length <= page-1 ? null : currentChapter.pages[page-1];
|
||||
int pageInIndex = compound.getInteger(getName("PageInIndex"));
|
||||
int pageInIndex = worldCompound.getInteger("PageInIndex");
|
||||
|
||||
gui.openIndexEntry(currentIndexEntry, pageInIndex, true);
|
||||
if(currentChapter != null){
|
||||
|
@ -106,15 +111,16 @@ public class PersistentClientData{
|
|||
}
|
||||
|
||||
public static void setBoolean(String name, boolean bool){
|
||||
NBTTagCompound compound = readCompound();
|
||||
if(compound != null){
|
||||
compound.setBoolean(getName(name), bool);
|
||||
writeCompound(compound);
|
||||
NBTTagCompound baseCompound = getBaseCompound();
|
||||
NBTTagCompound worldCompound = getCompoundForWorld(baseCompound);
|
||||
if(worldCompound != null){
|
||||
worldCompound.setBoolean(name, bool);
|
||||
writeCompound(baseCompound, worldCompound);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean getBoolean(String name){
|
||||
NBTTagCompound compound = readCompound();
|
||||
return compound != null && compound.getBoolean(getName(name));
|
||||
NBTTagCompound worldCompound = getCompoundForWorld(getBaseCompound());
|
||||
return worldCompound != null && worldCompound.getBoolean(name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,17 +44,20 @@ public class PersistentServerData{
|
|||
this.theCompound = theCompound;
|
||||
}
|
||||
|
||||
public static PlayerSave fromNBT(NBTTagCompound compound, String name){
|
||||
UUID theID = new UUID(compound.getLong(name+"MostSignificant"), compound.getLong(name+"LeastSignificant"));
|
||||
NBTTagCompound theCompound = compound.getCompoundTag(name+"Tag");
|
||||
public static PlayerSave fromNBT(NBTTagCompound compound){
|
||||
UUID theID = new UUID(compound.getLong("MostSignificant"), compound.getLong("LeastSignificant"));
|
||||
NBTTagCompound theCompound = compound.getCompoundTag("Tag");
|
||||
return new PlayerSave(theID, theCompound);
|
||||
}
|
||||
|
||||
public void toNBT(NBTTagCompound compound, String name){
|
||||
compound.setLong(name+"LeastSignificant", this.thePlayerUUID.getLeastSignificantBits());
|
||||
compound.setLong(name+"MostSignificant", this.thePlayerUUID.getMostSignificantBits());
|
||||
public NBTTagCompound toNBT(){
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
compound.setLong("LeastSignificant", this.thePlayerUUID.getLeastSignificantBits());
|
||||
compound.setLong("MostSignificant", this.thePlayerUUID.getMostSignificantBits());
|
||||
|
||||
compound.setTag(name+"Tag", this.theCompound);
|
||||
compound.setTag("Tag", this.theCompound);
|
||||
|
||||
return compound;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue