All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.to2mbn.jmccc.version.Asset Maven / Gradle / Ivy

There is a newer version: 2.5-beta-1
Show newest version
package org.to2mbn.jmccc.version;

import java.io.IOException;
import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
import org.to2mbn.jmccc.option.MinecraftDirectory;
import org.to2mbn.jmccc.util.ChecksumUtils;

public class Asset implements Serializable {

	private static final long serialVersionUID = 1L;

	private String virtualPath;
	private String hash;
	private int size;

	/**
	 * Constructor of Asset.
	 * 
	 * @param virtualPath the virtual path
	 * @param hash the sha1 hash
	 * @param size the size
	 * @throws NullPointerException if virtualPath==null||hash==null
	 * @throws IllegalArgumentException if size<0
	 */
	public Asset(String virtualPath, String hash, int size) {
		Objects.requireNonNull(virtualPath);
		Objects.requireNonNull(hash);
		if (size < 0) {
			throw new IllegalArgumentException("size<0");
		}

		this.virtualPath = virtualPath;
		this.hash = hash;
		this.size = size;
	}

	/**
	 * Gets the virtual path.
	 * 
	 * @return the virtual path
	 */
	public String getVirtualPath() {
		return virtualPath;
	}

	/**
	 * Gets the sha1 hash of the asset.
	 * 
	 * @return the sha1 hash of the asset
	 */
	public String getHash() {
		return hash;
	}

	/**
	 * Gets the size of the asset.
	 * 
	 * @return the size of the asset
	 */
	public int getSize() {
		return size;
	}

	@Override
	public String toString() {
		return virtualPath + " [hash=" + hash + ", size=" + size + "]";
	}

	/**
	 * Gets the relative path of the asset.
	 * 

* The method uses '/' separator, and uses 'assets/objects' as the base dir.
* The asset file is located at: * *

	 * ${mcdir}/assets/objects/${2-character-prefix of hash}/${hash}
	 * 
* * So the format of the return value will be: * *
	 * ${2-character-prefix of hash}/${hash}
	 * 
* * @return the relative path of the asset */ public String getPath() { return hash.substring(0, 2) + "/" + hash; } /** * Validates the asset in the given mcdir. *

* This method checks the size, hash of the asset. If, one of them mismatches, or the asset file doesn't exist, this * method will return false. Or this method will return true. * * @param dir the mcdir where the asset is in * @return true if the asset is valid * @throws IOException if an i/o error occurs * @throws NoSuchAlgorithmException if the default hash algorithm SHA-1 doesn't exist */ public boolean isValid(MinecraftDirectory dir) throws IOException, NoSuchAlgorithmException { return ChecksumUtils.verify(dir.getAsset(this), getHash(), "SHA-1", size); } @Override public int hashCode() { return Objects.hash(virtualPath, hash, size); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof Asset) { Asset another = (Asset) obj; return virtualPath.equals(another.virtualPath) && hash.equals(another.hash) && size == another.size; } return false; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy