package net.minecraft.client.resources.data; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumTypeAdapterFactory; import net.minecraft.util.IChatComponent; import net.minecraft.util.IRegistry; import net.minecraft.util.RegistrySimple; @SideOnly(Side.CLIENT) public class IMetadataSerializer { private final IRegistry metadataSectionSerializerRegistry = new RegistrySimple(); private final GsonBuilder gsonBuilder = new GsonBuilder(); /** Cached Gson instance. Set to null when more sections are registered, and then re-created from the builder. */ private Gson gson; private static final String __OBFID = "CL_00001101"; public IMetadataSerializer() { this.gsonBuilder.registerTypeHierarchyAdapter(IChatComponent.class, new IChatComponent.Serializer()); this.gsonBuilder.registerTypeHierarchyAdapter(ChatStyle.class, new ChatStyle.Serializer()); this.gsonBuilder.registerTypeAdapterFactory(new EnumTypeAdapterFactory()); } public void registerMetadataSectionType(IMetadataSectionSerializer p_110504_1_, Class p_110504_2_) { this.metadataSectionSerializerRegistry.putObject(p_110504_1_.getSectionName(), new IMetadataSerializer.Registration(p_110504_1_, p_110504_2_, null)); this.gsonBuilder.registerTypeAdapter(p_110504_2_, p_110504_1_); this.gson = null; } public IMetadataSection parseMetadataSection(String p_110503_1_, JsonObject p_110503_2_) { if (p_110503_1_ == null) { throw new IllegalArgumentException("Metadata section name cannot be null"); } else if (!p_110503_2_.has(p_110503_1_)) { return null; } else if (!p_110503_2_.get(p_110503_1_).isJsonObject()) { throw new IllegalArgumentException("Invalid metadata for \'" + p_110503_1_ + "\' - expected object, found " + p_110503_2_.get(p_110503_1_)); } else { IMetadataSerializer.Registration registration = (IMetadataSerializer.Registration)this.metadataSectionSerializerRegistry.getObject(p_110503_1_); if (registration == null) { throw new IllegalArgumentException("Don\'t know how to handle metadata section \'" + p_110503_1_ + "\'"); } else { return (IMetadataSection)this.getGson().fromJson(p_110503_2_.getAsJsonObject(p_110503_1_), registration.field_110500_b); } } } /** * Returns a Gson instance with type adapters registered for metadata sections. */ private Gson getGson() { if (this.gson == null) { this.gson = this.gsonBuilder.create(); } return this.gson; } @SideOnly(Side.CLIENT) class Registration { final IMetadataSectionSerializer field_110502_a; final Class field_110500_b; private static final String __OBFID = "CL_00001103"; private Registration(IMetadataSectionSerializer p_i1305_2_, Class p_i1305_3_) { this.field_110502_a = p_i1305_2_; this.field_110500_b = p_i1305_3_; } Registration(IMetadataSectionSerializer p_i1306_2_, Class p_i1306_3_, Object p_i1306_4_) { this(p_i1306_2_, p_i1306_3_); } } }