Skip to content

Commit

Permalink
Shaders can now be zipped
Browse files Browse the repository at this point in the history
  • Loading branch information
Bestsoft101 committed Sep 17, 2024
1 parent 223228d commit 5b55fc9
Show file tree
Hide file tree
Showing 9 changed files with 239 additions and 110 deletions.
2 changes: 1 addition & 1 deletion src/asmloader.mod.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"modid": "shaders",
"version": "1.0.1",
"version": "1.0.2",
"transformers": [
"b100.shaders.asm.Transformers"
]
Expand Down
38 changes: 3 additions & 35 deletions src/b100/shaders/Shader.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL20.*;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -95,40 +92,11 @@ private void deleteShaders() {
}

public String getShaderSource(String name) {
File shaderpackFile = ShaderMod.getCurrentShaderPackFile();
if(shaderpackFile == null) {
ShaderProvider shaderProvider = ShaderMod.getCurrentShaderPack();
if(shaderProvider == null) {
return null;
}

File shaderFile = new File(shaderpackFile, name);
if(!shaderFile.exists()) {
return null;
}

BufferedReader br = null;
StringBuilder string = new StringBuilder();

try {
br = new BufferedReader(new FileReader(shaderFile));

while(true) {
String line = br.readLine();
if(line == null) {
break;
}
string.append(line).append("\n");
}

return string.toString();
}catch (Exception e) {
System.err.println("Error reading shader file '" + shaderFile.getAbsolutePath() + "'!");
e.printStackTrace();
return null;
}finally {
try {
br.close();
}catch (Exception e) {}
}
return shaderProvider.getFileContentAsString(name);
}

public boolean bind() {
Expand Down
54 changes: 17 additions & 37 deletions src/b100/shaders/ShaderMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ public class ShaderMod {
public static ShaderModConfig config;

private static File minecraftDirectory;
private static File shaderDirectory;
private static File shaderPackDirectory;
private static File configFile;

Expand All @@ -31,6 +30,8 @@ public class ShaderMod {
public static boolean enableNormals = false;
public static boolean enableSpecular = false;

private static ShaderProvider currentShaderPack;

static {
grabInstanceAndDirectory();
}
Expand All @@ -49,15 +50,10 @@ private static void grabInstanceAndDirectory() {
configFile = new File(configDirectory, "shaders.cfg");

config = new ShaderModConfig(mc);
config.load();
}

public static File getShaderDirectory() {
return shaderDirectory;
}

public static File getCurrentShaderPackFile() {
return shaderDirectory;
public static ShaderProvider getCurrentShaderPack() {
return currentShaderPack;
}

public static File getShaderPackDirectory() {
Expand All @@ -68,32 +64,10 @@ public static File getConfigFile() {
return configFile;
}

public static boolean isShaderPack(File file) {
if(file.isDirectory()) {
File shaderJson = new File(file, "shader.json");
return shaderJson.exists();
}
// if(file.isFile() && file.getName().toLowerCase().endsWith(".zip")) {
// ZipFile zipFile = null;
// try {
// zipFile = new ZipFile(file);
//
// return zipFile.getEntry("/shader.json") != null;
// }catch (Exception e) {
// e.printStackTrace();
// }finally {
// try {
// zipFile.close();
// }catch (Exception e) {}
// }
// }
return false;
}

public static boolean isShaderPackSelected(File file) {
if(file == null && shaderDirectory == null) return true;
if(file == null || shaderDirectory == null) return false;
return file.equals(shaderDirectory);
public static boolean isShaderPackSelected(ShaderProvider shaderProvider) {
if(shaderProvider == null && currentShaderPack == null) return true;
if(shaderProvider == null || currentShaderPack == null) return false;
return shaderProvider.equals(currentShaderPack);
}

public static void log(String string) {
Expand All @@ -107,9 +81,15 @@ public static void logAndDisplay(String string) {
}
}

public static void setShaderpack(File file) {
log("Set Shaderpack: " + (file != null ? file.getName() : "(None)"));
shaderDirectory = file;
public static void setShaderpack(ShaderProvider shaderProvider) {
Thread.dumpStack();

if(currentShaderPack != null) {
currentShaderPack.close();
}

log("Set Shaderpack: " + (shaderProvider != null ? shaderProvider.getName() : "(None)"));
currentShaderPack = shaderProvider;

if(mc.renderer != null) {
ShaderRenderer shaderRenderer = (ShaderRenderer) mc.renderer;
Expand Down
34 changes: 34 additions & 0 deletions src/b100/shaders/ShaderProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package b100.shaders;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.zip.ZipFile;

public interface ShaderProvider {

public String getName();

public String getFileContentAsString(String path);

public BufferedImage getImage(String path);

public void open();

public void close();

public boolean equals(ShaderProvider shaderProvider);

public static ShaderProvider getShaderProvider(File file) {
if(file.isDirectory() && new File(file, "shader.json").exists()) {
return new ShaderProviderFolder(file);
}
ZipFile zipFile = null;
try {
zipFile = new ZipFile(file);
zipFile.close();
return new ShaderProviderZip(file);
}catch (Exception e) {}
return null;
}

}
58 changes: 58 additions & 0 deletions src/b100/shaders/ShaderProviderFolder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package b100.shaders;

import java.awt.image.BufferedImage;
import java.io.File;

import b100.utils.ImageUtils;
import b100.utils.StringUtils;

public class ShaderProviderFolder implements ShaderProvider {

public File directory;

public ShaderProviderFolder(File directory) {
if(!directory.isDirectory()) {
throw new RuntimeException("Not a directory: '" + directory + "'!");
}
this.directory = directory;
}

@Override
public String getName() {
return directory.getName();
}

@Override
public String getFileContentAsString(String path) {
File file = new File(directory, path);
if(!file.exists()) {
return null;
}
return StringUtils.getFileContentAsString(file);
}

@Override
public BufferedImage getImage(String path) {
return ImageUtils.loadExternalImage(new File(directory, path));
}

@Override
public void open() {

}

@Override
public void close() {

}

@Override
public boolean equals(ShaderProvider shaderProvider) {
if(shaderProvider instanceof ShaderProviderFolder) {
ShaderProviderFolder spf = (ShaderProviderFolder) shaderProvider;
return spf.directory.equals(directory);
}
return false;
}

}
83 changes: 83 additions & 0 deletions src/b100/shaders/ShaderProviderZip.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package b100.shaders;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import javax.imageio.ImageIO;

import b100.utils.StringUtils;

public class ShaderProviderZip implements ShaderProvider {

public File file;
public ZipFile zipFile;

public ShaderProviderZip(File file) {
this.file = file;
}

@Override
public String getName() {
return file.getName();
}

@Override
public String getFileContentAsString(String path) {
try {
ZipEntry entry = zipFile.getEntry(path);
if(entry == null) {
return null;
}
return StringUtils.readInputString(zipFile.getInputStream(entry));
}catch (IOException e) {
throw new RuntimeException(e);
}
}

@Override
public BufferedImage getImage(String path) {
try {
ZipEntry entry = zipFile.getEntry(path);
if(entry == null) {
return null;
}
return ImageIO.read(zipFile.getInputStream(entry));
}catch (Exception e) {
throw new RuntimeException(e);
}
}

@Override
public void open() {
if(zipFile == null) {
try {
zipFile = new ZipFile(file);
}catch (IOException e) {
throw new RuntimeException(e);
}
}
}

@Override
public void close() {
if(zipFile != null) {
try {
zipFile.close();
}catch (Exception e) {}
zipFile = null;
}
}

@Override
public boolean equals(ShaderProvider shaderProvider) {
if(shaderProvider instanceof ShaderProviderZip) {
ShaderProviderZip spz = (ShaderProviderZip) shaderProvider;
return spz.file.equals(file);
}
return false;
}

}
Loading

0 comments on commit 5b55fc9

Please sign in to comment.