150 lines
4.1 KiB
Java

package net.optifine;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.ITextureObject;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.optifine.render.Blender;
import net.optifine.util.PropertiesOrdered;
public class CustomSky {
private static CustomSkyLayer[][] worldSkyLayers = (CustomSkyLayer[][]) null;
public static void reset() {
worldSkyLayers = (CustomSkyLayer[][]) null;
}
public static void update() {
reset();
if (Config.isCustomSky()) {
worldSkyLayers = readCustomSkies();
}
}
private static CustomSkyLayer[][] readCustomSkies() {
CustomSkyLayer[][] acustomskylayer = new CustomSkyLayer[10][0];
String s = "mcpatcher/sky/world";
int i = -1;
for (int j = 0; j < acustomskylayer.length; ++j) {
String s1 = s + j + "/sky";
List list = new ArrayList();
for (int k = 1; k < 1000; ++k) {
String s2 = s1 + k + ".properties";
ResourceLocation resourcelocation = new ResourceLocation(s2);
try (InputStream inputstream = Minecraft.getMinecraft().getResourceManager()
.getResource(resourcelocation).getInputStream()) {
if (inputstream == null) {
break;
}
Properties properties = new PropertiesOrdered();
properties.load(inputstream);
inputstream.close();
Config.dbg("CustomSky properties: " + s2);
String s3 = s1 + k + ".png";
CustomSkyLayer customskylayer = new CustomSkyLayer(properties, s3);
if (customskylayer.isValid(s2)) {
ResourceLocation resourcelocation1 = new ResourceLocation(customskylayer.source);
TextureManager mgr = Minecraft.getMinecraft().getTextureManager();
mgr.bindTexture(resourcelocation1);
ITextureObject itextureobject = mgr.getTexture(resourcelocation1);
if (itextureobject == null) {
Config.warn("CustomSky: Texture not found: " + resourcelocation1);
} else {
customskylayer.textureId = itextureobject.getGlTextureId();
list.add(customskylayer);
inputstream.close();
}
}
} catch (FileNotFoundException var15) {
break;
} catch (IOException ioexception) {
ioexception.printStackTrace();
}
}
if (list.size() > 0) {
CustomSkyLayer[] acustomskylayer2 = (CustomSkyLayer[]) ((CustomSkyLayer[]) list
.toArray(new CustomSkyLayer[list.size()]));
acustomskylayer[j] = acustomskylayer2;
i = j;
}
}
if (i < 0) {
return (CustomSkyLayer[][]) null;
} else {
int l = i + 1;
CustomSkyLayer[][] acustomskylayer1 = new CustomSkyLayer[l][0];
for (int i1 = 0; i1 < acustomskylayer1.length; ++i1) {
acustomskylayer1[i1] = acustomskylayer[i1];
}
return acustomskylayer1;
}
}
public static void renderSky(World world, TextureManager re, float partialTicks) {
if (worldSkyLayers != null) {
int i = world.provider.getDimensionId();
if (i >= 0 && i < worldSkyLayers.length) {
CustomSkyLayer[] acustomskylayer = worldSkyLayers[i];
if (acustomskylayer != null) {
long j = world.getWorldTime();
int k = (int) (j % 24000L);
float f = world.getCelestialAngle(partialTicks);
float f1 = world.getRainStrength(partialTicks);
float f2 = world.getThunderStrength(partialTicks);
if (f1 > 0.0F) {
f2 /= f1;
}
for (int l = 0; l < acustomskylayer.length; ++l) {
CustomSkyLayer customskylayer = acustomskylayer[l];
if (customskylayer.isActive(world, k)) {
customskylayer.render(world, k, f, f1, f2);
}
}
float f3 = 1.0F - f1;
Blender.clearBlend(f3);
}
}
}
}
public static boolean hasSkyLayers(World world) {
if (worldSkyLayers == null) {
return false;
} else {
int i = world.provider.getDimensionId();
if (i >= 0 && i < worldSkyLayers.length) {
CustomSkyLayer[] acustomskylayer = worldSkyLayers[i];
return acustomskylayer == null ? false : acustomskylayer.length > 0;
} else {
return false;
}
}
}
}