package tk.captainsplexx.Resource; import java.io.File; import tk.captainsplexx.Game.Core; import tk.captainsplexx.Mod.ModTools; import tk.captainsplexx.Mod.Package; import tk.captainsplexx.Mod.PackageEntry; import tk.captainsplexx.Render.TextureHandler; import tk.captainsplexx.Resource.CAS.CasCatManager; import tk.captainsplexx.Resource.CAS.CasDataReader; import tk.captainsplexx.Resource.EBX.EBXHandler; import tk.captainsplexx.Resource.MESH.MeshChunkLoader; import tk.captainsplexx.Resource.MESH.MeshVariationDatabaseHandler; import tk.captainsplexx.Resource.TOC.ResourceLink; public class ResourceHandler { public static enum ResourceType{ EBX, CHUNK, ITEXTURE, MESH, HKDESTRUCTION, HKNONDESTRUCTION, ANT, ANIMTRACKDATA, RAGDOLL, OCCLUSIONMESH, LIGHTINGSYSTEM, GFX, STREAIMINGSTUB, ENLIGHTEN, PROBESET, STATICENLIGHTEN, SHADERDATERBASE, SHADERDB, SHADERPROGRAMDB, LUAC, UNDEFINED }; public static enum LinkBundleType{BUNDLES, CHUNKS}; MeshChunkLoader mcL; MeshVariationDatabaseHandler mvdH; EBXHandler ebxHandler; TextureHandler textureHandler; CasCatManager cCatManager; CasCatManager patchedCasCatManager; public ResourceHandler() { this.mcL = new MeshChunkLoader(); this.ebxHandler = new EBXHandler(); this.mvdH = new MeshVariationDatabaseHandler(); this.textureHandler = new TextureHandler(); this.cCatManager = new CasCatManager(); this.patchedCasCatManager = new CasCatManager(); } public void resetEBXRelated(){ ebxHandler.reset(); mvdH.reset(); Core.getJavaFXHandler().getMainWindow().destroyEBXWindows(); } public ResourceLink getResourceLinkByEBXGUID(String ebxGUID){ for (ResourceLink link : Core.getGame().getCurrentSB().getEbx()){ if (link.getEbxFileGUID()!=null){ if (link.getEbxFileGUID().equalsIgnoreCase(ebxGUID)){ return link; } } } //System.err.println("ResourceLink not found for EBXGUID "+ebxGUID+"!"); return null; } public ResourceLink getResourceLink(String resourceName, ResourceType resourceType){ if (resourceType==ResourceType.EBX){ for (ResourceLink resLinkEBX : Core.getGame().getCurrentSB().getEbx()){ if (resLinkEBX.getName().equalsIgnoreCase(resourceName)){ return resLinkEBX; } } }else{ for (ResourceLink resLinkRES : Core.getGame().getCurrentSB().getRes()){ if (resLinkRES.getName().equalsIgnoreCase(resourceName)){ return resLinkRES; } } } return null; } public byte[] readResourceLink(ResourceLink link, boolean useOriginal){ System.out.println("Reading Link: "+link.getName()+" - Original only:("+useOriginal+")"); return readResource(link.getBaseSha1(), link.getDeltaSha1(), link.getSha1(), link.getCasPatchType(), link.getName(), link.getType(), useOriginal); } public byte[] readResourceLink(ResourceLink link){ return readResourceLink(link, false); } public byte[] readResource(String baseSHA1, String deltaSHA1, String SHA1, int casPatchType, String name, ResourceType resourceType, boolean useOriginal) { byte[] data = null; if (!useOriginal && name!=null){//should get patched files used ? (default: true) File modFilePack = new File(FileHandler.normalizePath( Core.getGame().getCurrentMod().getPath()+ModTools.PACKAGEFOLDER+ Core.getGame().getCurrentFile().replace(Core.gamePath, "")+ModTools.PACKTYPE) ); Package modPackage = null; if (modFilePack.exists()){ modPackage = Core.getModTools().readPackageInfo(modFilePack); } if (modPackage!=null){ //package was found. letz find the entry! for (PackageEntry entry : modPackage.getEntries()){ if (entry.getSubPackage().equalsIgnoreCase(Core.getGame().getCurrentSB().getPath())&&//mp_playground/content entry.getResourcePath().equalsIgnoreCase(name+"."+resourceType))//levels/mp_playground/content/layer2_buildings.ebx .itexture .mesh { //we are in the right package and an entry was found ;) System.err.println("Mod file was found, this is our resource!"); data = FileHandler.readFile(Core.getGame().getCurrentMod().getPath()+ModTools.RESOURCEFOLDER+entry.getResourcePath()); if (data!=null){ return data; } } } } } System.err.println("No Mod file does exist for this resource, use ORIGINAL data from Game."); data = CasDataReader.readCas(baseSHA1, deltaSHA1, SHA1, casPatchType); //hope here, that it was found! return data; } public CasCatManager getPatchedCasCatManager() { return patchedCasCatManager; } public MeshChunkLoader getMeshChunkLoader() { return mcL; } public MeshVariationDatabaseHandler getMeshVariationDatabaseHandler() { return mvdH; } public EBXHandler getEBXHandler() { return ebxHandler; } public TextureHandler getTextureHandler() { return textureHandler; } public CasCatManager getCasCatManager() { return cCatManager; } }