ResourcePacks: Support compression

This commit is contained in:
spycrab 2019-02-02 15:54:06 +01:00
parent d55e276d0b
commit b6863ff0a2
3 changed files with 14 additions and 2 deletions

View File

@ -29,6 +29,7 @@ Manifest::Manifest(const std::string& json)
picojson::value& authors = out.get("authors"); picojson::value& authors = out.get("authors");
picojson::value& description = out.get("description"); picojson::value& description = out.get("description");
picojson::value& website = out.get("website"); picojson::value& website = out.get("website");
picojson::value& compressed = out.get("compressed");
if (!name.is<std::string>() || !id.is<std::string>() || !version.is<std::string>()) if (!name.is<std::string>() || !id.is<std::string>() || !version.is<std::string>())
{ {
@ -58,6 +59,9 @@ Manifest::Manifest(const std::string& json)
if (website.is<std::string>()) if (website.is<std::string>())
m_website = website.to_str(); m_website = website.to_str();
if (compressed.is<bool>())
m_compressed = compressed.get<bool>();
} }
bool Manifest::IsValid() const bool Manifest::IsValid() const
@ -99,4 +103,10 @@ const std::optional<std::string>& Manifest::GetWebsite() const
{ {
return m_website; return m_website;
} }
bool Manifest::IsCompressed() const
{
return m_compressed;
}
} // namespace ResourcePack } // namespace ResourcePack

View File

@ -15,6 +15,7 @@ public:
explicit Manifest(const std::string& text); explicit Manifest(const std::string& text);
bool IsValid() const; bool IsValid() const;
bool IsCompressed() const;
const std::string& GetName() const; const std::string& GetName() const;
const std::string& GetVersion() const; const std::string& GetVersion() const;
@ -27,6 +28,7 @@ public:
private: private:
bool m_valid = true; bool m_valid = true;
bool m_compressed = false;
std::string m_name; std::string m_name;
std::string m_version; std::string m_version;

View File

@ -126,8 +126,8 @@ ResourcePack::ResourcePack(const std::string& path) : m_path(path)
if (filename.compare(0, 9, "textures/") != 0 || texture_info.uncompressed_size == 0) if (filename.compare(0, 9, "textures/") != 0 || texture_info.uncompressed_size == 0)
continue; continue;
// If a texture is compressed, abort. // If a texture is compressed and the manifest doesn't state that, abort.
if (texture_info.compression_method != 0) if (!m_manifest->IsCompressed() && texture_info.compression_method != 0)
{ {
m_valid = false; m_valid = false;
m_error = "Texture " + filename + " is compressed!"; m_error = "Texture " + filename + " is compressed!";