diff options
Diffstat (limited to 'src/main/java/kubatech/savedata/PlayerDataManager.java')
-rw-r--r-- | src/main/java/kubatech/savedata/PlayerDataManager.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/main/java/kubatech/savedata/PlayerDataManager.java b/src/main/java/kubatech/savedata/PlayerDataManager.java new file mode 100644 index 0000000000..3fcaf1ba25 --- /dev/null +++ b/src/main/java/kubatech/savedata/PlayerDataManager.java @@ -0,0 +1,71 @@ +package kubatech.savedata; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.WorldSavedData; +import net.minecraftforge.event.world.WorldEvent; + +public class PlayerDataManager extends WorldSavedData { + + private static final String playerDataName = "KubaTech_PlayerData"; + static PlayerDataManager Instance = null; + private final HashMap<String, PlayerData> players = new HashMap<>(); + + public static void Initialize(World world) { + if (Instance != null) { + Instance.players.clear(); + } + Instance = (PlayerDataManager) world.mapStorage.loadData(PlayerDataManager.class, playerDataName); + if (Instance == null) { + Instance = new PlayerDataManager(); + world.mapStorage.setData(playerDataName, Instance); + } + Instance.markDirty(); + } + + @SuppressWarnings("unused") + public PlayerDataManager(String p_i2141_1_) { + super(p_i2141_1_); + } + + public PlayerDataManager() { + super(playerDataName); + } + + @Override + public void readFromNBT(NBTTagCompound NBTData) { + if (!NBTData.hasKey("size")) return; + players.clear(); + for (int i = 0, imax = NBTData.getInteger("size"); i < imax; i++) { + NBTTagCompound playerNBTData = NBTData.getCompoundTag("Player." + i); + players.put(playerNBTData.getString("username"), new PlayerData(playerNBTData.getCompoundTag("data"))); + } + } + + @Override + public void writeToNBT(NBTTagCompound NBTData) { + NBTData.setInteger("size", players.size()); + int i = 0; + for (Map.Entry<String, PlayerData> playerDataEntry : players.entrySet()) { + NBTTagCompound playerNBTData = new NBTTagCompound(); + playerNBTData.setString("username", playerDataEntry.getKey()); + playerNBTData.setTag("data", playerDataEntry.getValue().toNBTData()); + NBTData.setTag("Player." + (i++), playerNBTData); + } + } + + public static PlayerData getPlayer(String username) { + if (Instance == null) return null; + return Instance.players.computeIfAbsent(username, s -> new PlayerData()); + } + + @SuppressWarnings("unused") + @SubscribeEvent + public void onWorldLoad(WorldEvent.Load event) { + if (event.world.isRemote || event.world.provider.dimensionId != 0) return; + Initialize(event.world); + } +} |