package universalteam.universalcore.nick; import com.google.common.base.Strings; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.io.Files; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.internal.LinkedTreeMap; import com.google.gson.reflect.TypeToken; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; import universalteam.universalcore.configuration.Config; import universalteam.universalcore.utils.ServerUtil; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.lang.reflect.Type; public class NicknameData { public static BiMap<String, String> nicknames; private static Gson gson; private static Type type; private static File nicknameFile; public static void initialize() { nicknames = HashBiMap.create(); gson = new GsonBuilder().setPrettyPrinting().create(); type = new TypeToken<HashBiMap<String, String>>() { }.getType(); nicknameFile = new File(Config.configLocation, "nicknames.json"); checkFileStructure(); loadNickNames(); } public static void deInitialize() { saveNicknames(); } public static void setNickname(String username, String nickname) { if (Strings.isNullOrEmpty(nickname) && nicknames.containsKey(username)) nicknames.put(username, username); else nicknames.put(username, nickname); if (FMLCommonHandler.instance().getSide().equals(Side.SERVER)) updateNickname(username); } public static void updateNickname(String username) { EntityPlayer player = ServerUtil.getPlayerForUserName(username); if (player != null) player.refreshDisplayName(); } public static String getNickname(String username) { return nicknames.containsKey(username) ? nicknames.get(username) : null; } public static String getUsername(String nickname) { return nicknames.containsValue(nickname) ? nicknames.inverse().get(nickname) : null; } private static void checkFileStructure() { try { Files.createParentDirs(nicknameFile); nicknameFile.createNewFile(); } catch (Exception e) { e.printStackTrace(); } } private static void loadNickNames() { if (!nicknameFile.exists()) return; nicknames = HashBiMap.create(); try { LinkedTreeMap<String, String> tempNicks = gson.fromJson(new FileReader(nicknameFile), type); if (tempNicks == null || tempNicks.isEmpty()) return; for (String name : tempNicks.keySet()) nicknames.put(name, tempNicks.get(name)); } catch (Exception e) { e.printStackTrace(); } } private static void saveNicknames() { try { FileWriter writer = new FileWriter(nicknameFile); writer.write(gson.toJson(nicknames, type)); writer.close(); } catch (Exception e) { e.printStackTrace(); } } }